thumber nirmal
thumber nirmal

Reputation: 1617

Parse JSON data with Asynctask

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

Answers (1)

Biraj Zalavadia
Biraj Zalavadia

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

Related Questions