2012-04-26 113 views
3

我需要我一点帮助。我需要使用asynctask在ListView中显示数据。但我不知道我在Android编程方面有什么新感觉......非常感谢您的帮助。使用AsyncTask在ListView中显示数据

public class Main extends ListActivity { 
Button buttonbg; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listplaceholder); 

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 

    JSONObject json = JSONfunctions.getJSONfromURL("http://10.10.10.10/data.php"); 

    try{ 

     JSONArray ip = json.getJSONArray("ip"); 

     for(int i=0;i<ip.length();i++){      
      HashMap<String, String> map = new HashMap<String, String>();  
      JSONObject e = ip.getJSONObject(i); 

      map.put("id", String.valueOf(i)); 
      map.put("data1", e.getString("date")); 
      map.put("data2", "Location:" + e.getString("location") + " Status:" + e.getString("status")); 
      mylist.add(map);    
     }  
    }catch(JSONException e)  { 
     Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 

    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
        new String[] { "data1", "data2" }, 
        new int[] { R.id.item_title, R.id.item_subtitle }); 

    setListAdapter(adapter); 

    final ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 

}}

+1

你有没有[检查文档](http://developer.android.com/reference/android/os/AsyncTask.html)? – dmon 2012-04-26 14:45:35

+1

请发布您的logcat中的任何错误,并告诉我们您的具体问题是什么。 – Sam 2012-04-26 14:58:44

+0

我建议你检查文档。和[这个例子](http://www.technotalkative.com/android-google-image-search-api-example-json-parsing-web-api-call-demo/) – 2012-04-27 06:54:55

回答

8

试试这个

new MyAsyncTask.execute("http://10.10.10.10/data.php"); 

声明的任务,因为

class MyAsyncTask extends AsyncTask<String, Integer, ArrayList<HashMap<String, String>> > { 

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 

    @Override 
    protected ArrayList<HashMap<String, String>> doInBackground(String... params) { 

     JSONObject json = JSONfunctions.getJSONfromURL(params[0]); 

     try { 
      JSONArray ip = json.getJSONArray("ip"); 

      for (int i=0;i<ip.length();i++) {      
       HashMap<String, String> map = new HashMap<String, String>();  
       JSONObject e = ip.getJSONObject(i); 

       map.put("id", String.valueOf(i)); 
       map.put("data1", e.getString("date")); 
       map.put("data2", "Location:" + e.getString("location") + " Status:" + e.getString("status")); 
       mylist.add(map);    
      } 
      return mylist 
     } catch (JSONException e) { 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<HashMap<String, String>> result) { 
     ListAdapter adapter = new SimpleAdapter(YourActivity.this, result , R.layout.main, 
       new String[] { "data1", "data2" }, 
       new int[] { R.id.item_title, R.id.item_subtitle }); 
     YourActivity.this.setListAdapter(adapter); // If Activity extends ListActivity 
     final ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

    } 

希望它有帮助。

+0

没有。这么多sintax错误:( – Nenad 2012-04-27 07:25:40

+0

好吧,我已经做了一些编辑,再试一次,它应该工作 – Som 2012-04-27 07:49:50

+0

你能向我解释什么是YourActivity.this?谢谢 – Nenad 2012-04-27 13:43:00

2

不要在您的onCreate()下载任何数据 - 如果时间过长,那么你会得到ANR异常(活动不响应)。你应该在你的问题中使用AsyncTask。对于的AsyncTask您对Android的网站很好的例子:

http://developer.android.com/reference/android/os/AsyncTask.html

你应该把JSONfunctions.getJSONfromURL()内的doInBackground()

和所有onPostExecute()下面什么