在UI线程强制运行的settext上抛出Android Null指针异常
runOnUiThread(new Runnable() {
@Override
public void run() {
String name=portalData.getFullname();
setContentView(R.layout.gradebook);
tname.setText(name);
}
});
我已经创建了TextView的静态成员 在创造我这样做
super.onStart();
setContentView(R.layout.gradebook);
tname=(TextView)findViewById(R.id.fullname);
无法理解造成这种情况的原因 栈跟踪
10-15 15:19:07.090: E/AndroidRuntime(1604): FATAL EXCEPTION: main
10-15 15:19:07.090: E/AndroidRuntime(1604): java.lang.NullPointerException
10-15 15:19:07.090: E/AndroidRuntime(1604): at com.example.campus.Gradebook$ObservableDemo$6.run(Gradebook.java:518)
10-15 15:19:07.090: E/AndroidRuntime(1604): at android.os.Handler.handleCallback(Handler.java:730)
10-15 15:19:07.090: E/AndroidRuntime(1604): at android.os.Handler.dispatchMessage(Handler.java:92)
10-15 15:19:07.090: E/AndroidRuntime(1604): at android.os.Looper.loop(Looper.java:137)
10-15 15:19:07.090: E/AndroidRuntime(1604): at android.app.ActivityThread.main(ActivityThread.java:5103)
10-15 15:19:07.090: E/AndroidRuntime(1604): at java.lang.reflect.Method.invokeNative(Native Method)
10-15 15:19:07.090: E/AndroidRuntime(1604): at java.lang.reflect.Method.invoke(Method.java:525)
10-15 15:19:07.090: E/AndroidRuntime(1604): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-15 15:19:07.090: E/AndroidRuntime(1604): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-15 15:19:07.090: E/AndroidRuntime(1604): at dalvik.system.NativeStart.main(Native Method)
这是XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".vbook" >
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="70dp"
android:layout_marginTop="40dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#007FFF" />
</RelativeLayout>
答案 0 :(得分:12)
反转这些
TextView tname=(TextView)findViewById(R.id.fullname);
setContentView(R.layout.vbook);
findViewById
查找当前虚增布局中提到的id的视图。
因此,如果您在撤销上述两个陈述后仍然获得NPE,则应检查vbook.xml
您是否拥有ID为fullname
的文字视图。
您的视图的所有初始化通常都在onCreate
中进行,这是ui线程。我不确定你要做什么。
您在vbook.xml
<TextView
android:id="@+id/textView3"
所以改为TextView tname=(TextView)findViewById(R.id.textView3)
答案 1 :(得分:3)
null引用是因为TextView为null。 为了
TextView tname=(TextView)findViewById(R.id.fullname);
要返回TextView,您必须先初始化布局。 将代码更改为,你会做得很好:
setContentView(R.layout.vbook);
TextView tname=(TextView)findViewById(R.id.fullname);
答案 2 :(得分:1)
setContentView(布局)
如果在反转后发生相同的错误,请确保您在布局文件中提供您要映射的ID
答案 3 :(得分:0)
正如@Ravi所说,Set contentview应该始终在绑定视图之前。 除此之外,你的xml中没有像R.id.fullname那样的id。相反,有textview3 所以,试试这段代码:
setContentView(R.layout.gradebook);// I assume gradebook is your xml file
tname=(TextView)findViewById(R.id.textView3); //textView3 is the id you passed in TextView.
希望这会对你有所帮助。