Java – Android, how to display a dialog box from a try catch error?

Android, how to display a dialog box from a try catch error?… here is a solution to the problem.

Android, how to display a dialog box from a try catch error?

In my application I connect to a

website to gather some information at the beginning with AsyncTask, using try catch, from here I can show errors on connection in my catlog, but I’ve been trying, but bad luck shows a dialog box showing connection failure and options to reconnect or exit, check my code and tell me what I’m doing wrong or ideas on how to get this done

 //this is our download file asynctask
class DownloadFileAsync extends AsyncTask<String, String, String> {

@Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }

@Override
    protected String doInBackground(String... aurl) {

try {
        String result = "";
                    try {
                        HttpClient httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost("http://mywebsiteaddress");
                         httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        HttpResponse response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        InputStream webs = entity.getContent();
                         convert response to string
                        try {
                            BufferedReader reader = new BufferedReader(
                                    new InputStreamReader(webs, "iso-8859-1"), 8);
                            StringBuilder sb = new StringBuilder();
                            String line = null;
                            while ((line = reader.readLine()) != null) {
                                sb.append(line + "\n");
                            }
                            webs.close();

result = sb.toString();
                        } catch (Exception e) {
                            Log.e("log_tag", "Error converting result " + e.toString());
                        }
                    } catch (Exception e) {
                        Log.e("log_tag", "Error in http connection " + e.toString());
                    }

 parse json data
                    try {
                        JSONArray jArray = new JSONArray(result);
                        for (int i = 0; i < jArray.length(); i++) {
                            JSONObject json_data = jArray.getJSONObject(i);
                            webResult resultRow = new webResult();
                            infotodownload
                            arrayOfWebData.add(resultRow);

}
                    } catch (JSONException e) {
                        Log.e("log_tag", "Error parsing data " + e.toString());
                    }
    } catch (Exception e) {
         this is the line of code that sends a real error message to the
        .log
        Log.e("ERROR", "ERROR IN CODE: " + e.toString());
         this is the line that prints out the location in
         the code where the error occurred.
        e.printStackTrace();
    }
        return null;
    }

protected void onProgressUpdate(String... progress) {
         Log.d(LOG_TAG,progress[0]);
         mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }

@Override
    protected void onPostExecute(String unused) {
        dismiss the dialog after the file was downloaded
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }

}

our progress bar settings
@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setTitle("Conectando al Servidor");
            mProgressDialog.setMessage("Cargando informacion...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.setMax(100);
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            mProgressDialog.setCancelable(true);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
    }
}

Edit:
Then I tried to add the next code as suggested by Arun

 catch (Exception e) {
         this is the line of code that sends a real error message to the
        .log
        Log.e("ERROR", "ERROR IN CODE: " + e.toString());
         this is the line that prints out the location in
         the code where the error occurred.
        e.printStackTrace();
        return "ERROR_IN_CODE";
    }
       return null;        if I place here return "ERROR_IN_CODE" it calls the dialog but it gets always called so I don't need it here
    }

@Override
    protected void onPostExecute(String unused) {
        dismiss the dialog after the file was downloaded
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
        if(unused.equals("ERROR_IN_CODE")){                 //I get a system crash here!
            errornote();
        }
    }

}

public void errornote() {
    AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
    alt_bld.setMessage("No se a podido descargar la informacion de los medios, deseas reintentarlo, o salir?"). setCancelable(false)
            .setPositiveButton("Conectar de Nuevo", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    new DownloadFileAsync().execute();
                }
            })
            .setNegativeButton("Salir", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                     Action for 'NO' Button
                    finish();
                }
            });
    AlertDialog alert = alt_bld.create();
     Title for AlertDialog
    alert.setTitle("Error en la Conexion!");
     Icon for AlertDialog
    alert.setIcon(android. R.drawable.ic_dialog_alert);
    alert.show();
}

But it doesn’t work either, my app crashes in the if statement line of onPostExecute. I still need help.

Solution

Since you started with protected String doInBackground(String... aurl) returns a String object, so some custom error strings are returned from the catch block and in the protected void onPostExecute (string not used). Checks whether the returned string object is a custom error string and displays a dialog box in protected void onPostExecute(String unused), but only after closing progressDialog, that is, after the line dismissDialog(DIALOG_DOWNLOAD_PROGRESS); An error dialog box is displayed.

Edit

When the control enters a Catch block, it returns some simple strings, such as the “ERROR_IN_CODE” you used.

catch (Exception e) {
     this is the line of code that sends a real error message to the
    .log
    Log.e("ERROR", "ERROR IN CODE: " + e.toString());
     this is the line that prints out the location in
     the code where the error occurred.
    e.printStackTrace();

return "ERROR_IN_CODE";
}

And check the following at onPostExecute(String unused).

protected void onPostExecute(String unused) {
    dismiss the dialog after the file was downloaded
    dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    if(unused != null && unused.equals("ERROR_IN_CODE")){
        showDialog(SOME_DIALOG_TO_SHOW_ERROR);
    }
}

Related Problems and Solutions