Textview setText上的Android Null指针异常

时间:2013-10-15 19:02:00

标签: android nullpointerexception textview

在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>

4 个答案:

答案 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)

在使用 findViewById(id)

映射视图之前,应始终调用

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. 

希望这会对你有所帮助。