当前位置 : 主页 > 手机开发 > android >

android – 如何更新线程中的listview?

来源:互联网 收集:自由互联 发布时间:2021-06-11
我想从远程服务器获取一些信息并在listview中显示该数据,我已从服务器检索数据,但我不知道如何在列表视图中显示该数据, 这是我的代码,在这段代码中,我已经显示了一个包含静态数据
我想从远程服务器获取一些信息并在listview中显示该数据,我已从服务器检索数据,但我不知道如何在列表视图中显示该数据,
这是我的代码,在这段代码中,我已经显示了一个包含静态数据的列表视图,并尝试通过从服务器获取的数据更新此列表视图,

我不知道在哪里更新列表视图,请任何人帮我这样做

package com.listview;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.net.ParseException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class ListViewActivity extends ListActivity {
/** Called when the activity is first created. */
private ThreadTest mThreadTest;
ArrayList<String > arlist;
public void onCreate(Bundle savedInstanceState) {


      super.onCreate(savedInstanceState);
      mThreadTest=new ThreadTest();       
      Thread tt=new Thread(mThreadTest);
      tt.start();   
//create a static arraylist to display it in listview
      arlist = new ArrayList<String>();
      arlist.add("xxxxxxxxxxxx");
      arlist.add("yyyyyyyyyyyy");
      ArrayAdapter<String>  arrayAdapter = new ArrayAdapter<String>(this,R.layout.list_item, arlist);
      setListAdapter(arrayAdapter);       
//create listview

      ListView lv = getListView();
      lv.setTextFilterEnabled(true);
      lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
// When clicked, show a toast with the TextView text

          Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
              Toast.LENGTH_SHORT).show();
        }
      });
    }

static public class ThreadTest implements Runnable
{
    ListViewActivity li=new ListViewActivity();             
    JSONArray jArray;
    String result = null;
    InputStream is = null;
    StringBuilder sb=null;
    public  ArrayList al,arraylist;
    public void run() 
    {
//get some details from remote server as json string 

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        try
        {

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://xxxxxxxxx/clients/yyyyyy/city.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
         }
        catch(Exception e)
        {
            Log.e("log_tag", "Error in http connection "+e.toString());
        }
        try{                
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");
            String line="0";
            while ((line = reader.readLine()) != null) 
            {
                    sb.append(line  );
            }
            is.close();
            result=sb.toString();

/**************************************
             * result is [{"city_id":"1","city_name":"madurai"},{"city_id":"2","city_name":"coimbatore"},{"city_id":"3","city_name":"chennai"}]
             */

//parse the json string values

            JSONArray array = new JSONArray(result);
            for (int i = 0; i < array.length(); i++) 
            {
                JSONObject row = array.getJSONObject(i);
                int id = row.getInt("city_id");                 
                String name = row.getString("city_name");
//add the cityname to arraylist to display it in listview after the thread exeucted
                arraylist.add(name);                                                    
            }            

        }
        catch(Exception e)
        {
              Log.e("log_tag", "Error converting result "+e.toString());
        }
    }
}

}

我在http://www.sitepoint.com/loading-twitter-data-into-android-with-lists/找到了一个很好的教程来做到这一点,

要更新UI,您应该在线程中调用UI线程,如下所示

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
           ArrayAdapter<String>  arrayAdapter = new ArrayAdapter<String>(this,R.layout.list_item, arlist);
  setListAdapter(arrayAdapter); 
} 
 });
网友评论