2016-08-20 4 views
1

Ich versuche, FlickR-Fotos abzufragen und eine JSON-Antwort zu erhalten. Ich benutze Retrofit, um den Aufruf der FlickR API zu machen. In meinem Code gibt der Benutzer Text ein, der über einen EditText erfasst wird. Ich möchte basierend auf diesem Begriff abfragen. Ich erhalte den folgenden Fehler von Flick: "Die parameterlose Suche wurde deaktiviert. Bitte verwenden Sie stattdessen flickr.photos.getRecent." statt qSuche FlickR Fotos nach Tag

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

Haben Sie die Flickr-API-Dokumentation durchsucht? – RudolphEst

Antwort

1

Basiert weg von ihren API docs Sie suchen text als @Query param zu übergeben. So wie:

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

Sonstiges:
• Vielleicht möchten Sie Ihre API-Schlüssel von Ihrem Beitrag verstecken.
• Möglicherweise möchten Sie den Code in Ihrer onClick() Methode mit if(!TextUtils.isEmpty(mQuery)) um das Problem nicht erneut auftreten zu wickeln. (Sie könnten Ihrem EditText auch einen TextChangeWatcher hinzufügen und die Suchschaltfläche basierend auf der Länge des Strings im EditText aktivieren oder deaktivieren.

Verwandte Themen