在Activity上下文之外启动新Activity。

时间:2013-08-01 16:06:40

标签: android android-intent android-asynctask android-activity runtime-error

我尝试在Activity班级AsyncTask中开始onPostExecute()并关闭其他人。

我的代码:

Intent i = new Intent(parentActivity, ThunderHunter.class);
c.startActivity(i);
parentActivity.finish();

但它不起作用,logcat显示:

08-01 18:01:27.640: E/AndroidRuntime(12398): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.app.ContextImpl.startActivity(ContextImpl.java:1029)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.app.ContextImpl.startActivity(ContextImpl.java:1023)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.content.ContextWrapper.startActivity(ContextWrapper.java:283)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at com.radzik.thunter.FunkcjeAPI$Logowanie.onPostExecute(FunkcjeAPI.java:151)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at com.radzik.thunter.FunkcjeAPI$Logowanie.onPostExecute(FunkcjeAPI.java:1)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.os.AsyncTask.finish(AsyncTask.java:631)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.os.Looper.loop(Looper.java:137)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at android.app.ActivityThread.main(ActivityThread.java:4898)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at java.lang.reflect.Method.invokeNative(Native Method)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at java.lang.reflect.Method.invoke(Method.java:511)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
08-01 18:01:27.640: E/AndroidRuntime(12398):    at dalvik.system.NativeStart.main(Native Method)

所以我将代码更改为:

Intent i = new Intent(context, ThunderHunter.class);
c.startActivity(i);
parentActivity.finish();

但没有例外结果(仍然是同样的错误)。

有没有正确的方法?

3 个答案:

答案 0 :(得分:20)

logcat会告诉你第一行的问题是什么

Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag

添加该标志

Intent i = new Intent(context, ThunderHunter.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
c.startActivity(i);
parentActivity.finish();

您可以获取所有可用Intent Flags here in the docs

的列表

答案 1 :(得分:3)

添加Intent.FLAG_ACTIVITY_NEW_TASK将解决您的错误,但请确保您是否需要此标记,因为它会将活动作为您在您的方案中可能不需要的新任务触发。

为了避免这个标记,您可以在主Handler中写一个Activity并在onPostExecute()

中调用它

答案 2 :(得分:2)

试试这个 -

Intent i = new Intent(context, ThunderHunter.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
parentActivity.finish();

您正在调用活动上下文之外的新活动,因此您必须设置该标志并将该上下文传递到活动之外。