Android 使用Asynctask解析JSON数据

Android 使用Asynctask解析JSON数据,android,json,android-asynctask,Android,Json,Android Asynctask,我必须解析从数据库中获取的JSON数据。我可以成功地获取它们,但我希望使用asynctask获取它们。但我对这个概念还不熟悉。下面是我的代码,它具有自定义适配器,因为解析后的数据将显示在listview中 public class Favourites extends ListActivity { ProgressDialog pDialog; ListView lv; String data = ""; ArrayList<String> arr;

我必须解析从数据库中获取的JSON数据。我可以成功地获取它们,但我希望使用asynctask获取它们。但我对这个概念还不熟悉。下面是我的代码,它具有自定义适配器,因为解析后的数据将显示在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;
    }



}
公共类收藏夹扩展了ListActivity{
ProgressDialog;
ListView lv;
字符串数据=”;
ArrayList-arr;
阵列适配器;
arraylistuseridarr;
arraylistnamearr;
ArrayList store_namearr;
ArrayList品牌_namearr;
ArrayList pricearr;
ArrayList imagearr;
arraylistaddressarr;
ArrayList typearr;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.Favorites);
useridarr=newarraylist();
namearr=newarraylist();
store_namearr=new ArrayList();
brand_namearr=新阵列列表();
pricearr=newarraylist();
imagearr=新的ArrayList();
addressarr=新的ArrayList();
typearr=newarraylist();
//从数据库获取数据
final GetDataFromDB getdb=new GetDataFromDB();
新线程(newrunnable()){
公开募捐{
data=getdb.getDataFromDB(“1”);
系统输出打印项次(数据);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
ArrayList users=parseJSON(数据);
添加数据(用户);
}
});
}
}).start();
}
公共ArrayList parseJSON(字符串结果){
ArrayList用户=新建ArrayList();
试一试{
JSONArray jArray=新JSONArray(结果);
for(int i=0;i
试试这种方法

使用异步任务而不是像这样的线程

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

}
公共类收藏夹扩展了ListActivity{
ProgressDialog;
ListView lv;
字符串数据=”;
ArrayList-arr;
阵列适配器;
arraylistuseridarr;
arraylistnamearr;
ArrayList store_namearr;
ArrayList品牌_namearr;
ArrayList pricearr;
ArrayList imagearr;
arraylistaddressarr;
ArrayList typearr;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.Favorites);
useridarr=newarraylist();
namearr=newarraylist();
store_namearr=new ArrayList();
brand_namearr=新阵列列表();
pricearr=newarraylist();
imagearr=新的ArrayList();
addressarr=新的ArrayList();
typearr=newarraylist();
新建异步任务(){
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=ProgressDialog.show(收藏夹。这是“正在加载数据”,“请稍候…”);
}
@凌驾
受保护的Void doInBackground(Void…参数){
final GetDataFromDB getdb=new GetDataFromDB();
data=getdb.getDataFromDB(“1”);
ArrayList users=parseJSON(数据);
添加数据(用户);
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
pDialog.disclose();
adapter=新的CustomListFavorites(Favorites.this、useridarr、namearr、store_-namearr、brand_-namearr、pricearr、imagearr、,
地址arr,typearr);
lv=getListView();
低压设置适配器(适配器);
}
}.execute();
}
公共ArrayList parseJSON(字符串结果){
ArrayList用户=新建ArrayList();
试一试{
JSONArray jArray=新JSONArray(结果);
for(int i=0;i