0

我正在尝试使用以下代码在非活动类中调用一个新活动:

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): 在 ph.teligent.nce.more.MoreManager.loadShowUsageView(MoreManager.java:673)
08-23 12:51:39.439: E/AndroidRuntime(15059 ): 在 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): at 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): 在 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): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-23 12:51:39.439: E/AndroidRuntime(15059): 在 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)

我创建上下文的方式是错误的吗?任何想法将不胜感激。

4

5 回答 5

1

使用下面的代码

Intent i = new Intent(UsageActivity.getContext(),YourActivity.class);
            UsageActivity.getContext().startActivity(i);

mContext 是您的活动上下文

还使用以下 onCreate() 更新主要活动中的代码

mContext = getBaseContext();

to 
mContext = UsageActivity.this;
于 2013-08-23T04:12:29.153 回答
0

您不能“使用此代码在非活动类中调用新活动”!

您必须在当前上下文中调用 startActivity()。您可以将当前上下文转换为非活动类作为类字段。

于 2013-08-23T04:06:19.810 回答
0

看起来在这里

Intent usage = new Intent(UsageActivity.getContext(),UsageActivity.class);

就像您对两个参数使用相同的活动...您可以在其构造函数中将上下文传递给此活动吗?

于 2013-08-23T04:09:18.713 回答
0

我创建上下文的方式是错误的吗?

是的,您正在使用一个从未存在的上下文,并且获取 BaseContext 不是一种干净的方法

 Intent usage = new Intent(UsageActivity.getContext(),UsageActivity.class);

因此,您应该将调用您的非活动类的第一个活动上下文传递给非活动类,然后使用该上下文启动第二个活动。

 Intent usage = new Intent(context,UsageActivity.class);
于 2013-08-23T04:09:20.550 回答
0

你没有走错路,但你得到 getBaseContext() null。只需编辑一行即可。

在活动的 onCreate() 方法中写下这一行。

mContext = this;
于 2013-08-23T04:11:22.137 回答