我有一个初学者问题。这是我的情况:
我想从主要 Activity 开始一个新 Activity 。启动新 Activity 的代码位于单独的类文件中。我似乎传递了错误的参数,并且在尝试启动新 Activity 时我最终陷入了空指针异常。当我将代码放在主 Activity 类文件中时,新 Activity 启动正常,因此第二个 Activity 和 list 都很好。这是我的代码示例:
在我实例化第二节课的主要 Activity 课中(这是我的主要 Activity 。我省略了其余部分,因为我认为它与问题无关):
Tester mytest = new Tester();
mytest.test(this);
在我的第二个类文件中(这不是一个 Activity ;它是一个在 Activity 中实例化的类):
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。任何人都可以启发我吗?我确信我错误地使用了上下文。
最佳答案
Activity 以Intents开始.请阅读Android Application Fundamentals首先尝试 Hello World 应用 :)
我知道您将不惜一切代价使用单独的测试器类;)所以我正在努力适应并帮助您。
首先,不要让你的类继承自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);
}
}
)};
}
}
这将是我这边提出的解决方案。我仍然在这里看到的一个问题是关于如何在 test()
方法中检索按钮。为了让它正常工作,您必须从某些 View 类(使用 view.findViewByid(R.id.myButton)
)检索它,或者动态创建它并在 onCreate(...)
您的 Activity(可能使用 Inflater)。
关于android - 新 Activity 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3636243/