最初に、postdelayed() を使用するとコードが繰り返し実行されないことです。繰り返しパターンでコードを実行する場合は、このコードを使用します。これは5秒ごとに実行されます
ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
/*This schedules a runnable task every second*/
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run()
{
runOnUiThread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
new GetContacts().execute();
}
});
}
}, 0, 5, TimeUnit.SECONDS);
次のコードは、毎回 postExecute() で SimpleAdapter の新しいインスタンスを作成しているため、同じデータが何度も表示されます。したがって、アダプターを更新する場合は、 SimpleAdapter インスタンスをクラスメンバーとして作成し、 postExecute() をこれで置き換えます
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
if(adapter == null)
{
adapter = new SimpleAdapter(
MainActivity.this, contactList,
R.layout.list_item, new String[] { TAG_NAME, TAG_EMAIL,
TAG_PHONE_MOBILE }, new int[] { R.id.name,
R.id.email, R.id.mobile });
setListAdapter(adapter);
}
else
{
adapter.notifyDataSetChanged();
}
}
これでアダプタが更新されますが、同じ連絡先が追加されます