Así que tengo problemas con mi AsyncTask. Necesito postExecute para mostrar un cuadro de diálogo de alerta si se detecta un cierto error en doInBackground. El problema es que nunca se llama a postExecute. Intenté agregar @Override pero Android Studio dice que no está anulando un método en su superclase. También he intentado cambiar el tipo de retorno. Miré alrededor de este sitio y no pude encontrar una respuesta. Gracias por adelantado.

Clase AsyncTask

public class AsyncTaskActivity extends AsyncTask<Void, Void, Void> {

    String exception;

    @Override
    protected void onPreExecute() {
    }


    protected void onPostExecute() {
        if (exception.contains("java.net.UnknownHostException")) {
            MainActivity.showDialog();
            Log.i("Error Message", "ERROR MESSAGE SHOWN");
        }
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            Log.i("AsyncTask", "Loading...");
            // Make a URL to the web page. This takes the string representation of the URL
            // and changes it into a URL object
            URL url = new URL("http://api.wunderground.com/api/0c0fcc3bf62ab910/conditions/q/IN/Fort_Wayne.json");

            // Get the input stream through URL Connection
            URLConnection con = url.openConnection();
            InputStream is = con.getInputStream();

            BufferedReader br = new BufferedReader(new InputStreamReader(is));

            String line;
            // read each line and write to text file
            while ((line = br.readLine()) != null) {
                Log.i("AsyncTask", line);
                TextEditor.file = new File(MainActivity.path, "siteInfo.txt");
                TextEditor.writeString(line);
            }
            TextEditor.saveAndClose();
        } catch (Exception e) {
            e.printStackTrace();
            exception = e.toString();
        }

        Log.i("AsyncTask", "DONE");
        return null;
    }
}

Método showDialog

public static void showDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.context);
    builder.setView(R.layout.dialog_layout);
    builder.setPositiveButton(
            R.string.dialog_close,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    System.exit(1);
                }
            });

    builder.show();
}
0
Dusk 29 dic. 2016 a las 05:38

3 respuestas

La mejor respuesta

Parece que te estás perdiendo algo

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    if (exception.contains("java.net.UnknownHostException")) {
        MainActivity.showDialog();
        Log.i("Error Message", "ERROR MESSAGE SHOWN");
    }
}
0
Chris Maverick 29 dic. 2016 a las 03:15
@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);
    if (exception.contains("java.net.UnknownHostException")) {
        MainActivity.showDialog();
        Log.i("Error Message", "ERROR MESSAGE SHOWN");
    }
}

Tenga en cuenta que necesita inicializar la excepción, de lo contrario, puede provocar una excepción NullPointerException

0
邹远锋 29 dic. 2016 a las 03:14

Primero, consulte esta documentación. ha perdido parámetros en onPostExecute ().

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

Lo que tendrías que hacer es,

@Override
protected void onPostExecute(Params) {
        // your logics 
}
0
Umanda 29 dic. 2016 a las 03:02