2016-07-07 15 views
0

Nun, ich entschuldige mich für nicht so spezifisch und klaren Titel (versucht zu hart für sie), so habe ich diese Funktionsteuern, um eine automatisierte Funktion manuell

public void fetchData(){ 
    dataQuery.setPageSize(10); // fetch 10 items per request 
    final boolean[] firstResponse = {true}; 
    final CountDownLatch latch = new CountDownLatch(1); 

    // a callback of fetching data from server 
    Backendless.Data.of(Note.class).find(dataQuery, new AsyncCallback<BackendlessCollection<Note>>() { 
     @Override 
     public void handleResponse(BackendlessCollection<Note> notes) { // here we have the response of request 

      /// loop for requesting for items until all of them is fetched////// 
      if(firstResponse[0]) 
      { 
       firstResponse[0] =false; 
      } 
      int size = notes.getCurrentPage().size(); 
      if(size > 0) 

       notes.nextPage(this); 

      else 
       latch.countDown(); 

      ////////////////////////////////// 

     /// do whatever I want with the fetched data 


} 

     @Override 
     public void handleFault(BackendlessFault fault) {// here we have the error of request 

      swipeToReload.setRefreshing(false); 
      Toast.makeText(getContext(), "" + fault.getMessage(), Toast.LENGTH_LONG).show(); 

     } 
    }); 
    } 

so jetzt die obige Funktion 10 items pro Anfrage in ein abruft Schleife und diese Schleife läuft, bis alle Daten abgerufen werden, was ich möchte, ist diese Schleife manuell ausgeführt werden (auf einen Button klicken Ich möchte die ersten 10 Elemente laden, dann anstatt es erneut zu verlangen, ich will es manuell arbeiten, holen Sie die Die nächsten 10 Elemente auf Knopf klicken) wenn jemand mich in die richtige Richtung führen kann, dann wird es so hilfreich für mich

Antwort

1

Entfernen Countdown-Latch a nd die Signatur wie folgt ändern:

public void fetchData(int offset) 

Bei der Implementierung, den Code hält die Seitengröße festgelegt, sondern auch hinzufügen:

dataQuery.setOffset(offset); 

, dass die nächste Seite von Daten aus dem angegebenen holen wird Offset. Sie müssen nextPage im Responder nicht aufrufen. Das Ergebnis ist der Block der "pageSize" Datensätze aus dem angegebenen Offset.

+0

vielen Dank für die Antwort, können Sie bitte diese 'dataQuery.setOffset (offset)' erklären? –

+1

Alle vom Server geladenen Objekte sind sequentiell organisiert. Das erste Objekt hat den Offset 0, der zweite hat den Offset 1 und so weiter. Wenn Sie offset mit dataQuery.setOffset setzen, weisen Sie den Server an, die nächste "Seite" von Objekten aus dem angegebenen Offset zu laden. –