Выполнение doInBackground (AsyncTask) - onCreate (BundlevedInstanceState) - PullRequest
1 голос
/ 27 февраля 2012

ниже - мой код, который ничего не выполняет под doInBackground. Ребята, вы видите, что я что-то не так делаю? Я просто добавляю элементы в объект "Порядок" и показываю представление.

любая помощь?

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"); 
    } 
}  

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Лучше:

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();
} 

}

1 голос
/ 27 февраля 2012

Я думаю, что вы получаете список ноль.Пожалуйста, используйте следующий код в методе postExecute () AsyncTask:

if(0!= m_orders.size())

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

Удалить строку выше из метода onCreate () ....

1 голос
/ 27 февраля 2012

вам нужно runOnUIThread() при смене m_orders

почему вы дважды инициализируете m_orders?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...