异步更新后更新Android Listview

时间:2013-09-27 04:16:19

标签: android android-listview listview-adapter

我正在将HTTP调用转换为来自同步调用的异步调用。因为连接在后台运行,所以当我最初设置列表适配器时,数据不存在。如何在HTTP调用后让列表适配器更新?我尝试了一些事情,比如没有设置适配器,直到数据被发回并再次设置适配器,但没有任何工作。这是我目前的创建代码

protected void onCreate(Bundle savedInstanceState) {
    overridePendingTransition(R.layout.anim_out,R.layout.anim_in);
    setTheme(R.style.Theme_D_theme);
    setContentView(R.layout.news_fragment);
    super.onCreate(savedInstanceState);

    text = (TextView) this.findViewById(R.id.nomore);
    list = (ListView) this.findViewById(R.id.newslist);
    list.setDividerHeight(2);

    new MyAsyncTask().execute("THIS");  



        list.setOnItemClickListener(this);
        list.setCacheColorHint(Color.WHITE);
        adapter = new SimpleAdapter(this, x, R.layout.drill1_listview,
                new String[] {"title","content","distance", "image"},
                new int[] {R.id.title, R.id.content, R.id.distance, R.id.image} );

}

我的AsyncTast

private class MyAsyncTask extends AsyncTask<String, Integer, Double>{

    @Override
    protected Double doInBackground(String... params) {
        // TODO Auto-generated method stub
        postData(params[0]);
        return null;
    }

    protected void onPostExecute(Double result){
        //pb.setVisibility(View.GONE);
        Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_LONG).show();
    }
    protected void onProgressUpdate(Integer... progress){
        //pb.setProgress(progress[0]);
    }

    public void postData(String valueIWantToSend) {


        ThreadPolicy tp = ThreadPolicy.LAX;
        StrictMode.setThreadPolicy(tp);

        HttpClient httpclient = new DefaultHttpClient();        
        String type = getIntent().getExtras().getString("type");
        HttpGet httppost = new HttpGet("http://myip.../all?latitude=42.12345&longitude=-76.2154");



        InputStream inputStream = null;
        try {               
            HttpResponse response = httpclient.execute(httppost);           
            HttpEntity entity = response.getEntity();
            String JSONstring = EntityUtils.toString(entity);
            Log.w("HTTPRESPONSE", JSONstring);

            //Toast.makeText(this, JSONstring, Toast.LENGTH_SHORT).show();

            if (!(JSONstring.equals(" 0"))) {




            JSONArray array = new JSONArray(JSONstring);
            for (int i = 0; i < array.length(); i++) {
                JSONObject row = array.getJSONObject(i);
                HashMap<String,String> temp = new HashMap<String,String>();




                String thisid = row.getString("id");
                ider.add(thisid);

                String starthold = row.getString("start_time");
                start.add(starthold);

                String endhold = row.getString("end_time");
                end.add(endhold);

                String latitudehold = row.getString("latitude");
                latitude.add(latitudehold);

                String longitudehold = row.getString("longitude");
                longitude.add(longitudehold);

                String addresshold = row.getString("street");
                address.add(addresshold);

                String title = row.getString("company");
                company.add(title);
                temp.put("title", title);

                String distance_hold = row.getString("distance");
                distance.add(distance_hold);
                temp.put("distance", distance_hold);


                int[] images = new int[] { R.drawable.local_eat,R.drawable.local_eat,
                         R.drawable.local_drink, R.drawable.local_shop,
                         R.drawable.local_do, R.drawable.local_chance,
                         R.drawable.local_all };

                String image = row.getString("promo_type");
                temp.put("image", Integer.toString(images[Integer.valueOf(image)]));

                String description = row.getString("name");
                name.add(description);
                temp.put("content", description);

                x.add(temp);

            }


            }
        } catch (Exception e) { 
            // Oops
        } finally {
            try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
        }           


    }

}

2 个答案:

答案 0 :(得分:6)

在后期执行中添加此行。最后。

x.add(temp);
adapter.notifyDataSetChanged();

答案 1 :(得分:2)

这样做

private class MyAsyncTask extends AsyncTask<String, Integer, Double>{

    @Override
    protected Double doInBackground(String... params) {
        // TODO Auto-generated method stub
        postData(params[0]);
        return null;
    }

    protected void onPostExecute(Double result){
        //pb.setVisibility(View.GONE);
        Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_LONG).show();
    //UPDATE HERE
     adapter = new SimpleAdapter(this, x, R.layout.drill1_listview, 
                new String[] {"title","content","distance", "image"},
                new int[] {R.id.title, R.id.content, R.id.distance, R.id.image} );
     list.setAdapter(adapter);

    }
    protected void onProgressUpdate(Integer... progress){
        //pb.setProgress(progress[0]);
    }

    public void postData(String valueIWantToSend) {


        ThreadPolicy tp = ThreadPolicy.LAX;
        StrictMode.setThreadPolicy(tp);

        HttpClient httpclient = new DefaultHttpClient();        
        String type = getIntent().getExtras().getString("type");
        HttpGet httppost = new HttpGet("http://myip.../all?latitude=42.12345&longitude=-76.2154");



        InputStream inputStream = null;
        try {               
            HttpResponse response = httpclient.execute(httppost);           
            HttpEntity entity = response.getEntity();
            String JSONstring = EntityUtils.toString(entity);
            Log.w("HTTPRESPONSE", JSONstring);

            //Toast.makeText(this, JSONstring, Toast.LENGTH_SHORT).show();

            if (!(JSONstring.equals(" 0"))) {




            JSONArray array = new JSONArray(JSONstring);
            for (int i = 0; i < array.length(); i++) {
                JSONObject row = array.getJSONObject(i);
                HashMap<String,String> temp = new HashMap<String,String>();




                String thisid = row.getString("id");
                ider.add(thisid);

                String starthold = row.getString("start_time");
                start.add(starthold);

                String endhold = row.getString("end_time");
                end.add(endhold);

                String latitudehold = row.getString("latitude");
                latitude.add(latitudehold);

                String longitudehold = row.getString("longitude");
                longitude.add(longitudehold);

                String addresshold = row.getString("street");
                address.add(addresshold);

                String title = row.getString("company");
                company.add(title);
                temp.put("title", title);

                String distance_hold = row.getString("distance");
                distance.add(distance_hold);
                temp.put("distance", distance_hold);


                int[] images = new int[] { R.drawable.local_eat,R.drawable.local_eat,
                         R.drawable.local_drink, R.drawable.local_shop,
                         R.drawable.local_do, R.drawable.local_chance,
                         R.drawable.local_all };

                String image = row.getString("promo_type");
                temp.put("image", Integer.toString(images[Integer.valueOf(image)]));

                String description = row.getString("name");
                name.add(description);
                temp.put("content", description);

                x.add(temp);

            }


            }
        } catch (Exception e) { 
            // Oops
        } finally {
            try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
        }           


    }

}