studio publishprogress oncancelled cancel asynctask android android-fragments android-asynctask result

android - publishprogress - devolver el resultado de asynctask a un fragmento



get return asynctask android (1)

Antes que nada, algo de información sobre mi proyecto:

Tengo una aplicación que consta de varios fragmentos. (Tengo una clase que amplía FragmentActivity y otra que extiende FragmentPagerAdapter). De hecho, mi código se ejecuta dentro de los Fragments.

Llamo a una asynctask dentro de uno de los fragmentos para hacer algunos cálculos. El asyncTask es un archivo separado y la clase no se encuentra dentro de la clase Fragment.

Entonces 1 archivo es la asynctask y otro el fragmento (las variables del fragmento no son accesibles directamente por la asynctask !!!).

Puedo mostrar el resultado de asyncTask usando ProgressDialog. Sin embargo, quiero poder devolver los datos (resultado de la asynctask) a una variable que tengo en mi fragmento. Lo que he intentado hasta ahora es:

  1. Usando get () desde asyncatask.execute ()

Intenté hacerlo así:

Usé el siguiente código que se llamó después de hacer clic en un botón.

mytask1 = new myAsyncTask(this); String result =mytask1.execute(value1).get();

Sin embargo, esto hace que el hilo principal se atasque y espere a que se complete la asynctask.

2.Usar loginSharePreferens

loginPreferences = getActivity().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE); loginPrefsEditor = loginPreferences.edit(); loginPrefsEditor.putString("result", result); loginPrefsEditor.commit();

Esto me dio errores.

3.Traté también esto
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext() );

Eso fue similar con el segundo método.

4.Intenté crear un método en mi fragmento que simplemente estableciera el valor e intenté llamarlo dentro del fragmento

MyFrragment1.this.setRestult(1); // is called in the onPostExecute of the asyncTask public void setRestult(int result){ this.test1=result; ///inside of the fragment }

Esto me dio error: "No se puede acceder a ninguna instancia adjunta del tipo MyFragment1 en el alcance"

No sé qué más probar. Algunas ideas ?


Puede usar el método onPostExecute que se ejecuta en el subproceso UI y se doInBackground después de que doInBackground finaliza. Puedes anularlo en tu Fragment esta manera:

new myAsyncTask() { @Override protected void onPostExecute( Result result ) { super.onPostExecute( result ); // Do something with result here } }.execute(value1);