新活动nullpointerexception

时间:2010-09-03 13:33:48

标签: android class android-activity nullpointerexception android-context

我有初学者问题。这是我的情况:

我想从主要活动开始一项新活动。启动新活动的代码位于单独的类文件中。我似乎传递了错误的参数,并且在尝试启动新活动时我最终会遇到nullpointerexception。当我将代码放在主活动类文件中时,新活动启动正常,因此第二个活动和清单很好。以下是我的代码示例:

在我的主要活动课中,我实习了第二堂课(这是我的主要活动。因为我不认为这与问题有关,所以我不知道其他人):

Tester mytest = new Tester();
mytest.test(this);

在我的第二课程文件中(这不是一项活动;它是一个在活动中不受影响的类别):

public class Tester extends Activity {
     Intent myIntent;
     public void test (Context context) {
               myIntent = new Intent (Intent.ACTION_VIEW);
               myIntent.setClass(context, newActivity.class);
               thebutton.setOnClickListener(
            new OnClickListener() {  
                public void onClick(View v) { 
                    startActivity(myIntent);
                }  
            }       
        ):}

当我执行点击时,我会在startactivity时收到nullpointerexception。任何人都可以开心这个吗?我确信我错误地使用了上下文。

1 个答案:

答案 0 :(得分:4)

活动以Intents开始。请先阅读Android Application Fundamentals并尝试Hello World应用程序:)

我知道你将不惜一切代价使用你的独立Tester课程;)所以我正在努力适应并帮助你。

首先,不要让您的类继承自Activity。这对你没有帮助,因为这个调用可能没有任何有效的上下文。 Activity以某种方式实现了模板模式,为您提供了onCreate(...)onPause(...)等关键方法,并由Android操作系统实例化。

如果您仍想使用该类,则必须传入上下文。无论如何,你可能正在瞄准一些MVC / MVP模式结构。

public class Tester {
    private Context context;
    public Tester(Context context){
        this.context = context;
    }

    public void test () {
       final Intent myIntent = new Intent(context, NewActivity.class);

       //guess this comes from somewhere, hope through a findViewById method
       thebutton.setOnClickListener(
              new OnClickListener() {  
                public void onClick(View v) { 
                    context.startActivity(myIntent);
                }  
              }       
        )};
    }
}

这将是我方提出的解决方案。我在这里看到的一个问题是{strong>如何检索该test()方法中的按钮。为了使其正常工作,您必须从某个View类(使用view.findViewByid(R.id.myButton))检索它,或者动态创建它并在活动的onCreate(...)期间将其与视图关联(可能使用Inflater) )。