2010-11-04 100 views
1

請幫我...NullPointerException ...爲什麼?

public class TestActivity extends PreferenceActivity { 
/********/ 
      mTestPref = findPreference("test_preference"); 
      mTestPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 

     @Override 
     public boolean onPreferenceClick(Preference preference) { 
     // TODO Auto-generated method stub 
     String Message = mMessagePref.getSummary().toString(); 

     MainActivity main = new MainActivity(); 
     main.execute(Message); 

     return true; 
     } 
    }); 
    } 

    public class MainActivity extends Activity { 
    /************/ 

    public void execute(String message) { 

     Toast.makeText(getBaseContext(), message, Toast.LENGTH_SHORT).show(); // NullPointerExcepiton 
    } 
    } 

11-04 16:50:12.317: ERROR/AndroidRuntime(19524): Uncaught handler: thread main exiting due to uncaught exception 
11-04 16:50:12.356: ERROR/AndroidRuntime(19524): java.lang.NullPointerException 
11-04 16:50:12.356: ERROR/AndroidRuntime(19524):  at android.widget.Toast.<init>(Toast.java:89) 
+1

您試圖使用'null'。如果'Toast'是一個圖書館,你可能已經發送了'null'作爲其中一個參數。你確定這是由張貼的線路造成的嗎? – Kobi 2010-11-04 08:00:22

+0

getBaseContext(),message和Toast.LENGTH_SHORT的值是什麼?這應該告訴你,希望發生了什麼事。 – Scott 2010-11-04 08:01:59

+0

這是關於Android的,請標記爲這樣。 (這次是爲你做的。) – EboMike 2010-11-04 08:02:46

回答

2
  1. 不要使用getBaseContext。一個Activity是一個上下文。只需使用this
  2. 驗證您使用的字符串是否爲空。
  3. 您不需要自己創建Activity對象。您需要讓操作系統通過startActivity來完成。
0

由於主活動是由您創建的,因此未設置基本上下文。也許你可以添加:

main.setBaseContext(this); 

main.execute(Message); 

但你的整個程序看起來怪怪的。爲什麼你需要創建一個活動來執行某些事情?如果您需要啓動另一個活動,請使用startActivity()。如果您需要立即執行某些操作,則應通過Intent傳遞這些「參數」。

+0

我不認爲創建一個活動你自己會工作。此外,即使設置了基本上下文,它仍然會完全未初始化。我會認爲它不僅僅是調用構造函數來使上下文有效。 – EboMike 2010-11-04 08:06:41

0

你不能只調用新的MyActivity()。這不是如何創建活動。你永遠不可以,甚至可以在擴展Activity的類上調用new。

你不能從其他類中調用Activites的實例方法。

相關問題