2017-06-19 26 views
-3

我已经在footerview reclerview中制作了用户界面列表视图和进度条,现在我真的陷入了如何加载更多数据JSON?如何在recyclerview中加载更多逻辑android

第一页该类获取数据JSON:

private void firstPage() { 

     final ProgressDialog progressDialog = new ProgressDialog(Feed_Activity.this); 
     progressDialog.setTitle("Mengambil data"); 
     progressDialog.show(); 
     Log.d(Status.TAG, "dam login fungsi goOAuth"); 

     Call<ResponseBody> token_request; 
     Retrofit retrofit; 
     retrofit = new Retrofit.Builder() 
       .baseUrl(Status.BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     ApiService apiService = retrofit.create(ApiService.class); 
     token_request = apiService.feed(); 

     token_request.enqueue(new Callback<ResponseBody>() { 
      @Override 
      public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 

       Log.d(Status.TAG, "dam error code = " + response.code()); 


       if (response.code() == 200) { 
        try { 

         JSONObject responseObject = new JSONObject(response.body().string()); 
         JSONArray arrayDocs =responseObject.getJSONArray("docs"); 


        for (int i = 0; i < arrayDocs.length(); i++) { 

         //parsing json proccess 

         } catch (JSONException | IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 

      @Override 
      public void onFailure(Call<ResponseBody> call, Throwable t) { 
       t.printStackTrace(); 
       progressDialog.dismiss(); 
      } 

     }); 
    } 

,现在我应该怎么在下一页的负载更做()函数?

private void nextPage() { 

//what must i do in here for load more my json data 

} 

和我的API使用端点这样

https://penawaran.8villages.com/activities/filter?challengeId=*********&limit=10&offset=0 

page 1: limit=10&offset=0 
page 2: limit=10&offset=10 
page 3: limit=10&offset=20 

请帮助我的人,我真的坚持我的工作:(

+0

月有所帮助:https://stackoverflow.com/a/44449772/7874047 –

+0

[Endless RecyclerView with ProgressBar for pagination]的可能重复(https://stackoverflow.com/questions/34431734/endless-recyclerview-with-progressbar-for-pagination) –

回答

1
ArrayList<JSONObject> jsonArrayList=new ArrayList<>(); 
    boolean isLoadMore; 
    int offset=0; 
     @Override 
     public void onBindViewHolder(ContactsAdapter.ViewHolder viewHolder, int position) { 

     if(isLoadMore && position==jsonArrayList.size()-1) 
    { 
    offset+=10; 
    isLoadMore =false; 
    nextPage();//your logic here to hit web service 
    } 

     } 
    //////////////////////////// 

     private void firstPage() { 

      final ProgressDialog progressDialog = new ProgressDialog(Feed_Activity.this); 
      progressDialog.setTitle("Mengambil data"); 
      progressDialog.show(); 
      Log.d(Status.TAG, "dam login fungsi goOAuth"); 

      Call<ResponseBody> token_request; 
      Retrofit retrofit; 
      retrofit = new Retrofit.Builder() 
        .baseUrl(Status.BASE_URL) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build(); 

      ApiService apiService = retrofit.create(ApiService.class); 
      token_request = apiService.feed(); 

      token_request.enqueue(new Callback<ResponseBody>() { 
       @Override 
       public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 

        Log.d(Status.TAG, "dam error code = " + response.code()); 


        if (response.code() == 200) { 
         try { 

          JSONObject responseObject = new JSONObject(response.body().string()); 
          JSONArray arrayDocs =responseObject.getJSONArray("docs"); 

    /*here if lenght of arrayDocs will be more then or equal to limit i.e. 10 in your case then isLoadMore will be true*/ 

     isLoadMore=arrayDocs.length()>=10;//same condition you should be check in nextpage() method each time 


         for (int i = 0; i < arrayDocs.length(); i++) { 

          //parsing json proccess 
          /*add jsonObject into your jsonArrayList and notify your adapter with the same list*/ 
          jsonArrayList.add(arrayDocs.get(i)); 

          } catch (JSONException | IOException e) { 
          e.printStackTrace(); 
         } 
        } 
       } 

       @Override 
       public void onFailure(Call<ResponseBody> call, Throwable t) { 
        t.printStackTrace(); 
        progressDialog.dismiss(); 
       } 

      }); 
     } 
+0

ya how co de在nextPage()? –

+0

您的偏移量将增加10,然后通过传递偏移量通过您的api终点来简单地击中您的Web服务,如您所提到的https://penawaran.8villages.com/activities/filter?challengeId=********* &limit = 10&offset = offset ......这里offset是你在OnBindViewHolder中增加的int变量,如我在前面的答案中给出的那样。谢谢 –