我正在尝试使用以下代码在非活动类中调用新活动:
Intent usage = new Intent(UsageActivity.getContext(),UsageActivity.class);
usage.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
UsageActivity.getContext().startActivity(usage);
我有一个具有以下代码的UsageActivity:
public static Context mContext;
在onCreate()
下面mContext = getBaseContext();
我创建了一个这样的方法:
public static Context getContext() {
return mContext;
}
它抛出一个例外说:
08-23 12:51:39.439:E / AndroidRuntime(15059):致命异性:主要
08-23 12:51:39.439:E / AndroidRuntime(15059):java.lang.NullPointerException
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.content.ComponentName。(ComponentName.java:75)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.content.Intent。(Intent.java:3301)
08-23 12:51:39.439:E / AndroidRuntime(15059):at ph.teligent.nce.more.MoreManager.loadShowUsageView(MoreManager.java:673)
08-23 12:51:39.439:E / AndroidRuntime(15059):at ph.teligent.nce.more.MoreView.onItemClick(MoreView.java:125)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.widget.AdapterView.performItemClick(AdapterView.java:298)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.widget.AbsListView.performItemClick(AbsListView.java:1086)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.widget.AbsListView $ PerformClick.run(AbsListView.java:2859)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.widget.AbsListView $ 1.run(AbsListView.java:3533)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.os.Handler.handleCallback(Handler.java:615)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.os.Handler.dispatchMessage(Handler.java:92)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.os.Looper.loop(Looper.java:137)
08-23 12:51:39.439:E / AndroidRuntime(15059):在android.app.ActivityThread.main(ActivityThread.java:4745)
08-23 12:51:39.439:E / AndroidRuntime(15059):at java.lang.reflect.Method.invokeNative(Native Method)
08-23 12:51:39.439:E / AndroidRuntime(15059):at java.lang.reflect.Method.invoke(Method.java:511)
08-23 12:51:39.439:E / AndroidRuntime(15059):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
08-23 12:51:39.439:E / AndroidRuntime(15059):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-23 12:51:39.439:E / AndroidRuntime(15059):at dalvik.system.NativeStart.main(Native Method)
我创建上下文的方式是错误的吗? 任何thoghts将受到高度赞赏。
答案 0 :(得分:1)
使用以下代码
Intent i = new Intent(UsageActivity.getContext(),YourActivity.class);
UsageActivity.getContext().startActivity(i);
mContext是您的活动背景
还可以使用下面的onCreate()从
更新主活动中的代码mContext = getBaseContext();
to
mContext = UsageActivity.this;
答案 1 :(得分:0)
您不能“使用此代码在非活动类中调用新活动”!
您必须在CURRENT上下文中调用startActivity()。您可以将当前上下文作为类字段转换为非活动类。
答案 2 :(得分:0)
它看起来在这里
Intent usage = new Intent(UsageActivity.getContext(),UsageActivity.class);
就像你对两个参数使用相同的活动一样......你能在它的构造函数中将上下文传递给这个活动吗?
答案 3 :(得分:0)
我创建上下文的方式是错误的吗?
是的,您使用的是尚未存在的上下文,使BaseContext不是一个干净的方式:
Intent usage = new Intent(UsageActivity.getContext(),UsageActivity.class);
所以你应该将第一个调用你的非活动类的Activity上下文传递给你的非活动类,然后使用该上下文来启动第二个活动。
Intent usage = new Intent(context,UsageActivity.class);
答案 4 :(得分:0)
你没有走错路,但你得到了getBaseContext()null。只需编辑一行即可。
在活动的onCreate()方法中写下此行。
mContext = this;