2013-08-26 33 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

请看我更新的答案。 –