2013-11-14 5 views
0

Я должен анализировать данные JSON, которые я получаю из базы данных. Я могу получить их успешно, но я хочу, чтобы они использовали asynctask. Но я новичок в этой концепции. Ниже мой код, который имеет пользовательский адаптер, поскольку проанализированные данные будут показаны в списке.Анализ данных JSON с помощью Asynctask

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



} 
+0

Так Что проблема? –

+0

Я должен использовать asynctask для получения данных. –

+0

поместите код json в метод DoinBackground и установите адаптер в список по методу postexecute AsyncTask – KOTIOS

ответ

1

Попробуйте этот путь

Использование AsyncTask довольно распараллеливания как этот

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

} 
+0

@Biraj ... привет, это рабочий, но диалог прогресса через несколько секунд ... и не вращается ... –

+0

Я делаю небольшое изменение в методе onPostExecute() устройство, потому что эмулятор очень медленный, поэтому, когда диалог отклоняется, вы заполняете, как он застрял, но это не проблема, будет работать гладко в устройстве. Вы можете принять мой ответ, если вы заполните его, действительно решив вашу проблему. –

+0

хорошо .... уверен .... и спасибо ... –

Смежные вопросы