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

Java Android Wear附加到textView崩溃应用程序,java,android,nullpointerexception,wear-os,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); g

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

打印到日志就可以了

当我试图附加到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());
}
以及具有正确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>

谢谢, 文档中的Emmett注意到了一些问题。特别要注意以下几点:

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

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

@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);
            ...
        }
    });
}
[请注意,我的一位同事指出,目前存在一个bug,要求您按照特定顺序定义方形布局xml属性和圆形布局xml属性,以使其正常工作-我不记得需要先定义哪个,如果遇到问题,请提醒一下]文档中的

注意到了一些问题。特别要注意以下几点:

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

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

@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);
            ...
        }
    });
}

[请注意,我的一位同事指出,目前存在一个bug,要求您按照特定顺序定义方形布局xml属性和圆形布局xml属性,以使其正常工作-我不记得需要先定义哪个,如果遇到问题,请提醒一下].

sensorTextView
以某种方式为空。id是在
activity\u main.xml
中定义的,而不是错误地在其他文件中定义的吗?我在rect\u activity\u main.xml文件和round\u activity\u main.xml文件中定义了id。我的理解是,这些都是根据设备的形状来调用的,因此没有必要在主视图中重新定义?
sensorTextView
以某种方式为空。id是在
activity\u main.xml
中定义的,而不是错误地在其他文件中定义的吗?我在rect\u activity\u main.xml文件和round\u activity\u main.xml文件中定义了id。我的理解是,这些调用取决于设备的形状,因此基本上没有必要重新定义?