2013-04-14 5 views
0

У меня есть полностью функциональная асинтеза в моем приложении для Android, но когда я не подключен, это приводит к сбою моего приложения в сообщении об ошибке в моей активности (в AlertDialog.Builder), исходящей из Async не соединение. Я передаю Context для моего асинхронного вызова, так что это может иметь какое-то отношение к нему, но не обязательно.Android AlertDialog Activity & Async Error

Ниже приведен код из класса и деятельности Async. LogCat сообщает мне, что ошибка возникает в AlertDialog alert builder.create(). Как я могу решить?

С асинхронным класса:

InputsRecapUploadTask extends AsyncTask<String, Void, Integer> { 

public InputsRecapUploadTask(InputsRecap activity, 
     ProgressDialog progressDialog, Context ctx) { 
    this.activity = activity; 
    this.myCtx = ctx; 
    this.progressDialog = progressDialog; 
} 

@Override 
protected void onPreExecute() { 
    progressDialog.show(); 
} 

}  
@Override 
protected Integer doInBackground(String... arg0) { 
    //// http code 
       responseCode = 1; 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     progressDialog.dismiss(); 
     activity.showLoginError(""); 
    } 

    return responseCode; 

} 

@Override 
protected void onPostExecute(Integer headerCode) { 
    progressDialog.dismiss(); 
    if (headerCode == 1) 
     activity.login(id); 
    else 
     activity.showLoginError(""); 
} 
Activity Class: 
    public void showLoginError(String result) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(InputsRecap.this); 
    builder.setPositiveButton("okay", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      }); 
    builder.setMessage("unable to upload database"); 
    AlertDialog alert = builder.create(); 
    alert.setCancelable(true); 
    alert.show(); 

} 

ответ

1

Если исключение в методе doInBackground эти две линии:

progressDialog.dismiss(); 
activity.showLoginError(""); 

вызовет исключение - вы не можете изменить интерфейс внутри метода doInBackground , Вместо этого установите флаг и покажите диалоговое окно с ошибкой в ​​onPostExecute, который выполняется в основном потоке.

Проверьте приведенную ниже ссылку под заголовком 4 шага.

http://developer.android.com/reference/android/os/AsyncTask.html

+0

Спасибо, Борис и Рагхунандан. Исправлена ​​работа! – Bachzen