如何在doInBackground中的线程完成之后才从doInBackground返回

时间:2016-10-06 07:30:12

标签: android android-asynctask android-volley

我从asynctak开始了一个Volley JsonObject请求,我想在凌空请求完成后从doinBackground返回。我知道它在成功启动线程后从doInBackground返回。但是在Volley Thread完成之后我该如何回归!

在这段代码中,我得到了Weather对象的null值。所有功能都正常工作。

代码:

@Override
protected JSONObject doInBackground(Void... voids) {
    String url=getURL();
    final JSONObject[] mJsonWeather = {null};
    JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            mJsonWeather[0]=response;

      }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.i("Error","can't process json result");
        }
    });
    MySingleton.getInstance(mContext.getApplicationContext()).addToRequestQue(jsonObjectRequest);

    return mJsonWeather[0];

}



@Override
protected void onPostExecute(JSONObject jsonObjectWeather) {
    super.onPostExecute(jsonObjectWeather);

        Weather weather = getJsonWeatherData(jsonObjectWeather);
        setWeatherobj(weather);

}

3 个答案:

答案 0 :(得分:3)

我认为您误解了 "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.1", "type": "platform" }, async 部分。这意味着它以异步

运行

当然你的代码会运行,但是当Volley在一个单独的线程中运行时,你已经前进到AsyncTask,这是空的。

不需要AsyncTask。直接在Activity

中调用此部分代码

编辑“清洁代码”

return mJsonWeather[0];

答案 1 :(得分:0)

AsyncTask返回.onPostExecute()方法中的操作结果。你应该从那里得到结果(它在主线程上执行)

答案 2 :(得分:0)

Volley已经为执行请求实现了一个单独的线程。您可以定义onPostExecute(回调)并在截击请求完成时执行此操作。对于insance:

pbkrtest