2013-08-19 36 views
0

以下是我的整個活動, 基本上我只是傳遞兩個意圖,發送一個textview,並設置另一個標題。 然後我有一個切換全屏幕功能下面,其中工作100%。活動崩潰似乎沒有理由? -Android

我似乎無法弄清楚問題所在。但我最近做了一些重大更改,之後當我嘗試時,活動無法啓動並且應用程序崩潰。

我有很多活動,我剛剛發現Eclipse爲菜單文件夾中的每個活動創建了settings_menu佈局。除了在這一項活動中,我不需要使用它們。 假設我總共有15個活動,我刪除了除這個(Xtxt)之外的所有其他活動的XML設置菜單文件的14個。

但刪除所有這些後,該應用程序仍然工作。現在我對設置進行了一些更改,只需單擊菜單按鈕時出現的文本即可。

我似乎無法找出問題所在。所以,下面是我的整個活動,低於錯誤的LogCat輸出。

public class Xtxt extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView textView = (TextView) findViewById(R.id.xxtt); 
     setContentView(R.layout.xtxt); 
     toggleFullscreen(true); 
     Intent intent = getIntent(); 
     String svar1 = intent.getExtras().getString("a"); 
     String svar2 = intent.getExtras().getString("b"); 
     this.setTitle(svar2); 
     textView.setText(svar1); 

    } 

    private void toggleFullscreen(boolean fullscreen) { 
     WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
     if (fullscreen) { 
      attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     } else { 
      attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     } 
     getWindow().setAttributes(attrs); 
    } 

} 

這裏的logcat的:

08-19 13:22:20.398: E/ActivityThread(31873): Failed to find provider info for com.google.plus.platform 
08-19 13:22:20.406: E/AndroidRuntime(31873): FATAL EXCEPTION: main 
08-19 13:22:20.406: E/AndroidRuntime(31873): java.lang.RuntimeException: Unable to start activity ComponentInfo{x.abcd/x.abcd.Xtxt}: java.lang.NullPointerException 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.access$600(ActivityThread.java:134) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.os.Looper.loop(Looper.java:154) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.main(ActivityThread.java:4624) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at java.lang.reflect.Method.invokeNative(Native Method) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at java.lang.reflect.Method.invoke(Method.java:511) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at dalvik.system.NativeStart.main(Native Method) 
08-19 13:22:20.406: E/AndroidRuntime(31873): Caused by: java.lang.NullPointerException 
08-19 13:22:20.406: E/AndroidRuntime(31873): at x.abcd.Xtxt.onCreate(Xtxt.java:27) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.Activity.performCreate(Activity.java:4479) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041) 
08-19 13:22:20.406: E/AndroidRuntime(31873): ... 11 more 

我試圖撤消刪除,甚至恢復那些被刪除的菜單文件後,我似乎仍然有這種怪異的空指針錯誤。我錯過了什麼嗎?

怎麼了?

請幫忙。

回答

5

您的setContentView應該在視圖初始化之前先到達。

替換此

TextView textView = (TextView) findViewById(R.id.xxtt); 
    setContentView(R.layout.xtxt); 

通過

setContentView(R.layout.xtxt); 
    TextView textView = (TextView) findViewById(R.id.xxtt); 

onCreate

可以設置到活動當前視圖層次findViewById。由於您尚未將佈局設置爲活動,因此您的findViewById失敗。正因爲如此,你可能會得到NUllPointerException

編輯:

最好是在onCreate初始化你的觀點,因爲它是活動的生命週期過程中被調用一次。

從文檔

http://developer.android.com/reference/android/app/Activity.html

onCreate(Bundle)引用是你初始化你的活動。最重要的是,在這裏您通常會調用setContentView(int),其中包含用於定義UI的佈局資源,並使用findViewById(int)來檢索該UI中需要以編程方式進行交互的小部件。

+1

可以給他當調用的setContentView會發生什麼一個簡要的解釋? – Blackbelt

+0

啊,是的..這是做到了。愚蠢的我。 – user2678122

+0

總之,還有一件事,是在OnCreate還是在外面(在活動塊中)初始化組件? – user2678122

0
TextView textView = (TextView) findViewById(R.id.xxtt); 
    setContentView(R.layout.xtxt); 

- >

setContentView(R.layout.xtxt); 
    TextView textView = (TextView) findViewById(R.id.xxtt);