Android 任务永远不会完成
我正在使用异步任务类解析“doInBackground”中的JSON文件,并将结果添加到“onPostExecute”中的列表视图中,但我使用的进度对话框从未停止,结果也从未发布。我正在使用以下代码:Android 任务永远不会完成,android,json,android-asynctask,progressdialog,Android,Json,Android Asynctask,Progressdialog,我正在使用异步任务类解析“doInBackground”中的JSON文件,并将结果添加到“onPostExecute”中的列表视图中,但我使用的进度对话框从未停止,结果也从未发布。我正在使用以下代码: public class JSONTask extends AsyncTask<String,String,JSONObject> { private ProgressDialog pDialog; @Override protected void onPre
public class JSONTask extends AsyncTask<String,String,JSONObject>
{
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(AnswerActivity.this);
pDialog.setMessage("Getting Answers ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... params) {
try {
answersJson = makeRequest(requestUrl);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return answersJson;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
try {
if(mJSONArr!=null){
mJSONArr = jsonObject.getJSONArray("items");
for(int i=0;i<mJSONArr.length();i++)
{
String val = null;
ob2 = mJSONArr.getJSONObject(i);
if(ob3!=null){ob3 = ob2.getJSONObject("owner");}
answers[i] = new Answer(ob2.getString("body"),ob3.getString("display_name"),ob2.getString("score"));
}
adapter = new AnswersAdapter(AnswerActivity.this,
R.layout.answer_list_item, answers);
answerList.setAdapter(adapter);
pDialog.dismiss();}
//url = "https://api.stackexchange.com/2.2/search?order=desc&sort=activity&";
} catch (JSONException e) {
e.printStackTrace();
}
}
}
如何修复此问题并在列表视图中查看结果
谢谢 只需在启动
onPostExecute()后放入这一行即可代码>
像这样
@Override
protected void onPostExecute(JSONObject jsonObject) {
if( pDialog!=null && pDialog.isShowing())
pDialog.dismiss();
....
....
.... Rest of your code
}
这可能对你有帮助。
将onPostExecute
替换为
@Override
protected void onPostExecute(JSONObject jsonObject) {
if(pDialog!=null && pDialog.isShowing())
{
pDialog.dismiss();
}
try {
if(mJSONArr!=null){
mJSONArr = jsonObject.getJSONArray("items");
for(int i=0;i<mJSONArr.length();i++)
{
String val = null;
ob2 = mJSONArr.getJSONObject(i);
if(ob3!=null){ob3 = ob2.getJSONObject("owner");}
answers[i] = new Answer(ob2.getString("body"),ob3.getString("display_name"),ob2.getString("score"));
}
adapter = new AnswersAdapter(AnswerActivity.this,
R.layout.answer_list_item, answers);
answerList.setAdapter(adapter);
}
//url = "https://api.stackexchange.com/2.2/search?order=desc&sort=activity&";
} catch (JSONException e) {
e.printStackTrace();
}
}
@覆盖
受保护的void onPostExecute(JSONObject JSONObject){
if(pDialog!=null&&pDialog.isShowing())
{
pDialog.disclose();
}
试一试{
如果(MJSONAR!=null){
mJSONArr=jsonObject.getJSONArray(“项目”);
对于(int i=0;i您在那里与mJSONArr进行了此检查。它可能为空。这就是为什么似乎没有任何功能。我不确定您是否需要mJSONArr。我确实需要该数组,因为响应会返回一个包含JSON对象的JSON数组。如果没有此检查,它也无法工作。最佳做法是,您应该检查是否显示进度对话框或者不是。我的主要目的不仅仅是关闭对话框。我仍然没有看到发布到列表视图的结果。这就是问题所在。然后,您的web api出现问题,请检查您的josn响应并在此处发布。我的主要目的不仅仅是关闭对话框。我仍然没有看到发布到列表视图的结果。这就是问题所在。这只是关闭对话框。
@Override
protected void onPostExecute(JSONObject jsonObject) {
if( pDialog!=null && pDialog.isShowing())
pDialog.dismiss();
....
....
.... Rest of your code
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
if(pDialog!=null && pDialog.isShowing())
{
pDialog.dismiss();
}
try {
if(mJSONArr!=null){
mJSONArr = jsonObject.getJSONArray("items");
for(int i=0;i<mJSONArr.length();i++)
{
String val = null;
ob2 = mJSONArr.getJSONObject(i);
if(ob3!=null){ob3 = ob2.getJSONObject("owner");}
answers[i] = new Answer(ob2.getString("body"),ob3.getString("display_name"),ob2.getString("score"));
}
adapter = new AnswersAdapter(AnswerActivity.this,
R.layout.answer_list_item, answers);
answerList.setAdapter(adapter);
}
//url = "https://api.stackexchange.com/2.2/search?order=desc&sort=activity&";
} catch (JSONException e) {
e.printStackTrace();
}
}