2016-06-26 11 views
0

Derzeit verwende ich Retrofit, um Daten von API zu erhalten. Aber das Format der Daten ist ein bisschen anders aus anderem Format wie:Verwenden von Retrofit zum Lesen von String-Inhalt von api

["tayl",["taylor swift","taylor swift kanye west","taylor swift famous","taylor swift mp3","taylor lautner","taylor swift wiki","taylor swift 1989","taylor hill","taylor swift 2016","taylor kinney"]] 

Also, ich für die beste Lösung fragen will Werte zu analysieren, wie unten eine Liste zu bekommen, wenn ich Nachrüstung verwenden mag:

"taylor swift","taylor swift kanye west","taylor swift famous","taylor swift mp3","taylor lautner","taylor swift wiki","taylor swift 1989","taylor hill","taylor swift 2016","taylor kinney" 

der Inhalt der Datei über die Daten, die GoogleAutoComplete Api für mich mit dem unten stehenden Link zurück:

http://suggestqueries.google.com/complete/search?client=firefox&q=tayl 

ich den Code wie unten ausgeführt, aber es ist nicht gut:

@Headers({ 
      "Accept: application/json", 
      "Content-Type: application/json; charset=UTF-8" 
    }) 
    @GET("complete/search?") 
    Call<ResponseBody> getAutoComplete(@Query(@Query("q")String query); 

Die unten ist Response-Code, die ich benutze:

autoCompleteCall = googleApi.getAutoComplete(client, keyword); 
    autoCompleteCall.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 

      if (response != null && 
        response.body() != null) { 
        System.out.println(" String response======= " + response.body().toString()); 
       return; 
      } 

     } 

     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) { 

     } 

    }); 

Aber die Responsezurück für mich null ist. Bitte helfen Sie mir in diesem Fall. Danke.

+0

Dies wird nicht kompilieren, denke ich. Falsche Anzahl von geschweiften Klammern in 'getAutoComplete()'. Veröffentlichen Sie auch den Antwortcode, den Sie erhalten. Egal, ob Sie Erfolg oder Fehler erhalten –

Antwort

1

Definieren Sie die API-Endpunkt in einer Schnittstelle wie folgt:

@GET("complete/search") 
Call<ResponseBody> getAutoComplete(
     @Query("client") String client, 
     @Query("q") String query); 

die Netzwerkanfrage Stellen wie folgt:

Call<ResponseBody> call = service.getAutoComplete("firefox", "tayl"); 

call.enqueue(new Callback<ResponseBody>() { 
    @Override 
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
     if (response.isSuccessful()) { 
      ResponseBody body = response.body(); 
      try { 
       // autocompleteOptions => ["tayl",["taylor swift","taylor lautner",... 
       String autocompleteOptions = body.string(); 
       JSONArray jsonArray = new JSONArray(autocompleteOptions).getJSONArray(1); 
       // list => "taylor swift","taylor lautner",... 
       ArrayList<String> list = GetAutocompleteOptions(jsonArray); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

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

private ArrayList<String> GetAutocompleteOptions(JSONArray jsonArray) throws JSONException { 
    ArrayList<String> list = new ArrayList<>(); 
    if (jsonArray != null) { 
     for (int i = 0; i < jsonArray.length(); i++) { 
      list.add(jsonArray.get(i).toString()); 
     } 
    } 
    return list; 
} 
Verwandte Themen