我想从远程服务器获取一些信息并在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); } });