Android 任务永远不会完成

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

我正在使用异步任务类解析“doInBackground”中的JSON文件,并将结果添加到“onPostExecute”中的列表视图中,但我使用的进度对话框从未停止,结果也从未发布。我正在使用以下代码:

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();
        }
    }