2016-08-20 9 views
1

私はFlickRの写真を問い合わせて、JSON応答を受け取ろうとしています。私はRetrofitを使ってFlickR APIを呼び出しています。私のコードでは、ユーザはテキストを入力します。テキストはEditTextで取得されます。私はこの用語に基づいて照会したい。私はFlickから次のエラーを受け取りました: "パラメータレス検索が無効になっています。代わりにflickr.photos.getRecentを使用してください。"FlickRをタグで検索する

public class MainActivity extends AppCompatActivity { 

private EditText mSearchTerm; 
private Button mRequestButton; 
private String mQuery; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mSearchTerm = (EditText) findViewById(R.id.ediText_search_term); 
    mRequestButton = (Button) findViewById(R.id.request_button); 
    mRequestButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mQuery = mSearchTerm.getText().toString(); 
      HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
      interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
      OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 
      Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl("https://api.flickr.com/services/rest/") 
        .client(client) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build(); 


      ApiInterface apiInterface = retrofit.create(ApiInterface.class); 
      Call<List<Photo>> call = apiInterface.getPhotos(mQuery); 
      call.enqueue(new Callback<List<Photo>>() { 
       @Override 
       public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) { 

       } 

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

       } 
      }); 

     } 
    }); 



} 

//Synchronous vs. Asynchronous 
public interface ApiInterface { 
    @GET("?&method=flickr.photos.search&api_key=1c448390199c03a6f2d436c40defd90e&format=json") // 
    Call<List<Photo>> getPhotos(@Query("q") String photoSearchTerm); 
    } 

} 
+0

Flickr APIのマニュアルは検索しましたか? – RudolphEst

答えて

1

は、あなたの代わりにq@Queryのparamとしてtextを渡すために探している彼らのAPI docsをオフに基づいています。だから、のような:

Call<List<Photo>> getPhotos(@Query("text") String photoSearchTerm);

他のもの:
•あなたのポストからあなたのAPIキーを非表示にしたい場合があります。
onClick()メソッドのコードをif(!TextUtils.isEmpty(mQuery))と折り返し、問題が再発するのを防ぐことができます。 (EditTextにTextChangeWatcherを追加し、EditTextの文字列の長さに基づいて検索ボタンを有効/無効にすることもできます)