Android Wear附加到textView崩溃的应用程序

时间:2015-10-21 21:31:56

标签: java android nullpointerexception wear-os

因此,在尝试检索应用程序中的传感器列表时,我遇到了一个奇怪的问题。

打印到日志工作正常。

当我尝试追加到textView时,它会崩溃。

这是我正在尝试追加的地方:

protected void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.activity_main);

    sensorTextView = (TextView) findViewById(R.id.sensorList);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    initialiseAccelerometer();

    sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
    List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
    for (Sensor sensor : sensors) {
        Log.d("Sensors", "" + sensor.getName());
        sensorTextView.append(sensor.getName());
    }

    sensorManager.registerListener(
                               this,
                               sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                               SensorManager.SENSOR_DELAY_NORMAL);
    mGestureDetector = new GestureDetectorCompat(this, new LongPressListener());
}

随后的错误:

java.lang.RuntimeException: Unable to start activity     
ComponentInfo{com.example.XXXXXX.XXXXXXXXXXX.MainActivity}: 
java.lang.NullPointerException: 
Attempt to invoke virtual method 
'void android.widget.TextView.append(java.lang.CharSequence)' on a null object reference

具有正确ID的XML文件:

android:id="@+id/sensorList"

有人能指出我正确的方向或建议我做错了吗?

activity_main.xml中:

<android.support.wearable.view.WatchViewStub
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/watch_view_stub"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:rectLayout="@layout/rect_activity_main"
app:roundLayout="@layout/round_activity_main"
tools:context=".MainActivity"
tools:deviceIds="wear"></android.support.wearable.view.WatchViewStub>

谢谢, 埃米特

1 个答案:

答案 0 :(得分:0)

文档的

This section注意到WatchViewStub的一些怪癖。特别要注意以下几点:

  

在WatchViewStub检测到屏幕形状之前,您为方形或圆形屏幕指定的布局不会膨胀,因此您的应用无法立即访问其视图。要访问这些视图,请在活动中设置一个侦听器,以便在特定于形状的布局膨胀时收到通知

您可能过早地尝试设置TextView引用,这就是为什么它在您尝试追加文本时为空。如果您使用下面的示例代码(也来自文档)中的OnLayoutInflatedListener来等待适当的圆形/方形布局膨胀,您应该会发现两种屏幕类型的引用都已正确初始化:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wear);

    WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
    stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
        @Override public void onLayoutInflated(WatchViewStub stub) {
            // Now you can access your views
            TextView tv = (TextView) stub.findViewById(R.id.text);
            ...
        }
    });
}

[请注意,我的一位同事表示目前存在一个错误,要求您按特定顺序定义方形布局xml属性和圆形布局xml属性,以便工作 - 我不记得哪个需要先行,如果你遇到问题则需要单挑......。