【问题标题】:Android put AsyncTask return of ArrayList into IntentAndroid将ArrayList的AsyncTask返回放入Intent
【发布时间】:2014-03-18 06:31:26
【问题描述】:

我有一个 AsyncTask 做一些事情,但它所做的只是return 一些信息。我正在试图弄清楚如何将它变成一个意图。它返回一个ArrayList<>

new QuizWorker().execute(url);

Intent intent = new Intent(MainActivity.this, TriviaActivity.class);
intent.putParcelableArrayListExtra(QUESTION_KEY, );

如果我可以创建一个 ArrayList 并将其设置为等于new QuizWorker().execute(url);,但它不会让我这样做。 (QuizWorker() 是 AsyncTask,它返回一个 ArrayList。)

【问题讨论】:

  • 看“url”的类型??形式参数和实际参数之间会出现不匹配。检查 AsyncTask. 的第一个泛型类型
  • url 是一个字符串,但这很好,一切正常。我只需要将new QuizWorker().execute(url);return 设置为某种东西,比如ArrayList,这样我就可以访问它并正确地通过Intent 传递它。

标签: android android-intent arraylist android-asynctask


【解决方案1】:

在您的异步 onPostExecute 方法中,获取数组列表并将其传递给活动:

((YourActivity)context).passData(result); // where result is the arraylist

在活动类中创建 passData 方法并接收数据,在该方法中启动意图。 您必须在数组列表的 Object 类型上实现 Parcelable 才能将其传递给另一个活动。

希望有帮助!

【讨论】:

  • 感谢您的快速回复!它有很大帮助。我会在我的MainActivity in my onCreate have the method passData(ArrayList<Question> result) { } 中吗?我将如何声明参数,因为目前它想给我一个错误。谢谢!
  • 否该方法将在 onCreate 之外,但在同一个活动中是,还将 Activity.this 的上下文作为参数传递给异步任务,以便您可以在异步任务中访问它。该方法将是公开的
  • 但我认为总的来说,这并不能解决我的问题,因为 AsyncTask 在应用程序首次启动时运行,但我不想在用户单击按钮之前启动 Intent。跨度>
  • 但是您可以从异步接收数据到您的活动中,一旦完成,在按钮的点击中检查活动中的数据 obj 是否为空,如果不为空,则启动活动
  • 我做了一个全局的ArrayList,说它等于结果,它让我可以随时使用它。所以我认为这对我有用。
【解决方案2】:

把你的意图放在 postexecute 方法中。

Intent intent = new Intent(MainActivity.this,TriviaActivity.class);
intent.putParcelableArrayListExtra(QUESTION_KEY,"value");

【讨论】:

  • 这可以工作,除非我需要 AsyncTask 在应用程序启动时工作,并且在用户点击按钮时通过Intent 发送它的返回信息。
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多