如何在android中刷新和加载json feed中的数据?
问题描述:
我有一个json feed
从这URL其中包含20个字段,我解析所有的数据..但我需要在列表视图中显示20个字段后再次从json feed
加载更多的数据。如何在android中刷新和加载json feed中的数据?
我创建了一个AsyncTask
并在列表视图中加载了json。这是我的课提前
public void onCreate(Bundle savedInstanceState) {
new DoInBackgrd().execute();
}
private class DoInBackgrd extends AsyncTask<Void, Void, Void> implements
DialogInterface.OnCancelListener {
private ProgressDialog processDialog;
@Override
protected void onPreExecute() {
processDialog = ProgressDialog.show(List.this, "",
getString(R.string.loading), true);
processDialog.setCancelable(true);
}
public void onCancel(DialogInterface arg0) {
// TODO Auto-generated method stub
if (processDialog.isShowing()) {
processDialog.dismiss();
}
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
Jsonfunctions jParser = new Jsonfunctions();
JSONObject json = jParser.getJSONFromUrl(url);
try {
// Getting Array of Contacts
results = json.getJSONArray(TAG_RESULTS);
// looping through All Contacts
for (int i = 0; i < results.length(); i++) {
JSONObject c = results.getJSONObject(i);
id = c.getString(TAG_ID);
name = c.getString(TAG_NAME);
adress = c.getString(TAG_ADRRESS);
latitude = c.getString(TAG_LATITUDE);
latitudeAry.add(c.getString(TAG_LATITUDE).toString());
longitude = c.getString(TAG_lONGITUDE);
latitudeAry.add(c.getString(TAG_lONGITUDE).toString());
distance = c.getString(TAG_DISTANCE);
image = c.getString(TAG_IMAGE);
phone = c.getString(TAG_TELEPHONE);
telphonenumberAry
.add(c.getString(TAG_TELEPHONE).toString());
NameAry.add(c.getString(TAG_NAME).toString());
resourceAry.add(new ResourceClass(point, id, name, adress,
distance, latitude, longitude, phone));
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
if (processDialog.isShowing()) {
processDialog.dismiss();
}
listView.setAdapter(new ASyncAdapter());
listView.setDividerHeight(2);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
Intent details = new Intent(List.this, Details.class);
details.putExtra("position", position + 1);
details.putExtra("name", resourceAry.get(position)
.getName());
details.putExtra("adress", resourceAry.get(position)
.getAdress());
details.putExtra("phone", resourceAry.get(position)
.getTelephone());
details.putExtra("latitudes", latitude);
details.putExtra("longitudes", longitude);
startActivity(details);
}
});
}
}
感谢
答
我刚刚完成了类似的这类要求工作(issue faced on is specified in)
因此,我希望能为您提供合适的解决方案,对你有帮助并节省您的时间。
如果我没有错,你需要填充相同的ListView和下一个20(即21 - 40)字段获得响应服务器API。
在这种情况下,你需要一次又一次地调用服务器API,因为你需要一个事件。假设你添加一个'下一步'按钮,点击你的下一个20场(21 - 40)。
当前在'DoInBackgrd'的ur代码中,每当需要将新记录/字段绑定到ListView时,您都会绑定/设置Adapter(ASyncAdapter)。这不是一个好习惯,它也不会刷新listView中新分配的适配器的字段。
因此,你应该:
- 只需检索/从JSON解析新的Fileds并设置他们的适配器。适配器会通知您的listView关于数据更改,并且listView将刷新其视图。
-
考虑到'ASyncAdapter'是实现ArrayAdapter的自定义适配器,只需将以下内容(从餐厅更改为您的需求的变量类型)方法添加到它。
public void reSet(ArrayList<Resturant> resturantsCache) { //This will clear your current fields/records in adpter clear(); //This will new fields/records in adpter from provided resturantsCache ArrayList. for (Resturant resturant : resturantsCache) { add(resturant); } }
希望,你将能够在提供的方法,以取代变量类型,并用它按你的要求,如果你需要更多的帮助,请提供ASyncAdapter代码。
谢谢。
嗨chanchal你能详细解释一下吗? – harish 2012-03-23 10:59:03
肯定的事情,但会需要你的自定义适配器代码,请你提供相同的。 – 2012-03-24 05:10:52