2017-08-24 7 views
0

J'applique la mise à niveau dans mon application Android pour les appels dans mon API. J'ai dans un appel dans mon API de nombreux résultats, puis j'ai décidé de créer une pagination dans l'API. Le retour sur mon API d'appel est celui-ci:Appel de l'API avec pagination en utilisant Retrofit sur Android

{ 
    "meta": { 
     "server": "localhost", 
     "offset": "1", 
     "limit": "1", 
     "recordCount": 1 
    }, 
    "records": [ 
     { 
      "userName": "ricardo" 
     } 
    ] 
} 

Call<BaseResponse<User>> user = userResource.getListUser(
       authController.getTokenHeader(), 
       limit, 
       offset 
       ); 

     user.enqueue(new Callback<BaseResponse<User>>() { 
      @Override 
      public void onResponse(Response<BaseResponse<User>> response, Retrofit retrofit) { 
       if (response.isSuccess()) { 
        New Call Api Again if more results 
      } 

      @Override 
      public void onFailure(Throwable t) {} 
     }); 

Quand je change le dans l'appel « décalage » I « étape » à la page suivante.

Y a-t-il une méthode d'adaptation qui fait cette logique pour moi? Sinon, comment pourrais-je implémenter cette logique?

while (callApi){ 
      UserResource userResource = getRetrofit().create(UserResource.class); 
      Call<BaseResponse<User>> user = userResource.getListUsers(
        authController.getTokenHeader(), 
        ids, 
        cdCode, 
        limit, 
        offset 
      ); 

      user.enqueue(new Callback<BaseResponse<User>>() { 
       @Override 
       public void onResponse(Response<BaseResponse<User>> response, Retrofit retrofit) { 
        if (response.isSuccess()) { 

         offset = offset+offset; 

          callInvoice = false; 
        } 
       } 

       @Override 
       public void onFailure(Throwable t) { 
       } 
      }); 
     } 
+0

vous pouvez ajouter params dans api comme moi donner résultat de 1 à 20, dans un autre api 21 à 40, etc. –

Répondre

0

Créer dans api pagination. Appel selon la page, Pendant que votre listview défile, appelez la page si le service ne l'appelle pas.

mOrdersView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
      @Override 
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
       super.onScrollStateChanged(recyclerView, newState); 
      } 

      @Override 
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
       super.onScrolled(recyclerView, dx, dy); 
       int visibleItemCount = layoutManager.getChildCount(); 
       int totalItemCount = layoutManager.getItemCount(); 
       int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); 

       if (!isLoading && !isLastPage) { 
        if (visibleItemCount + firstVisibleItemPosition >= totalItemCount 
          && firstVisibleItemPosition >= 0 
          && totalItemCount >= CommonUtils.pageLimit) { 
         getNextPage(); 
        } 
       } 
      } 
     }); 

Vous pouvez mettre en œuvre écoute de défilement comme celui-ci

+0

Je pense que très valable, mais je Je n'utilise pas recyclerView pour remplir mon adaptateur, puis effectuer des appels d'API. Je pense que je pourrais mettre cet appel à l'intérieur d'un certain temps. Mais pendant ce temps, le code ne fonctionne pas correctement et n'entrera pas dans la file d'attente, pouvez-vous me dire quelle explication? – Duk

+0

vous pouvez utiliser setOnScrollListener pour listview –