AsyncTask с Dialog to Internet недоступен, а затем завершить все приложение - PullRequest
0 голосов
/ 03 апреля 2012

Я разрабатываю приложение, которое чаще делает запросы к веб-сервису.То, что я хочу сделать, - это когда интернет недоступен или отключен, а не выполнять запрос;Приложение должно показать сообщение о недоступности интернета и убить себя.У меня этот код работает нормально со мной -

public GetXMLFromServer(Context context, GetXMLCallback gc,
          ArrayList<NameValuePair> params, String message) {
    this.context = context;
    this.gc = gc;
    this.postParameters = params;
    progressDialog = new ProgressDialog(this.context);
    this.message = message;
}

protected void onPreExecute() {
    progressDialog.setTitle("Please Wait");
    progressDialog.setMessage(message);
    progressDialog.show();
}

@Override
protected void onPostExecute(String result) {
    progressDialog.dismiss();
    gc.onSuccess(result);   
}

@Override
protected String doInBackground(String... params) {
    String response = null;     
    try{
        ConnectivityManager cm = (ConnectivityManager) this.context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting()) {         
        } else if (netInfo == null) {
            AlertDialog alertDialog = new AlertDialog.Builder(this.context).create();
            alertDialog.setTitle("Connection Problem");
            alertDialog.setMessage("You are not connected to Internet");
            alertDialog.setButton("Exit",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {                                
                            isAvailable=false;
                            return;
                        }
                    });
            alertDialog.show();
        }

        /*if(isAvailable==false){
            then finish the calling activity or entire app.
        }*/
    }catch(Exception e){

    }
    try {
        response = CustomHttpClient.executeHttpPost(this.urlToFetch,
                this.postParameters);           
    } catch (Exception e) {
        e.printStackTrace();
    }
    return response;
}
  }`

Теперь моя проблема в том, что я не могу понять, как завершить все приложение или вызвать вызов, прежде чем сделать запрос и завершить работу приложения из-за его наличия.недоступность интернета.(В комментируемой части кода я хочу остановить приложение и завершить его)

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Первый вопрос, который у меня возникает, - почему бы вам не проверить сетевое подключение перед запуском AsyncTask()?

Учитывая это, вот что вам нужно сделать, если вы все еще хотите включить его вAsyncTask().То, что вы хотите сделать, это отменить AsyncTask.Для этого есть две клавиши.

  1. Вызовите функцию cancel().
  2. Проверьте в соответствующих местах (doInBackground(...) в AsyncTask isCancelled(). Если вы отменили, тогдазавершите функцию как можно скорее.

Чтобы пользователь знал, я предлагаю вам открыть диалог и в методе onClick() в диалоговом окне finish() действие.

Это может быть проще сделать, если вы поместите свой диалог в onCreateDialog(), как показано в документации . Тогда родительским действием будет приложение, а не AsyncTask,и, таким образом, оператор finish() будет правильным.

0 голосов
/ 03 апреля 2012

Заменить комментарий на

return "someSpecificString";

и в onPostExecute ()

if (result.equals("someSpecificString")
  MyActivity.this.finish();
...