【问题标题】:Android asyncTask with get method not working带有get方法的Android asyncTask不起作用
【发布时间】:2014-07-06 08:59:35
【问题描述】:

我正在使用 http get 连接到一个站点并从中检索一些数据。为此,我需要定义asyncTask 方法并使用asyncTask get 方法来检索doInBackground 方法中生成的结果。

我从服务器获取数据的辅助方法非常好,因此无需在此处发布它们。当我调用new LongOperation().execute().get() 时,应用程序崩溃。当我调试代码时,它会打开新窗口并显示Source not Found

这是我的代码:

Main activity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_job_notification);
    try {
        ArrayList<Job> JobsStore = new LongOperation().execute().get();
    } catch (Exception e) {
        // TODO: handle exception
    }
    ...

asyncTask Methods:

public class LongOperation extends AsyncTask<Void, Void, ArrayList<Job>> {
private final static String USER_AGENT = "Mozilla/5.0";
protected ArrayList<Job> doInBackground(String... params) {
    ArrayList<Job> JobsStore = SendRSSFeed();
    return JobsStore;
}      

@Override
protected void onPostExecute(ArrayList<Job> result) {    
    super.onPostExecute(result); 
}
...

我在这里做错了什么?

谢谢。

【问题讨论】:

  • 请发布 logcat。可能ArrayList&lt;Job&gt; JobsStore = SendRSSFeed(); 行抛出空指针异常。
  • 不要使用 get(),因为 UI 会冻结,而不是使用 onPostExecute 并使用其中的数据
  • 不应该是ArrayList&lt;Job&gt; JobsStore = new LongOperation().get();吗?
  • 使用 get() 违背了异步任务的目的。强烈建议不要使用它。

标签: android android-activity android-asynctask


【解决方案1】:

当您使用LongOperation().execute().get() 时,execute() 开始运行异步任务并返回其自身的一个实例。在返回的实例上运行 get() 再次运行异步任务,这似乎没有意义。

所以你可以使用LongOperation().get();

更多详情请见http://developer.android.com/reference/android/os/AsyncTask.html#get()

【讨论】:

    【解决方案2】:

    想通了。问题在于 doInBackground 方法的声明。参数必须设置为Void... params 而不是String... params,因为我是用零参数调用这个方法的。

    【讨论】:

    • 你不应该使用get(),它是同步的。它将冻结 UI Thread 并破坏使用 AsyncTask 的目的。
    • doInBackground(String... params)AsyncTask&lt;Void,Void,ArrayList&lt;Job&gt;&gt; 一起使用会在IDE 本身中显示错误,因为参数类型不匹配。我很惊讶你能够在这个问题上运行该应用程序。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多