异步任务在android系统不工作 [英] Async Task in android not working

查看:115
本文介绍了异步任务在android系统不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的问题<一个跟进的问题href=\"http://stackoverflow.com/questions/8186635/thread-exiting-error-in-android/8186771#8186771\">thread在android系统退出误差

我创建了一个异步任务,但该值不会在列表视图中显示....

I created an async task but the values do not show up in the list view....

public class History extends Activity implements OnItemClickListener
{
/** Called when the activity is first created. */
ListView list;

//LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
ArrayList<String> listItems;

//DEFINING STRING ADAPTER WHICH WILL HANDLE DATA OF LISTVIEW
ArrayAdapter<String> adapter;
private String resDriver,resPassenger,ID;
private ProgressDialog dialog;
ArrayList<HashMap<String, Object>> listInfo = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> item;
JSONObject jDriver;
//JSONObject jPassenger;

// Make strings for logging
private final String TAG = this.getClass().getSimpleName();
private final String RESTORE = ", can restore state";
private final String state = "Home Screen taking care of all the tabs";
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    Intent loginIntent = getIntent();
    ID = loginIntent.getStringExtra("ID");
    listItems = new ArrayList<String>();
    Log.i(TAG, "Started view active rides");
    setContentView(R.layout.searchresults);
    list = (ListView)findViewById(R.id.ListView01);
    list.setOnItemClickListener(this);
    adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,listItems);

    list.setAdapter(adapter);
    getInfo();
}
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3)
{
// TODO Auto-generated method stub
    Toast.makeText(this, "u clicked " + listItems.get(position) ,Toast.LENGTH_LONG).show();
}

public void getInfo(){

    DownloadInfo task = new DownloadInfo();
    task.execute(new String[] { "http://www.vogella.de" });

}

private class DownloadInfo extends AsyncTask<String, Void , ArrayList<String>>{

    @Override
    protected ArrayList<String> doInBackground(String ... strings) {
        ArrayList<String> listItems1;
        jDriver = new JSONObject();
        try {
            jDriver.put("ID", ID);
            jDriver.put("task", "GET DATES");

        } catch (JSONException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        listItems1 = new ArrayList<String>();
        Log.i(TAG,"Sending data for the driver rides");
        resDriver = HTTPPoster.sendJson(jDriver,"URL"); // Any Server URL

        JSONObject driver;
        try {
            driver = new JSONObject(resDriver);
            Log.i(TAG,"Recieved Driver details");
            if ( driver.getString("DATABASE ERROR").equals("False")){
                int length = Integer.parseInt( driver.getString("length"));
                Log.i(TAG,"length is " + length);
                for( int i =0 ; i< length ; i++){
                    String info = driver.getString(Integer.toString(i));
                    String[] array = info.split(",");
                    Log.i(TAG,"array is " + Arrays.toString(array));
                    Log.i(TAG,"Date "+ array.length);
                    Log.i(TAG,"DONE WITH THE LOOP");
                    //listInfo.add(item);
                    Log.i(TAG,"Date is"+array[0]);
                    listItems1.add(array[0]);                           
                }
            }
        } catch (JSONException e) {
        // TODO Auto-generated catch block
            listItems1.add("No driver rides created");
        }
        return listItems1;
    }

    @Override
    protected void onPostExecute(ArrayList<String> result) {

        listItems = result;
        adapter.notifyDataSetChanged();
    }
}
}

的问题是,在适配器的值不被修改...

The problem is that the values in the adapter do not get modified...

推荐答案

您个够你listItems中的AsyncTask的初始化之后用空listItems中的适配器。 onPostExecute(),您的适配器没有得到更新,试试这个:

You initialize your adapter with a empty listItems, after your fill your listItems in AsyncTask. onPostExecute(), your adapter is not get updated, try this:

protected void onPostExecute(ArrayList<String> result) {
  listItems = result;
  adapter.addAll(ListItems);
  adapter.notifyDataSetChanged();
}

希望帮助。

这篇关于异步任务在android系统不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆