【问题标题】:AsyncTask onPostExecute never calledAsyncTask onPostExecute 从未调用过
【发布时间】:2015-01-05 18:53:19
【问题描述】:

我需要创建一个返回 String[] 的 AsyncTask 类,返回的 String[] 将用于创建一个列表,所以我想在 AsyncTask 类中创建 ListActivity 但 onPostExecute 方法不起作用,它是从来没有打电话。我的代码:

public class AsyncReadPrices extends AsyncTask<Object, String[], String[]>{
static String url = "http://www.mywebsite.com/";
static String ConfPath = new String();

    protected String[] doInBackground(Object... params){
        String[] menus = new String [(int) params[1]];
        try{

            BufferedReader reader = new BufferedReader(new InputStreamReader(new URL(url+params[0]).openStream()));
            String line = reader.readLine();
            for (int k = 0; k < (int)params[1]; k++) {
                menus[k] = line;
                line = reader.readLine();
            }
            Log.i("check 1","");
            return menus;
        }
        catch (IOException e){
            e.printStackTrace();
        }
        Log.i("check 2","");
        return menus;
    }

@Override
protected void onPostExecute(final String[] menu) {
    Log.i("It works!","");
    new ListActivity(){
        @Override
        public void setListAdapter(ListAdapter adapter) {
            Log.i("string", menu[0] );
            setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, menu));
        }
    };
}

}

【问题讨论】:

  • 你能再解释一下吗? doInBackground() 会被调用吗?会不会崩溃。还有什么会/不会发生?
  • AsyncTask 类被调用,doInBackground 工作,但 onPostExecute 方法没有被调用,我不知道为什么
  • 不确定new ListActivity(),但这不是创建活动的正确方法。此日志是否被调用,Log.i("It works!","");
  • 不,Log.i("它有效!","");永远不会被调用,与方法相同
  • new ListActivity(){ 你希望这个做什么?

标签: java android networking android-asynctask


【解决方案1】:

请避免在onPostExecute() 方法中使用ListActivity()。您应该使用返回的值更新AdapterArrayList,然后使用相同的ArrayList 填充您的列表。

请尝试使用此代码:-

 @Override 
 protected void onPostExecute(final String[] menu) {


    itemListAdapter = new ItemListBaseAdapter( 
                YourActivity.this, data);
    listView.setAdapter(itemListAdapter); 
}

// listView 应该更早在你的活动类中初始化

// itemListAdapter 如果你使用的是自定义适配器,否则直接使用

【讨论】:

  • 问题出在ListActivity之前,onPostExecute没有运行,方法被忽略了
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多