我正在尝试解析jsonObject,但我无法将结果从 doInBackground 导入 onPostExecute
这是我的AsyncTask代码:
private class GetContacts extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MyActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
String auth2 = jsonObj.getString("auth");
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void auth2) {
super.onPostExecute(auth2);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
Toast.makeText(getApplicationContext(), "String retrived:" + auth2, Toast.LENGTH_SHORT).show();
}
}
我知道它可能是因为我在那里返回null,但是当我返回字符串然后我得到错误。
我知道jsonStr实际上持有json数据,我可以在日志中看到它: 响应::&gt; {&#34; USER_INFO&#34; {&#34; AUTH&#34;:0}}
我把这些代码放在教程中,这就是为什么我不完全理解它。
我的目标是查看auth是0还是1。
答案 0 :(得分:8)
无法将doInBackground中的结果输入onPostExecute
从auth2
返回doInBackground
字符串:
1。将doInBackground
方法的返回类型从Void
更改为String
:
@Override
protected String doInBackground(Void... arg0) {
}
2。将AsyncTask
的最后一般类型从Void
更改为String
:
private class GetContacts extends AsyncTask<Void, Void, String>
3。从doInBackground返回auth2
:
String auth2 = jsonObj.getString("auth");
return auth2;
4。将onPostExecute
参数类型从Void
更改为String
:
@Override
protected void onPostExecute(String auth2) {
super.onPostExecute(auth2);
//...
Toast.makeText(getApplicationContext(),
"String retrived:" + auth2, Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:0)
阅读文档: http://developer.android.com/reference/android/os/AsyncTask.html
private class GetContacts extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... arg0) {
...
return "askdjalskdj";
}
@Override
protected void onPostExecute(String auth2) {
Log.i("Output", auth2);
}
}
参见我在Asynctask的通用实现中设置的参数,参见doInBackground定义的返回值和onPostExecute的参数类型
AsyncTask的泛型类型异步任务使用的三种类型如下:
- Params,执行时发送给任务的参数类型。
- 进展,期间发布的进度单位的类型 背景计算。
- 结果,结果的类型 背景计算。
醇>并非所有类型都始终使用 异步任务。要将类型标记为未使用,只需使用类型Void:
私有类MyTask扩展了AsyncTask {...}