简体   繁体   中英

Executing doInBackground (AsyncTask) - onCreate(Bundle savedInstanceState)

below is my code that does not execute anything under the doInBackground do you guys see anything wrong i am doing?, i am just adding items in the object called "Order" and show the view.

any help?

private ArrayList<Order> m_orders = null;
private OrderAdapter m_adapter;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);   

    setContentView(R.layout.main);
    m_orders = new ArrayList<Order>();

    new taskDoSomething().execute(); 

    this.m_adapter = new OrderAdapter(this, R.layout.row, m_orders);
    setListAdapter(this.m_adapter);  
}



private class taskDoSomething extends AsyncTask<Void, Void, Void> 
{ 

    @Override 
    protected Void doInBackground(Void... params) { 

        Log.i("LOGGER", "Starting...doInBackground loadList"); 

        m_orders = new ArrayList<Order>();

        Order o1 = new Order();
        o1.setOrderName("songs_array[0]");
        o1.setOrderStatus("Pending");
        o1.setQuantity(111);
        m_orders.add(o1);

        return (null); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
        Log.i("LOGGER", "...Done doInBackground loadList"); 
    } 
}  

Better:

private class taskDoSomething extends AsyncTask<Void, Void, List<Order>>  { 

@Override 
protected List<Order> doInBackground(Void... params) { 

    Log.i("LOGGER", "Starting...doInBackground loadList"); 

    List<Order> orders = new ArrayList<Order>();


    Order o1 = new Order();
    o1.setOrderName("songs_array[0]");
    o1.setOrderStatus("Pending");
    o1.setQuantity(111);
    orders.add(o1);

    return orders; 
} 

@Override 
protected void onPostExecute(List<Order> result) { 
    m_orders.clear();
    m_orders.addAll(result); 
    m_adapter.notifyDataSetChanged();
} 

}

you need to runOnUIThread() when changing m_orders

why are you init m_orders twice?

I think you are getting List null. Please use following code in postExecute() method of AsyncTask :

if(0!= m_orders.size())

this.m_adapter = new OrderAdapter(this, R.layout.row, m_orders);
    setListAdapter(this.m_adapter);  

Remove above line from onCreate() method....

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM