如何在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中新分配的适配器的字段。

因此,你应该:

  1. 只需检索/从JSON解析新的Fileds并设置他们的适配器。适配器会通知您的listView关于数据更改,并且listView将刷新其视图。
  2. 考虑到'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代码。

谢谢。

+0

嗨chanchal你能详细解释一下吗? – harish 2012-03-23 10:59:03

+0

肯定的事情,但会需要你的自定义适配器代码,请你提供相同的。 – 2012-03-24 05:10:52