In my code, I want to update ListView
periodically say after every 10 seconds. As ListView
is custom and data in ListView
are populated from database, I need to refresh ListView
periodically so that any changes in database can be reflected in ListView
. I tried using Handler
concept but it didn't help me. Below is my code. What needs to be done?
public class GetFriendDeviceId extends ListActivity {
String data = "";
String title;
ListView list;
CustomDeviceId adapter;
ArrayList<String> useridarr;
ArrayList<String> namearr;
ArrayList<String> regidarr;
ArrayList<String> statusarr;
String id;
String userid, name, regid;
private static final String USERID = "user_id";
private static final String NAME = "user_name";
private static final String REGID = "regId";
DBController contoller = new DBController(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.getfriend_deviceid);
useridarr = new ArrayList<String>();
namearr = new ArrayList<String>();
regidarr = new ArrayList<String>();
statusarr = new ArrayList<String>();
// get user_id using sharedpreference
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
id = preferences.getString("ID", "");
new GetContent().execute();
}
// asynctask to get content for selected title
public class GetContent extends AsyncTask<Void, Void, Void>
{
ProgressDialog pdLoading = new ProgressDialog(GetFriendDeviceId.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
useridarr.clear();
namearr.clear();
regidarr.clear();
statusarr.clear();
pdLoading.setMessage("\tPlease wait...");
pdLoading.show();
}
@Override
protected Void doInBackground(Void... params) {
final GetDeviceId getdb = new GetDeviceId();
new Thread(new Runnable() {
public void run() {
data = getdb.getDataFromDB(id);
System.out.println(data);
runOnUiThread(new Runnable() {
@Override
public void run() {
ArrayList<User_DeviceId> users = parseJSON(data);
addData(users);
}
});
}
}).start();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
pdLoading.dismiss();
}
}
public ArrayList<User_DeviceId> parseJSON(String result) {
ArrayList<User_DeviceId> users = new ArrayList<User_DeviceId>();
try
{
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++)
{
JSONObject json_data = jArray.getJSONObject(i);
User_DeviceId user = new User_DeviceId();
user.setUser_id(json_data.getString(USERID));
user.setUser_name(json_data.getString(NAME));
user.setRegId(json_data.getString(REGID));
users.add(user);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return users;
}
@SuppressWarnings({ "rawtypes" })
public void addData(ArrayList<User_DeviceId> users) {
for (Iterator i = users.iterator(); i.hasNext();) {
User_DeviceId p = (User_DeviceId) i.next();
useridarr.add(p.getUser_id());
namearr.add(p.getUser_name());
regidarr.add(p.getRegId());
}
DBController.statusArray = statusarr;
contoller.getStatus(id, useridarr, 0);
adapter = new CustomDeviceId(GetFriendDeviceId.this, namearr, useridarr, statusarr);
list.setAdapter(adapter);
}
I tried this code
final Handler handler_new = new Handler();
handler_new.postDelayed( new Runnable() {
@Override
public void run() {
DBController.statusArray = MainActivity.result;
contoller.Status("100003818200590", "100007144268382", 0);
MainActivity.adapter.notifyDataSetChanged();
handler_new.postDelayed( this, 1000);
}
}, 1000);
But didn't work...