2013-04-08 91 views
1

我遇到了更改按钮可见性的问题。每当我使用setVisibility()方法时,我都会得到一个nullPointerException。以下是错误我得到:Android视图nullPointerException由setVisibility()方法导致

04-08 15:59:02.529: E/AndroidRuntime(2807): FATAL EXCEPTION: main 
04-08 15:59:02.529: E/AndroidRuntime(2807): java.lang.NullPointerException 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at com.android.Rides.RideTracking.onClick(RideTracking.java:307) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at android.view.View.performClick(View.java:4204) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at android.view.View$PerformClick.run(View.java:17355) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at android.os.Handler.handleCallback(Handler.java:725) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at android.os.Looper.loop(Looper.java:137) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
04-08 15:59:02.529: E/AndroidRuntime(2807):  at dalvik.system.NativeStart.main(Native Method) 

下面是代码:

 public View btnStart = null; 
     public View btnPause = null; 
     public View btnResume = null; 

     case R.id.btnPauseRide: 
      mLoggerServiceManager.pauseGPSLogging(); 

      setResult(RESULT_OK, intent); 
      btnPause.setVisibility(View.GONE); 
      btnResume.setVisibility(View.VISIBLE); 
      break; 

     case R.id.btnResumeRide: 
      mLoggerServiceManager.resumeGPSLogging(); 
      setResult(RESULT_OK, intent); 

      btnResume.setVisibility(View.GONE); 
      btnPause.setVisibility(View.VISIBLE); 
     default: 
          break; 

任何帮助将不胜感激。

回答

5

这是因为

public View btnPause = null; 

您设置buttonnull。你需要分配它。假设你已经呼吁setContentView()button是在layout

btnPause = (Button) findViewwById(R.id.button_id); 

你有你的buttons一套以null然后试图调用的方法在他们身上,setVisibility(),其中每次

将返回null如果你想隐藏被按下的Button,那么你可以做

case R.id.btnPauseRide: 
     mLoggerServiceManager.pauseGPSLogging(); 

     setResult(RESULT_OK, intent); 
     btnPPauseRide.setVisibility(View.GONE); 
     btnResume.setVisibility(View.VISIBLE); 
     break; 

而不是创建这些新的View s,除非您还有其他事情正在进行

1

看起来您正尝试访问的变量未设置。检查你的onCreate方法,如果你设置并实际找到它。

1

您正在获取空指针异常,因为您将视图指定为空。相反,尝试通过初始化查看之一:

public View btnPause = findViewById(R.id.btnPause); 

或....

public View btnPause = new View(this); 
相关问题