1. 在非UI线程中修改UI界面的视图
错误:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
解决方案:
这个异常通常发生在尝试在非UI线程(例如后台线程或其他工作线程)中修改UI界面的视图,例如更新TextView的文本或更改ImageView的图像。Android限制了只有UI线程才能更新UI界面,这是为了避免多线程并发操作导致的线程安全问题。
要解决这个问题,可以使用runOnUiThread()方法
在Activity或Fragment中,可以使用runOnUiThread()方法将UI更新操作发送到UI线程中执行。例如:
```java
runOnUiThread(new Runnable() {
@Override
public void run() {
// 在UI线程中执行UI更新操作
textView.setText("Hello World!");
}
});
```
在上面的代码中,使用runOnUiThread()方法将UI更新操作发送到UI线程中执行。在runOnUiThread()方法中传递了一个Runnable对象,用于封装UI更新操作。
2.找不到字符串资源ID
错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bottomnavigationdemo, PID: 13381
android.content.res.Resources$NotFoundException: String resource ID #0x0
解决方案:
这个问题的错误信息中提到了一个Resources$NotFoundException异常,并提示找不到字符串资源ID(String resource ID #0x0)。
通常情况下,这个错误是由于在调用setText()等方法时,传递了一个整数(int)类型的参数,而不是字符串类型的参数。在这种情况下,Android系统会尝试根据传递的整数参数查找对应的字符串资源ID,但是找不到对应的字符串资源,则会抛出Resources$NotFoundException异常。
解决这个问题的方法是,确保在调用setText()等方法时传递的参数为字符串类型,并且不是整数类型。
textView.setText(String.valueOf(number));