2012-03-23 86 views
1

我有一個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); 

       } 
      }); 
     } 
    } 

感謝

回答

3

我剛剛完成了類似的這類要求工作(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

相關問題