2012-05-12 30 views
0

以下のコードは、現在mysqlデータベースからデータを取り出してListViewに表示しています。私が探しているのは、アプリケーションに毎分または毎分のmysqlデータベースをチェックさせて新しいエントリをチェックさせる方法を見つけて、現在のListViewにない新しいエントリを見つけたら、項目をリストの先頭に追加します。私はnotifyDataSetChanged()でいくつかのことを読んだことがありますが、実際にどのように動作するのか、それを実装する方法を把握することはできません。どんなヘルプも充実しています。ありがとう!Android - ListViewへのアイテムの自動追加

public class Data extends ListActivity { 
    private ArrayList<Feed> posts = new ArrayList<Feed>(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     new FeedTask().execute(); 
    } 
    private class FeedTask extends AsyncTask<Void, Void, Void> { 
     private ProgressDialog progressDialog; 
     protected void onPreExecute() { 
      progressDialog = ProgressDialog.show(Data.this,"", "Loading. Please wait...", true); 
     } 
     @Override 
     protected Void doInBackground(Void... arg0) { 
      try { 
       HttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost("http://xxxx/livefeed/getdata.php"); 
       HttpResponse httpResponse = httpClient.execute(httpPost); 
       String result = EntityUtils.toString(httpResponse.getEntity()); 
       JSONArray jArray = new JSONArray(result); 
       JSONObject json_data = null; 
       for (int i = 0; i < jArray.length(); i++) { 
        json_data = jArray.getJSONObject(i); 
        Feed feed = new Feed(); 
        feed.content = json_data.getString("post"); 
        feed.time = json_data.getString("post_time"); 
        posts.add(feed); 
       } 
      } 
      catch (Exception e){ 
       Log.e("ERROR", "Error loading JSON", e); 
      } 
      return null; 
     } 
     @Override 
     protected void onPostExecute(Void result) { 
      progressDialog.dismiss(); 
      setListAdapter(new FeedListAdaptor(Data.this, R.layout.feed, posts)); 
     } 
    } 
    private class FeedListAdaptor extends ArrayAdapter<Feed> { 
     private ArrayList<Feed> posts; 
     public FeedListAdaptor(Context context, 
     int textViewResourceId, 
     ArrayList<Feed> items) { 
      super(context, textViewResourceId, items); 
      this.posts = items; 
     } 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 
       LayoutInflater vi = (LayoutInflater) 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.feed, null); 
      } 
      Feed o = posts.get(position); 
      TextView tt = (TextView) v.findViewById(R.id.toptext); 
      TextView bt = (TextView) v.findViewById(R.id.bottomtext); 
      tt.setText(o.content); 
      bt.setText(o.time); 
      return v; 
     } 
    } 
    public class Feed { 
     String content; 
     String time; 
    } 
} 
+0

コールonPostExecute方法でnotifyDataSetChanged()探しているもの。 – adatapost

+0

notiftyDataSetChanged()を呼び出すだけで、データベース内の新しい項目が継続的にチェックされますか?何らかの理由で私はそれが簡単であるとは想像できません... – dschuett

答えて

0

XMLオブジェクトを解析した後に、すべてをローカルSQLデータベースに格納することをお勧めします。コンテンツプロバイダーでLoaderManagerを使用することができ、新しいものがデータベースに追加されると非同期に更新されます。

ITSはおそらくあなたの現在のコードのリファクタリングを取るつもりが、その価値はそれIMO、そのほとんどあなたが

関連する問題