我从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);
}
答案 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