2012-04-26 13 views
3

私は少し助けが必要です。リストビューでデータを表示するには、asynctaskを使用する必要があります。しかし、私は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

+1

あなたのlogcatから何か誤りを投稿し、あなたの特定の問題が何であるか教えてください。 – Sam

+0

文書を確認することをお勧めします。 [この例では](http://www.technotalkative.com/android-google-image-search-api-example-json-parsing-web-api-call-demo/) –

答えて

8

これを試してみてください:AsyncTaskのためには、アンドロイドサイト上で非常に良い例を持っています

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

+0

あなたは私のいくつかの編集を行っています。もう一度やり直してください。 – Som

+0

YourActivity.thisとは何かを説明できますか?ありがとう – Nenad

2

)(あなたのonCreate内のすべてのデータをダウンロードしないでください - それは時間がかかりすぎる場合、あなたは(活動が応答しない)ANR例外が発生します。あなたはあなたの質問にAsyncTaskを使うべきです。

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

あなたはdoInBackground()

、すべてのいただきました!onPostExecute()で下記の内側JSONfunctions.getJSONfromURLを()に置く必要があります

関連する問題