因此,在尝试检索应用程序中的传感器列表时,我遇到了一个奇怪的问题。
打印到日志工作正常。
当我尝试追加到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>
谢谢, 埃米特
答案 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属性,以便工作 - 我不记得哪个需要先行,如果你遇到问题则需要单挑......。