Cómo pasar datos de AsyncTask a Ui Thread

Estoy implementando una clase asyncTask para cargar los datos del servidor. Tengo los datos ya y quiero pasarlo al hilo de interfaz de usuario, pero no sé cómo.

Este es el código:

 public class InboxHandler extends FragmentActivity implements OnLineSelectedListener { static final int GET_CODE = 0; private TextView textView3, textView2; private Button button1, button2, button3; private LinearLayout tab1, tab2, tab3; private CheckBox cbVerPorCategoria; private ActionBar actionBar; private TextView txtTitle; private Settings settings; FragmentTransaction fragmentTransaction; BottomPanel bottomPanel; public List<OrderRequest> orderRequestArray; private OrderRequestParser orderRequestParser; public static int number; int clickCounter = 0; private boolean doubleBackToExitPressedOnce = false; private static Context context; DataLoader dataLoader; private MyAsynckTask myAsynckTask; public InboxHandler(){} public List<OrderRequest> getOrderRequestArray() { return orderRequestArray; } public void setOrderRequestArray(List<OrderRequest> orderRequestArray) { this.orderRequestArray = orderRequestArray; } public static Context getContext() { return context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_inbox); context = this.getApplicationContext(); settings = Settings.getInstance(); settings.setPrefs(getSharedPreferences(settings.getPREFERENCES(), Activity.MODE_PRIVATE)); settings.setPrefsEditor(settings.getPrefs().edit()); settings.getPrefsEditor().putBoolean("isLoggedIn", true); settings.isVistaSimple = true; actionBar = (ActionBar) findViewById(R.id.actionbar); initComponents(); prepareActionBar(); } private void initComponents() { try { MyAsynckTask myAsynckTask = new MyAsynckTask(this); myAsynckTask.execute(); //HERE I USED A SUGGESTION IN A SIMILAR QUESTION. THAT IS: PASS THE ACTIVITY TO THE ASYNCTASK, AND FROM IT, SAVE IN THE ACTIVITY, THE DATA THAT IU WANT FROM THE ASYNCTASK. I DO THAT, BUT IN THE ACTIVITY, THE DATA IS NULL I SUPPOSE DUE TO, I DONT EVEN SEE IN THE LOGCAT, THE FOLLOWING RESULT: try{ Log.e("e", ""+this.getOrderRequestArray().get(0).getDocNumber()); } catch(Exception e){ e.printStackTrace(); } //If you see the onPostExecute, I test if the data I want is there. and it is there! I set that to the list of the class InboxHandler, but in the above code, when i try to test if it is there, it´s not. And that code don´t even appear in logcat. The "Log.e("e", ""+this.getOrderRequestArray().get(0).getDocNumber());" nor the "e.printStackTrace();" bottomPanel =new BottomPanel(); Bundle bundle = new Bundle(); bundle.putSerializable("arrayPedidos", (Serializable) orderRequestArray); bottomPanel.setArguments(bundle); //actionBar.setTitle("Inbox"); NotificationFragment notificationFragment = new NotificationFragment(orderRequestArray, actionBar); Bundle bundleNotificationFragment = new Bundle(); bundleNotificationFragment.putString("title", "Inbox"); notificationFragment.setArguments(bundleNotificationFragment); fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.frame_list_container, notificationFragment); fragmentTransaction.add(R.id.frame_bottom_panel, bottomPanel); fragmentTransaction.commit(); } catch(Exception e) { e.printStackTrace(); } } private class MyAsynckTask extends AsyncTask { private String stringMensaje; public List<OrderRequest> orderRequestArray; private OrderRequestParser orderRequestParser; private Request request; private Settings settings; private InboxHandler inboxHandler; public MyAsynckTask(InboxHandler inboxHandler){ this.inboxHandler = inboxHandler; } @Override protected Object doInBackground(Object... params) { List<OrderRequest> array = this.getOrderRequests(); settings = Settings.getInstance(); if(array != null){ settings.setOrderRequestArray(array); orderRequestArray = array; Log.e("orderRequestArray", "Me trajo el orderRequestArray en doInBackground!"); } else { Log.e("orderRequestArray", "No me trajo el orderRequestArray en doInBackground!"); } return array; } @Override protected void onPostExecute(Object result) { super.onPostExecute(result); List<OrderRequest> array = (List<OrderRequest>) result; this.setOrderRequestArray(array); if(orderRequestArray != null){ inboxHandler.setOrderRequestArray(orderRequestArray); Log.e("orderRequestArray", "is not null en onPostExecute!"); } else { Log.e("orderRequestArray", "is null en onPostExecute!"); } if(inboxHandler.getOrderRequestArray() != null){ Log.e("inboxHandler.getOrderRequestArray()", "is not null en onPostExecute!"); } else { Log.e("orderRequestArray", "is null en onPostExecute!"); } } public List<OrderRequest> getOrderRequests() { orderRequestParser = new OrderRequestParser(); orderRequestArray = new ArrayList<OrderRequest>(); List<OrderRequest> orderRequestArray = orderRequestParser.listOrderRequest(); Settings.getInstance().setOrderRequestArray(orderRequestArray); if(orderRequestArray != null){ Log.e("orderRequestArray", "Me trajo el orderRequestArray en getOrderRequestArray!"); } else { Log.e("orderRequestArray", "No me trajo el orderRequestArray en getOrderRequestArray!"); } return orderRequestArray; } public void setOrderRequestArray(List<OrderRequest> orderRequestArray) { this.orderRequestArray = orderRequestArray; } public List<OrderRequest> getOrderRequestArray() { return orderRequestArray; } } 

 protected void onPostExecute(Object result) 

Se está ejecutando en el hilo GUI, puede acceder a los elementos GUI allí.

Y sólo debe haber el:

  try{ Log.e("e", ""+this.getOrderRequestArray().get(0).getDocNumber()); } catch(Exception e){ e.printStackTrace(); } 

y

  Bundle bundle = new Bundle(); bundle.putSerializable("arrayPedidos", (Serializable) orderRequestArray); bottomPanel.setArguments(bundle); 

No puedo ver ninguna razón, ¿por qué se ha votado esta pregunta?

  • Mostrar el estado del último elemento de la lista en un ListView con ViewHolder
  • ¿Debo usar la clase AsyncTask dentro de la Actividad de Extensión de MainActivity?
  • Terminar una tarea asíncrona después de que se pierde la actividad
  • Asíntate un comportamiento extraño
  • Android: Errores de archivo IO
  • Android - Detener AsyncTask cuando se pulsa el botón Atrás y volver a Actividad anterior
  • Android runOnUiThread / AsyncTask no puede resolver CalledFromWrongThreadException
  • Si se cancela una actividad, ¿funciona el AsyncTask?
  • AsyncTask - ¿qué parámetros se necesitan para extender y doInBackground?
  • Java Android AsyncTask - ¿Cuándo AsyncTask deja de funcionar?
  • La forma ideal de cancelar una AsyncTask de ejecución
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.