2015-03-25 23 views
0

在我的Android應用程序中,我將啓動器活動(稱爲MainActivity)存儲在MainActivity類中的靜態變量中; 我正在使用此靜態活動引用來獲取應用程序資源,首選項和其他信息;我的Android啓動器活動的靜態引用變爲空

但有時,我發現應用程序崩潰,因爲對象引用爲空;

  1. 是否有任何原因導致對象引用變爲NULL?
  2. 如何防止這種類型的NullPointerException?

我的代碼:

MainActivity:

public class MainActivity extends Activity { 
    private static MainActivity sInstance = null; 

    public static MainActivity getInstance() { 
     return sInstance; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     sInstance = this; 
     // other code 
    } 
} 

Helper.java

public static int getColor(int resID) { 
    return MainActivity.getInstance().getColor(resID); 
} 
+0

您應該瞭解Activity的生命週期並使用'Context'來做你想做的事 – zzy 2015-03-25 04:55:38

+0

在這種情況下,如果你的活動被破壞了,你如何確保這個實例不是null,你所遵循的方法是錯誤的。你不能保持一個活動的靜態參考 – 2015-03-25 04:55:40

回答

1
//For this type of issue, please use application class object. If you used Activity class then when //activity destroys then it will become null. So you got the null pointer exception. 


public class MyApplication extends Application { 
    public static MyApplication myApplication = null; 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     myApplication = (MyApplication) getApplicationContext(); 
    } 

    public static MyApplication getInstance() { 
     return myApplication; 
    } 

} 

//Your method looks like this 
public static int getColor(int resID) { 
     return MyApplication.getInstance().getResources().getColor(resID); 
    }