Reputation: 1617
I've to parse JSON data which I get from database. I can get them successfully but I want to get them using asynctask. But I'm new to this concept. Below is my code which has custom adapter as parsed data will be shown in listview.
public class Favourites extends ListActivity {
ProgressDialog pDialog;
ListView lv;
String data = "";
ArrayList<String> arr;
ArrayAdapter<String> adapter;
ArrayList<String> useridarr;
ArrayList<String> namearr;
ArrayList<String> store_namearr;
ArrayList<String> brand_namearr;
ArrayList<String> pricearr;
ArrayList<String> imagearr;
ArrayList<String> addressarr;
ArrayList<String> typearr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favourites);
useridarr = new ArrayList<String>();
namearr = new ArrayList<String>();
store_namearr = new ArrayList<String>();
brand_namearr = new ArrayList<String>();
pricearr = new ArrayList<String>();
imagearr = new ArrayList<String>();
addressarr = new ArrayList<String>();
typearr = new ArrayList<String>();
// getting data from db
final GetDataFromDB getdb = new GetDataFromDB();
new Thread(new Runnable() {
public void run() {
data = getdb.getDataFromDB("1");
System.out.println(data);
runOnUiThread(new Runnable() {
@Override
public void run() {
ArrayList<Users> users = parseJSON(data);
addData(users);
}
});
}
}).start();
}
public ArrayList<Users> parseJSON(String result) {
ArrayList<Users> users = new ArrayList<Users>();
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject json_data = jArray.getJSONObject(i);
Users user = new Users();
user.setUser_id(json_data.getString("user_id"));
user.setName(json_data.getString("name"));
user.setStore_name(json_data.getString("store_name"));
user.setBrand_name(json_data.getString("brand_name"));
user.setPrice(json_data.getString("price"));
user.setPic(json_data.getString("pic"));
user.setAddress(json_data.getString("address"));
user.setType(json_data.getString("type"));
users.add(user);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return users;
}
@SuppressWarnings({ "rawtypes" })
public void addData(ArrayList<Users> users) {
arr = new ArrayList<String>();
for (Iterator i = users.iterator(); i.hasNext();) {
Users p = (Users) i.next();
useridarr.add(p.getUser_id());
namearr.add(p.getName());
store_namearr.add(p.getStore_name());
brand_namearr.add(p.getBrand_name());
pricearr.add(p.getPrice());
imagearr.add(p.getPic());
addressarr.add(p.getAddress());
typearr.add(p.getType());
}
adapter = new CustomListFavourites(Favourites.this, useridarr, namearr, store_namearr, brand_namearr, pricearr, imagearr, addressarr, typearr);
lv= getListView();
lv.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
}
Upvotes: 0
Views: 232
Reputation: 28484
Try this way
Use asynctask rather thread like this
public class Favourites extends ListActivity {
ProgressDialog pDialog;
ListView lv;
String data = "";
ArrayList<String> arr;
ArrayAdapter<String> adapter;
ArrayList<String> useridarr;
ArrayList<String> namearr;
ArrayList<String> store_namearr;
ArrayList<String> brand_namearr;
ArrayList<String> pricearr;
ArrayList<String> imagearr;
ArrayList<String> addressarr;
ArrayList<String> typearr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favourites);
useridarr = new ArrayList<String>();
namearr = new ArrayList<String>();
store_namearr = new ArrayList<String>();
brand_namearr = new ArrayList<String>();
pricearr = new ArrayList<String>();
imagearr = new ArrayList<String>();
addressarr = new ArrayList<String>();
typearr = new ArrayList<String>();
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = ProgressDialog.show(Favourites.this, "Loading Data", "Please wait...");
}
@Override
protected Void doInBackground(Void... params) {
final GetDataFromDB getdb = new GetDataFromDB();
data = getdb.getDataFromDB("1");
ArrayList<Users> users = parseJSON(data);
addData(users);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
pDialog.dismiss();
adapter = new CustomListFavourites(Favourites.this, useridarr, namearr, store_namearr, brand_namearr, pricearr, imagearr,
addressarr, typearr);
lv = getListView();
lv.setAdapter(adapter);
}
}.execute();
}
public ArrayList<Users> parseJSON(String result) {
ArrayList<Users> users = new ArrayList<Users>();
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject json_data = jArray.getJSONObject(i);
Users user = new Users();
user.setUser_id(json_data.getString("user_id"));
user.setName(json_data.getString("name"));
user.setStore_name(json_data.getString("store_name"));
user.setBrand_name(json_data.getString("brand_name"));
user.setPrice(json_data.getString("price"));
user.setPic(json_data.getString("pic"));
user.setAddress(json_data.getString("address"));
user.setType(json_data.getString("type"));
users.add(user);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return users;
}
@SuppressWarnings({ "rawtypes" })
public void addData(ArrayList<Users> users) {
arr = new ArrayList<String>();
for (Iterator i = users.iterator(); i.hasNext();) {
Users p = (Users) i.next();
useridarr.add(p.getUser_id());
namearr.add(p.getName());
store_namearr.add(p.getStore_name());
brand_namearr.add(p.getBrand_name());
pricearr.add(p.getPrice());
imagearr.add(p.getPic());
addressarr.add(p.getAddress());
typearr.add(p.getType());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
}
Upvotes: 1