2016-06-26 12 views
0

現在、私はRetrofitを使用してAPIからデータを取得しています。しかし、データのフォーマットのような他のフォーマットとは少し異なります。改造を使用して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"]] 

、私は以下のように、私が改造を使用したい場合は、リストを取得するために、値を解析するために最善の解決策をお願いしたいです

"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" 

上記のファイルの内容がGoogleAutoComplete APIは、下のリンクを私のために返されたデータである。

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

私は以下のようにコードを実装するが、それはよくないです:

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

以下、私が使用しています応答コードです:

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) { 

     } 

    }); 

しかし、私のために戻さresponsebodyはnullです。 この場合私を助けてください。おかげさまで 次のように

+0

この文句を言わないと思うコンパイル。 'getAutoComplete()'の中カッコの数が正しくありません。あなたが受け取ったレスポンスコードも投稿してください。あなたが成功またはエラーを呼び出すかどうか –

答えて

1

は、インターフェイスにAPIエンドポイントを定義します。以下のように

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

は、ネットワーク要求を行います。

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; 
} 
関連する問題