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