2010-08-18 1 views
2

Я тестирую свое приложение на телефоне LG Eve. У меня есть приложение, которое пытается загрузить что-то из Интернета, и когда оно генерирует исключение, предполагается запустить alertdialog, указав, что произошла ошибка. Когда телефон не имеет сигнала Wi-Fi, программа вылетает из файла builder.create() (см. Код ниже). Однако, когда есть сигнал Wi-Fi, и исключение генерируется чем-то другим (например, опечаткой в ​​URL-адресе), диалог запускается так, как он должен. Какую-либо подсказку, почему это может быть?Ошибка приложения при выполнении AlertDialog.Builder create() method - Android

Код для onCreateDialog:

@Override 
protected Dialog onCreateDialog(int id){ 

    Dialog d = null; 
    switch (id){ 

    case DIALOG_DATA_ERROR_ID: 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage(getResources().getString(R.string.error_data)); 
     builder.setCancelable(false); 
     builder.setNeutralButton("OK", new DialogInterface.OnClickListener(){ 

      public void onClick(DialogInterface d, int id){ 

       d.cancel(); 
      } 
     }); 
     d = builder.create(); 
     break;  
    } 
    return d; 
} 

Код для AsyncTask, который вызывает ShowDialog:

private static class DownloadJSONTask extends AsyncTask<String, Void, String>{ 


    private ProgressDialog dialog; 
    private Activity parent; 
    private JSONParserInterface jsonParser; 

    public DownloadJSONTask(Activity parent, JSONParserInterface jsonParser){ 
     this.parent = parent; 
     this.jsonParser = jsonParser; 
    } 

     protected void onPreExecute(){ 

      dialog = ProgressDialog.show(parent, "Loading", "Please Wait...", true); 

     } 

     protected String doInBackground (String... urls){    

      try { 

      return HttpHelper.getResponse(urls[0]); 

      }catch (Exception e){ 
       dialog.cancel(); 
       parent.showDialog(BoomSetListActivity.DIALOG_DATA_ERROR_ID); 
      } 

      return null; 

     } 

     protected void onPostExecute(String json){ 
      dialog.cancel(); 
      if (jsonParser != null) jsonParser.parse(json); 
     } 


} 
+0

Можете ли вы показать logcat/full stacktrace для исключений? –

ответ

6

Не показывать диалог в doInBackground. Этот метод не работает в потоке пользовательского интерфейса. Попробуйте отобразить диалоговое окно ошибок в onPostExecute или onProgressUpdate.

+0

спасибо! отлично работает сейчас – meow

Смежные вопросы