Сбой приложения при выполнении метода AlertDialog.Builder create () - Android - PullRequest
2 голосов
/ 19 августа 2010

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

Код для 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);
       }


}

1 Ответ

6 голосов
/ 19 августа 2010

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

...