0

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;
    }



}
5
  • So whats the problem? Commented Nov 14, 2013 at 4:56
  • I've to use asynctask to get data. Commented Nov 14, 2013 at 4:57
  • place the json code in DoinBackground method and set the adapter to list in postexecute method of AsyncTask Commented Nov 14, 2013 at 4:57
  • ya but I'm confused about the parameters... which parameters should be there ? Commented Nov 14, 2013 at 4:58
  • ok i would sugeest you to use gobal paam for now Commented Nov 14, 2013 at 4:59

1 Answer 1

1

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;
    }

}
Sign up to request clarification or add additional context in comments.

2 Comments

@Biraj... hello It's workinh but progress dialog stucks after few seconds...and not rotating...
I make small change in onPostExecute() method try it on device, because emulator is very slow so when dialog is dismissing you will fill like it is stuck but it is not an issue will work smooth in device.You can accept my answer if you fill its really solved your problem.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.