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:
- 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);