2010-11-04 81 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的实例方法。

相关问题