本文介绍了onBack pressed只解雇ProgressDialog的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经意识到,我和我的AsyncTask的一个小问题。我意识到,当我在Android设备上preSS后退按钮以关闭我的进度对话框和我的AsyncTask,只有被辞退了进度对话框和我的AsyncTask仍然执行。我真的不知道为什么会这样,所以我只是希望,如果有人可以让我回到正确的轨道上,并帮我解决这个问题。

  @覆盖
    公共无效onBack pressed()
    {
        / **如果用户pressed后退按钮时运行的AsyncTask
            这将关闭AsyncTask的。 * /
        如果(mTask = NULL&放大器;!&安培;!mTask.getStatus()= AsyncTask.Status.FINISHED)
        {
            mTask.cancel(真);
        }
        super.onBack pressed();
        完();
    }    @覆盖
    保护无效的onDestroy()
    {
        // TODO自动生成方法存根        / **如果activity被销毁时运行的AsyncTask
            这将关闭AsyncTask的。 * /        如果(mTask = NULL&放大器;!&安培;!mTask.getStatus()= AsyncTask.Status.FINISHED)
        {
            mTask.cancel(真);
        }        super.onDestroy();
    }    @覆盖
    保护无效的onPause()
    {
        // TODO自动生成方法存根        如果(pDialog!= NULL)
        {
            如果(pDialog.isShowing())
            {
                pDialog.dismiss();
            }
            super.onPause();
        }
    }        保护字符串doInBackground(字符串参数... args){            如果(isCancelled()){打破;}             尝试{
                在意向= getIntent();
                串SEARCHTERM = in.getStringExtra(TAG_SEARCH);
                查询字符串= URLEn coder.en code(SEARCHTERM,UTF-8);
                字符串的URL =example.com;
                JSONParsser jParser =新JSONParsser();
                JSONObject的JSON = jParser.readJSONFeed(URL);
                尝试{                    JSONArray问题= json.getJSONObject(全能)getJSONArray(问题);                    的for(int i = 0; I< questions.length();我++){
                        JSONObject的问题= questions.getJSONObject(I)
                    字符串主题= question.getString(TAG_QUESTION_SUBJECT);
                    字符串ChosenAnswer = question.getString(TAG_QUESTION_CHOSENANSWER);
                    字符串内容= question.getString(TAG_QUESTION_CONTENT);                    // JSONArray答案= question.getJSONObject(TAG_ANSWERS).getJSONArray(TAG_ANSWER);
                    // JSONObject的回答= Answers.getJSONObject(0);                    //字符串内容= Answer.getString(TAG_ANSWERS_CONTENT);                               HashMap的<字符串,字符串>地图=新的HashMap<字符串,字符串>();                               map.put(TAG_QUESTION_SUBJECT,主题);
                               map.put(TAG_QUESTION_CONTENT,内容);
                               map.put(TAG_QUESTION_CHOSENANSWER,ChosenAnswer);                               questionList.add(地图);                    }
                }赶上(JSONException E){
                    // TODO自动生成catch块
                    e.printStackTrace();
                }
            }赶上(UnsupportedEncodingException五){
                // TODO自动生成catch块
                e.printStackTrace();
            }                返回TAG_QUESTION;        }

JSONParsser:

 公共类JSONParsser {    InputStream为= NULL;
    JSONObject的jObj = NULL;
    JSON字符串=;
    公众的EditText等;    公共JSONParsser(){
    }    公众的JSONObject readJSONFeed(字符串URL){        尝试{
        HttpClient的客户端=新DefaultHttpClient();
        HttpPost要求=新HttpPost(URL);
        //request.setURI(website);
        尝试{
            HTT presponse响应= client.execute(请求);
        HttpEntity httpEntity = response.getEntity();
        是= httpEntity.getContent();        }赶上(ClientProtocolException E){
            // TODO自动生成catch块
            e.printStackTrace();
        }赶上(IOException异常五){
            // TODO自动生成catch块
            e.printStackTrace();
        }
        尝试{
            读者的BufferedReader =新的BufferedReader(新的InputStreamReader(
                    是,ISO-8859-1),8);
            StringBuilder的SB =新的StringBuilder();
            串线;
            而((行= reader.readLine())!= NULL){
                sb.append(行+\\ n);
            }
            is.close();
            JSON = sb.toString();
        }赶上(例外五){
            Log.e(缓冲区错误,错误转换结果+ e.toString());
        }        尝试{
            jObj =新的JSONObject(JSON);
        }赶上(JSONException E){
           Log.e(JSON解析器,错误分析数据+ e.toString());
        }        Log.d(JSON字符串,JSON);        返回jObj;        }最后{}    } {
    }}


解决方案

您必须实现在的AsyncTask 取值 doInBackground 方法,如果您想取消它的执行。

您调用了取消()的将返回真正之后,你的 doInBackground 返回 onCancelled ,转而执行 onPostExecute 。该参数将发出在后台线程上的中断,使你长时间的操作被关闭。不过,我会假设你赶上什么地方?

从:

这篇关于onBack pressed只解雇ProgressDialog的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-11 17:08