【问题标题】:start Activity from Asynctask从 Asynctask 启动 Activity
【发布时间】:2015-04-12 13:46:03
【问题描述】:

我知道这个问题之前已经回答过好几次了,我已经阅读了其中的大部分内容,但我不明白为什么它们不适合我。

我正在构建一种 Webcrawler,因此我有一个 Asynctask,可以将 HTML 代码解析为我想要的一个类中的变量。

我知道要启动 Asynctask vie OnClick 这不是问题,但我想在 Asynctask 解析 HTML 代码后启动不同的 Activity。

由于它是一个 Asynctask,我认为最好在它的 OnPostExecute 中启动 Activity。

我的代码非常简单和基本,但我不知道为什么我会遇到问题。

@Override
    protected void onPostExecute(String result){
        if(dialog.isShowing()){
            dialog.dismiss();
        }
        startActivity(new Intent(context, DetailView.class));
    }

上下文是一个变量,我在其中拥有 MainActivity 的上下文,并且在 Asynctask 中的不同点对我来说非常适合创建 Toast。

DetailView.class 是我想要启动的 Activity,它可以在 MainActivity 上正常工作,但在这个地方不行。

问题是编译器告诉我他期望 android.app.Activity 而实际的参数是“new Intent(context, DetailView.class)”

对于这样一个简单且已经经常回答的问题,我很抱歉,但我不知道如何让它发挥作用。

感谢您的任何答复。

【问题讨论】:

  • 你的 AsyncTask 是一个内部类吗?外部类是否扩展了 Activity?
  • 我认为,您正在使用this 上下文。您是否尝试将其替换为getBaseContext()MyActivity.this
  • 它会崩溃吗?什么错误?还发布您的整个代码和 logcat

标签: java android android-asynctask start-activity


【解决方案1】:

完美的黑带,我的外部类没有扩展 Activity,这就是解决方案。 谢谢

【讨论】:

    【解决方案2】:

    您无法在后台线程上更新 UI。显示 toast 和 dialog 是更新 UI 的一种方式。

    您可以在方法doInBackground()publishProgress(...) 并在onProgressUpdate() 中更新UI

    【讨论】:

    • 显示 Toast 不是问题,将其包装在 Handler 中即可。 Toast 也显示在 Dialog 中,但 DetailView Activity 不起作用。
    【解决方案3】:

    问题解决了:

    context.startActivity(new Intent(context, DetailView.class));
    

    现在可以了,但我不知道为什么。

    【讨论】:

      【解决方案4】:

      有很多答案,但我将其用于我的应用程序:

      Intent intent = new Intent(mContext, mainmenu.class);
                  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  mContext.startActivity(intent);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多