2016-07-11 7 views
0

von einer Wordpress-Website, mit JSON Rest API, erhalten wir die JSON der gesamten Website. Ich möchte den Json der ersten 10 Beiträge aus allen Kategorien für Android laden. Ich verwende Volley, um das JSON-Array zu laden, und es ist nicht möglich, die gesamte Array-Antwort zu laden, da sie riesig ist. Ich möchte die ersten 10 Posts und wenn ich mehr lade, möchte ich den JSON vom 11. Post zum 20. Post. kann ich das tun?JSON von 10 posts von wp json rest api v1 Für Android App

zur Zeit meine url ist wie http://www.example.com/wp-json/posts

ich in folgenden Code am anfordernden

JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, 
      baseUrl, 
      (String) null, 
      new Response.Listener<JSONArray>() { 

       @Override 
       public void onResponse(JSONArray response) { 
        Log.d("json",response.toString()); 
        listRecentPost = parseJsonResponse(response); 

        Log.d("LSN", listRecentPost.isEmpty() + ""); 
        // If any data is avialable 
        if (!listRecentPost.isEmpty()) { 


         postAdapter.setRecentPost(listRecentPost); 
         postAdapter.notifyDataSetChanged(); 

         /* 
          suppose data connection is off so error image and text will show 
         * but when my connection will be okk then i need to disable this image and error text 
         * */ 
         errorImage.setVisibility(View.GONE); 
         errorMsg.setVisibility(View.GONE); 
        } 

        else { 

         errorMsg.setVisibility(View.VISIBLE); 
         errorMsg.setText("No Post Available"); 
        } 

        //disable loading icon 
        swipeRefreshLayout.setRefreshing(false); 
       } 

      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.d("LSN", error.toString() + "VolleyError"); 
      // enable error iamge and text 
      errorImage.setVisibility(View.VISIBLE); 
      errorMsg.setVisibility(View.VISIBLE); 

      if (error instanceof TimeoutError || error instanceof NoConnectionError) { 

       errorMsg.setText(error.toString()); 

      } else if (error instanceof AuthFailureError) { 

       errorMsg.setText(error.toString()); 


      } else if (error instanceof ServerError) { 

       errorMsg.setText(error.toString()); 

      } else if (error instanceof NetworkError) { 
       errorMsg.setText(error.toString()); 

      } else if (error instanceof ParseError) { 

       errorMsg.setText(error.toString()); 
      } 


      //again try to load data after 30 seconds 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        swipeRefreshLayout.setRefreshing(false); 
        swapeRefresh(); 
       } 
      }, 30000); 
     } 

    }); 

Zur Zeit habe ich eine Ausnahme wie com.android.volley.TimeoutError

und was der Parameter requestBody tut in JsonArrayRequest? Warum verwenden wir hier null?

mit Codes zu erklären wird für mich besser sein.

Vielen Dank im Voraus.

Antwort

0

Warum verwenden wir null dort? Da Ihre Anfrage die HTTP-Methode "Get" verwendet, die Argumente über URL übergibt. Wenn Sie die HTTP-Methode "Post" verwenden, würden Sie Ihre Anfragedaten in dieses JSONObject schreiben, damit Volley das an HTTP-Body-Daten anhängen kann.

Sie könnten versuchen, eine benutzerdefinierte RetryPolicy festlegen, da Volley nach 4 Sekunden-Timeouts für repsponse des Wartens - see here

das genaue Problem Fesselung ist irgendwie schwer mit der bereitgestellten Informationen. Ich sehe kein Problem mit Ihrer Anfrage.

In den blauen Bereich geschossen: Argument 3 (String) null, möglicherweise übergeben Sie ein leeres JSON-Objekt.

ich auf jeden Fall in Volley tiefer zu untersuchen, würde versuchen, indem Sie sich über adb Ausführlich:

adb -s shell setprop log.tag.Volley VERBOSE 

auf diese Weise Volley bietet weitere Debug-Informationen in Ihrem LogCat.

Viel Glück

+0

Vielen Dank @hannes, jetzt werden die Beiträge in der Liste geladen. Manchmal wird TimeOutError ausgelöst und dann wird es geladen. Es wird mir eine Freude sein, wenn Sie sagen, warum wir ein Null-Objekt senden, um JSON-Objekt in 3. Parameter anzufordern. Und in der detaillierten Post außer dem Infografik-Bildbeitrag werden andere Bilder geladen. Kannst du mir bitte helfen, Bilder zu optimieren, um schneller zu laden. Ich habe eine Picasso-Bibliothek benutzt. –

+0

Können Sie mir bitte helfen [hier] (http://stackoverflow.com/questions/38312625/loading-large-images-in-textview-using-html-imagegetter-and-picasso-library-in-a) –

+0

Sicher , aber ich kenne Picasso nicht für ImageLoading, für mich wäre die Lösung Volley Image Loader. Es kann mehrere Bilder in Stapeln und so weiter laden. Dazu gibt es sehr schöne Dokumentationen. [Picasso vs Volley] (https://www.bignerdranch.com/blog/solving-the-android-image-loading-problem-volley-vs-picasso/) Ich würde weitere Informationen benötigen ... – Hannes