2011-10-20 89 views
0

我是新來的android開發。我想不通這是爲什麼在仿真器崩潰,當我在我的Android模擬器運行這個程序,它會打開然後迅速關閉給我一個「不幸的Hello World已停止消息setText導致應用程序崩潰

  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 
+1

從logcat中提供錯誤,你會得到一個非常快速的回答 – Rich

+0

安置自己的錯誤日誌,請.. –

+0

是它產生'NullPointerException'?通過調試器運行此代碼,並在調用setText之前檢查「t」是否爲「null」。 – mre

回答

2

如果TextView的是空與您提供的代碼,你必須設置錯誤佈局ID您的​​代碼示例有setContentView(R.layout.main);。您提供的xml是否可能來自main.xml以外的文件?

+0

看起來佈局文件夾中的main.xml與layout-normal不同。我只是將一個文件複製到另一個文件中,現在它可以工作,兩個文件夾之間的區別是什麼,main.xml在兩個文件夾中都必須相同?謝謝! –

+3

對於不同的設備類型和屏幕尺寸,您可以擁有不同的文件夾。系統將根據運行代碼的設備選擇資源。當不存在專用文件夾時,系統將回退到layout /。我認爲佈局正常覆蓋此文件夾時,它存在。這在以下鏈接中進行了描述:http://developer.android.com/guide/practices/screens_support.html – Rich

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" /> 

佈局,大華電國際/ main.xml中

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

如果你在LDPI移動它的工作原理運行。但如果你在華電國際移動運行它找不到