【问题标题】:Starting new activity from onPostExecute()从 onPostExecute() 开始新活动
【发布时间】:2014-09-04 05:17:49
【问题描述】:

我想从 post execute 开始另一个 Activity 并向它传递一些参数。但它强制关闭应用程序。这是我的onPostExecute()

@Override
protected void onPostExecute(Bitmap result) {
    super.onPostExecute(result);
    if (result != null) {
        imageView.setImageBitmap(result);
        imageView.setOnClickListener(new OnClickListener(){
            public void onClick(View view) {
                Toast.makeText(context, ""+captionStr, Toast.LENGTH_LONG).show();
                Intent intent = new Intent(context, Article.class);
                Bundle b = new Bundle();
                b.putString("url", "Hello"); //Your id
                intent.putExtras(b); //Put your id to your next Intent
                context.startActivity(intent);
                // context.finish();*/
            }
        });
    } else {
        imageView.setImageResource(R.drawable.ic_launcher);
    }
}

我的清单声明

<activity android:name=".com.tdodemo.tdo.Article" />

日志猫

09-04 10:53:30.759: E/AndroidRuntime(15546): FATAL EXCEPTION: main
09-04 10:53:30.759: E/AndroidRuntime(15546): Process: com.tdodemo.tdo, PID: 15546
09-04 10:53:30.759: E/AndroidRuntime(15546): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.app.ContextImpl.startActivity(ContextImpl.java:1146)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.app.ContextImpl.startActivity(ContextImpl.java:1133)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.content.ContextWrapper.startActivity(ContextWrapper.java:328)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at com.tdodemo.tdo.ImageLoadTask$1.onClick(ImageLoadTask.java:82)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.view.View.performClick(View.java:4562)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.view.View$PerformClick.run(View.java:18918)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.os.Handler.handleCallback(Handler.java:808)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.os.Handler.dispatchMessage(Handler.java:103)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.os.Looper.loop(Looper.java:193)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at android.app.ActivityThread.main(ActivityThread.java:5388)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at java.lang.reflect.Method.invokeNative(Native Method)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at java.lang.reflect.Method.invoke(Method.java:515)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:655)
09-04 10:53:30.759: E/AndroidRuntime(15546):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 为什么 imageView.setOnClickListener 在 onPostExe....?
  • 发布您的 Logcat 错误
  • 在 doInBackground() 中,我正在从服务器加载图像,在 onpostExecute() 中,我将其设置为 ImageView。单击此图像后,我想开始另一个活动。
  • @Manasi 在您的帖子中发布错误以便我们调试问题
  • 错误说明了一切:您需要添加一个标志FLAG_ACTIVITY_NEW_TASK。编辑:或将Context 变量添加到您的AsyncTask 并使用它。

标签: android android-activity android-asynctask


【解决方案1】:

你需要添加标志intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Intent intent = new Intent(context, Article.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Bundle b = new Bundle();
b.putString("url", "Hello"); //Your id
intent.putExtras(b); //Put your id to your next Intent
context.startActivity(intent);  

【讨论】:

    【解决方案2】:

    试试这样的:

    Intent intent_name = new Intent();
    intent_name.setClass(getApplicationContext(),Article.class);
    Bundle b = new Bundle();
    b.putString("url", "Hello"); //Your id
    intent_name.putExtras(b);
    startActivity(intent_name);
    

    由于 AsyncTask 的参数之一是您可以直接使用的活动

    Intent intent_name = new Intent(activity, Article.class);
    Bundle b = new Bundle();
    b.putString("url", "Hello"); //Your id
    intent_name.putExtras(b);
    activity.startActivity();
    

    希望对您有所帮助!

    【讨论】:

      【解决方案3】:

      尝试使用您的活动名称。

      Intent intent = new Intent(YOUR ACTIIVITY NAME.this , Article.class);
      startActivity(intent);
      

      【讨论】:

        【解决方案4】:

        通过查看您的 logcat,它说明了所需的标志。通过在您的意图中添加该标志来尝试

         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        

        【讨论】:

          【解决方案5】:

          试试 tis 代码,它对我有用

          @Override
                  protected void onPostExecute(Void result) 
                  {
                      super.onPostExecute(result);
                      Intent intent = new Intent(MyAsyncTaskActivity.this, NextActivity.class);
                      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                      Context().startActivity(intent);
                  }
          

          【讨论】:

            【解决方案6】:

            试试这个,移动这个

                imageView.setImageBitmap(result);
                imageView.setOnClickListener(new OnClickListener(){
            
                    public void onClick(View view) {
            
                        Toast.makeText(context, ""+captionStr, Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(context, Article.class);
                        Bundle b = new Bundle();
                        b.putString("url", "Hello"); //Your id
                        intent.putExtras(b); //Put your id to your next Intent
                        context.startActivity(intent);
                        // context.finish();*/
                    }
                });`
            

            在 onPostExecute 之外,在您调用 asyncTask 类后进入您的主要活动。 onPostExecute 保存图片到drawable目录,把你的imageView改成
            imageView.setImageBitmap(res.drawable.Image);

            【讨论】:

            • 但是我现在的课程是一个 asyncTask
            • 我忘了那个对不起的伙伴,试试我的新解决方案@Manasi
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-10-15
            • 2015-06-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多