我正在实现一个asyncTask
类来从服务器加载数据。
我已经有了数据,我想将它传递给UI线程,但我不知道如何。
这是代码:
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;
}
}
答案 0 :(得分:2)
protected void onPostExecute(Object result)
它在GUI线程中运行,您可以在那里访问GUI元素。
只有应该有:
try{
Log.e("e", ""+this.getOrderRequestArray().get(0).getDocNumber());
} catch(Exception e){
e.printStackTrace();
}
和
Bundle bundle = new Bundle();
bundle.putSerializable("arrayPedidos", (Serializable) orderRequestArray);
bottomPanel.setArguments(bundle);
我看不出任何理由,为什么这个问题被投票了。