setText导致应用程序崩溃

时间:2011-10-20 20:09:16

标签: java android android-layout

我是Android开发的新手。我无法弄清楚为什么这会在模拟器中崩溃,当我在我的Android模拟器上运行这个程序时它会打开然后快速关闭给我一个“不幸的问候世界已停止消息。

            public class HelloAndroidActivity extends Activity {
                /** Called when the activity is first created. */
                @Override
                public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
                    TextView t=(TextView)findViewById(R.id.textView1);  
                    t.setText("Secoknd text to display!"); 

                }   
            }

xml文件:

            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="fill_parent"
                android:orientation="horizontal" >





                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="match_parent"
                    android:layout_height="38dp"
                    android:editable="true"
                    android:text="TextView" />

            </LinearLayout>

logcat的:

            10-20 20:07:48.784: D/AndroidRuntime(601): Shutting down VM
            10-20 20:07:48.784: W/dalvikvm(601): threadid=1: thread exiting with uncaught exception (group=0x409951f8)
            10-20 20:07:48.804: E/AndroidRuntime(601): FATAL EXCEPTION: main
            10-20 20:07:48.804: E/AndroidRuntime(601): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.helloandroid/com.example.helloandroid.HelloAndroidActivity}: java.lang.NullPointerException
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.os.Handler.dispatchMessage(Handler.java:99)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.os.Looper.loop(Looper.java:137)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.app.ActivityThread.main(ActivityThread.java:4340)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at java.lang.reflect.Method.invokeNative(Native Method)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at java.lang.reflect.Method.invoke(Method.java:511)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at dalvik.system.NativeStart.main(Native Method)
            10-20 20:07:48.804: E/AndroidRuntime(601): Caused by: java.lang.NullPointerException
            10-20 20:07:48.804: E/AndroidRuntime(601):  at com.example.helloandroid.HelloAndroidActivity.onCreate(HelloAndroidActivity.java:16)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.app.Activity.performCreate(Activity.java:4465)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            10-20 20:07:48.804: E/AndroidRuntime(601):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
            10-20 20:07:48.804: E/AndroidRuntime(601):  ... 11 more
            10-20 20:12:48.894: I/Process(601): Sending signal. PID: 601 SIG: 9

2 个答案:

答案 0 :(得分:2)

如果TextView为您提供的代码为空,则必须设置错误的布局ID。您的代码示例包含setContentView(R.layout.main);。您提供的xml是否可能来自main.xml以外的文件?

答案 1 :(得分:0)

如果您为不同的屏幕尺寸设计了多个布局文件,则必须将其命名为相同的ID。如果id不匹配,就会发生这种情况。

例如

    public class HelloAndroidActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView t=(TextView)findViewById(R.id.textView1);  
        t.setText("Secoknd text to display!"); 
        }   
    }

布局/ main.xml中

<TextView
     android:id="@+id/textView1"
     android:layout_width="match_parent"
     android:layout_height="38dp"
     android:editable="true"
     android:text="TextView" />

布局-大HDPI / main.xml中

<TextView
     android:id="@+id/textView2"
     android:layout_width="match_parent"
     android:layout_height="38dp"
     android:editable="true"
     android:text="TextView" />

如果你在ldpi手机上运行它可以工作。但如果你在hdpi手机上运行它就找不到