2013-08-26 65 views
2

對於一些未知的原因,我越來越嚴重異常:主 - 顯示java.lang.NullPointerException上線:的NullPointerException設置OnClickListener時

x_button.setOnClickListener(new View.OnClickListener() { 

,但我不知道爲什麼會這樣。按鈕在那裏 - 所以我不知道爲什麼在這一點上會出現空指針 - 但它是。

任何輸入,非常感謝。

源代碼片段:

@Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 

      super.onPostExecute(result); 
      // Show updated screen if table was successfully updated 
      // Or alert indicating settings are not updated 
      if (result.equals("success")) { 

       setContentView(R.layout.completion); 

      } else 
       setContentView(R.layout.error); 

      Button x_button = (Button) findViewById(R.id.x_button); 
      x_button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        finishAll(v); 
       } 
      }); 
     } 

的logcat:

08-26 15:49:42.419: W/System.err(5998): java.io.IOException: Stream is closed 
08-26 15:49:42.429: W/System.err(5998):  at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:161) 
08-26 15:49:42.429: W/System.err(5998):  at java.io.DataInputStream.read(DataInputStream.java:95) 
08-26 15:49:42.429: W/System.err(5998):  at java.io.InputStreamReader.read(InputStreamReader.java:255) 
08-26 15:49:42.429: W/System.err(5998):  at java.io.BufferedReader.fillBuf(BufferedReader.java:128) 
08-26 15:49:42.429: W/System.err(5998):  at java.io.BufferedReader.readLine(BufferedReader.java:357) 
08-26 15:49:42.429: W/System.err(5998):  at com.tracfone.straighttalk.networktasklibrary.NetworkTask.doInBackground(NetworkTask.java:37) 
08-26 15:49:42.429: W/System.err(5998):  at com.tracfone.straighttalk.networktasklibrary.NetworkTask.doInBackground(NetworkTask.java:1) 
08-26 15:49:42.429: W/System.err(5998):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
08-26 15:49:42.429: W/System.err(5998):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
08-26 15:49:42.429: W/System.err(5998):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
08-26 15:49:42.429: W/System.err(5998):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
08-26 15:49:42.429: W/System.err(5998):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
08-26 15:49:42.429: W/System.err(5998):  at java.lang.Thread.run(Thread.java:1019) 
08-26 15:49:46.299: W/dalvikvm(5998): threadid=1: thread exiting with uncaught exception (group=0x4016e560) 
08-26 15:49:46.299: E/AndroidRuntime(5998): FATAL EXCEPTION: main 
08-26 15:49:46.299: E/AndroidRuntime(5998): java.lang.NullPointerException 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at com.project.new.datasettings.ConfigFinalActivity$TableUpdateRequestTask.onPostExecute(ConfigFinalActivity.java:552) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at com.project.new.datasettings.ConfigFinalActivity$TableUpdateRequestTask.onPostExecute(ConfigFinalActivity.java:1) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at android.os.AsyncTask.finish(AsyncTask.java:417) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at android.os.AsyncTask.access$300(AsyncTask.java:127) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at android.os.Looper.loop(Looper.java:130) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at android.app.ActivityThread.main(ActivityThread.java:3821) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633) 
08-26 15:49:46.299: E/AndroidRuntime(5998):  at dalvik.system.NativeStart.main(Native Method) 

完整的源:

https://docs.google.com/document/d/1ap5qknNcn9RaJhewc9CarQja2uS4Xjgtzw4eNzXzLKY/edit?usp=sharing

+1

在'R.layout.completion'和'R.layout.error'上都存在'x_button'嗎?如果沒有哪一個正在使用?在調用setOnClickListener()之前,還要在'x_button'上添加一個空檢查。從你在這裏發佈的信息來看,最有可能的是x_button爲null,如果它在你調用'findViewById'時顯示的佈局中不存在,可能會導致一個日誌記錄來檢查它是否存在在findViewById()後爲null – FoamyGuy

+1

這部分是什麼類?它是從哪個android基類中派生而來的? –

+0

@FoamyGuy把這個作爲答案,我會點擊它。 – danny117

回答

2

你NullPointerException異常發生的原因按鈕 「x_button」 是空的,這意味着findViewById(...)可以找不到您提供的ID的Button。

我看到該2倍可能的原因:

  • 「R.id.x_button」既不符合你的兩個佈局文件「完成」和「錯誤」的,但在其他一些佈局文件代替。這將不會導致編譯器錯誤,但會在運行代碼時導致Nullpointer。
  • 「R.id.x_button」只是其中之一,但您使用setContentView(...)中的另一個,具體取決於您的「成功」。

我會建議

檢查您的佈局文件「錯誤」和「完成」,看看這兩個 包含id爲「R.id.x_button」按鈕,如果沒有,更改您的代碼 或將按鈕添加到佈局文件。

如果您例如按鈕只存在於「完成」,您需要將代碼改成這樣:

@Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 

     super.onPostExecute(result); 
     // Show updated screen if table was successfully updated 
     // Or alert indicating settings are not updated 
     if (result.equals("success")) { 

      setContentView(R.layout.completion); 

      Button x_button = (Button) findViewById(R.id.x_button); 
      x_button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        finishAll(v); 
       } 
      }); 
     } else 
      setContentView(R.layout.error); 
    } 

這將避免空指針,因爲該按鈕僅初始化時的佈局實際上包含按鈕被加載。

+0

x_button只存在於R.layout.completion中 - 當我試圖將NetworkTask實現爲一個庫時,問題就開始出現 - 我認爲這可能會導致問題,因爲它沒有任何圖形資源 - 但我不確定(我添加了一個鏈接來顯示我的完整源代碼 - 我認爲這可能會有所幫助) – NoobNinja

+1

請看我更新的答案。 –