Как получать стоимость возврата метода onPostExecute от моего AsyncTask в моем Activity?

Привет друзья у меня есть класс Asynctask и я хочу получить результат метода onPostExecute который этот производит, закончившись во мне Activity главный MainActivity так как классы отделены, кто-то знает, как делать это? так как я продолжил шаги возможного решения в StackOverFlow на английском:

https://stackoverflow.com / questions / 12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a

Но меня помечает следующая ошибка:

> E/AndroidRuntime: FATAL EXCEPTION: main
>                   Process: com.appmovilperote, PID: 29566
>                   java.lang.NullPointerException: Attempt to invoke interface method 'void
> com.appmovilperote.AsyncTaskServicios.AsyncResponse.processFinish(java.lang.String)'
> on a null object reference
>                       at com.appmovilperote.AsyncTaskServicios.AsyncTaskDatos.onPostExecute(AsyncTaskDatos.java:48)
>                       at com.appmovilperote.AsyncTaskServicios.AsyncTaskDatos.onPostExecute(AsyncTaskDatos.java:25)
>                       at android.os.AsyncTask.finish(AsyncTask.java:636)
>                       at android.os.AsyncTask.access$500(AsyncTask.java:177)
>                       at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
>                       at android.os.Handler.dispatchMessage(Handler.java:102)
>                       at android.os.Looper.loop(Looper.java:155)
>                       at android.app.ActivityThread.main(ActivityThread.java:5725)
>                       at java.lang.reflect.Method.invoke(Native Method)
>                       at java.lang.reflect.Method.invoke(Method.java:372)
>                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1030)
>                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825)

Splash:

public class Splash extends Activity  implements AsyncResponse {

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

AsyncTaskDatos tel =  new AsyncTaskDatos(Splash.this);
            tel.execute();
 }

 @Override
    public void processFinish(String output){

        //Here you will receive the result fired from async class
        //of onPostExecute(result) method.
    }
}

Asynctask:

   public class AsyncTaskDatos extends AsyncTask<String, Void, String> {
        private ProgressDialog dialog;
        Splash activity;

        public AsyncResponse delegate = null;

        public AsyncTaskDatos(Splash activity) {
            dialog = new ProgressDialog(activity);
            this.activity = activity;

        }


        @Override
        protected void onPreExecute() {
            dialog.setMessage("Cargando datos por favor espere");
            dialog.show();
        }

        @Override
        protected void onPostExecute(String result) {
            if (dialog.isShowing()) {
                dialog.dismiss();
                delegate.processFinish(result);
            }
        }

        @Override
        protected String doInBackground(String... params) {
            String res = "1";

    } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return res;
        }
    }
}

AsyncResponse:

public interface AsyncResponse {
    void processFinish(String output);
}
2
задан 23.05.2017, 15:39
0 ответов

Как получать стоимость возврата метода onPostExecute от моего AsyncTask в моем Activity? Точно с таким интерфейсом как которая ты заявляешь:

public interface AsyncResponse {
    void processFinish(String output);
}

Внутри твоего Asynctask ты определяешь переменную для интерфейса, который, закончив выполнение Asynctask в onPostExecute() он назвался бы:

public class AsyncTaskDatos extends AsyncTask<String, Void, String> {
  public AsyncResponse delegate = null;


   ...
   ...

    @Override
    protected void onPostExecute(String result) {
      delegate.processFinish(result);
    }
 }

ты считаешь правильной эту часть, но о проблеме упомянули в ошибке, которую он показывает:

java.lang. NullPointerException: Attempt to invoke интерфейс method 'void com.appmovilperote. AsyncTaskServicios. AsyncResponse.processFinish (java.lang. String)' on в null object reference

это означает, что инстанция интерфейса AsyncResponse не инициализируйся!, Добавляет строитель, который получал бы эту инстанцию:

public class AsyncTaskDatos extends AsyncTask<String, Void, String> {
  public AsyncResponse delegate = null;

   public AsyncTaskDatos(AsyncResponse delegate){
    this.delegate = delegate;
   } 
  // Define interfaz.
  public interface AsyncResponse {
      void processFinish(String output);
  }

    ...
   ...

    @Override
    protected void onPostExecute(String result) {
      delegate.processFinish(result);
    }
 }

Таким образом, в методе processFinish() тебя Activity ты получил бы стоимость, полученную в методе onPostExecute() тебя Asynctask:

public class Splash extends Activity  implements AsyncResponse {

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

  //AsyncTaskDatos tel =  new AsyncTaskDatos(Splash.this);
  // tel.execute();

   new AsyncTaskDatos(this).execute();

 }

 @Override
    public void processFinish(String output){

        //Here you will receive the result fired from async class
        //of onPostExecute(result) method.
    }
}
4
ответ дан 03.12.2019, 17:41
  • 1
    Я существую бросаю точно равно все, как это комментировал предыдущий post и то, что ты комментируешь мне, но aú n así он продолжает меня помечая ту же ошибку :s –  12.01.2017, 20:54
  • 2
    я участвую в рыцарском турнире, когда он прибывает в этой точке delegate.processFinish (result); гремит aplicació n –  12.01.2017, 20:56
  • 3
    Строитель " public AsyncTaskDatos (AsyncResponse уполномочь тебя) { this.delegate = уполномочь тебя; } " is never used –  12.01.2017, 21:01
  • 4
    " truena" потому что уполномочь тебя. у него есть стоимость null. Видит линия, что agregué в твой Activity; new AsyncTaskDatos (this) .execute (); с этим не будь должен говорить, что никогда он не использован ;) обрабатывает информацию и скажи мне, что ты получаешь. –  12.01.2017, 21:02
  • 5
    Стой мою ошибку он был в строителе, во время создания моего объекта Asynctask с моего Activity не перемещал pará метр интерфейс для того, чтобы así в Asynctask он это не пометит как null haha спасибо Елена приветствие :D –  12.01.2017, 21:23

Теги

Похожие вопросы