2016-07-24 6 views
1

Retrofitを使用しており、ユーザーが入力した検索語に基づいてFlickRを照会する必要があります。 Retrofit/RESTの経験が限られているので、正しく設定しておきたいと思っています。任意のチュートリアル、アドバイス、および私のコードの解説をいただければ幸いです。更新プログラムで照会できない

私は正確に何が入力されるべきかわからない「不確かな」アイテムのいくつかにラベルを付けました。 RESTでは、「q」は常にクエリを表すために使用されますか?

日の終わりに、私は画像の結果がGridViewコントロールに表示され、ユーザに選択可能になりたい:

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&tags=<mQuery>&api_key=1c448390199c03a6f2d436c40defd90e&format=json") // 
    Call<List<Photo>> getPhotos(@Query("q") String photoSearchTerm); 
     } 

    } 

答えて

2

ほとんど。あなたはRetrofit 1.9を使用しているようです。 Retrofit 2が利用可能であり、最終的に私は1.9が廃止されると考えているので、今すぐ切り替えることをお勧めします。

RestAdapter restAdapter=new RestAdapter.Builder() 
     .setEndpoint("http://api.flickr.com/services") 
     .setLogLevel(RestAdapter.LogLevel.FULL)//log your request 
     .build(); 
} 

public interface ApiInterface { 
@GET("/rest") // 
void getPhotos(@Query("method") String method, @Query("api_key") String key, @Query ("user_id") String user, @Query("format") String format, @Query("city") String city, Callback<FlickrResponse> callback); 
    } 

FlickrResponseは、期待する応答を表すJavaクラスです。 JSONの例をこれに接続し、必要に応じて結果を微調整することができます:http://www.jsonschema2pojo.org/。まったく正しいものではないが、それがあなたを始めるはずの他の細部があるかもしれない。毎回キーとユーザーIDなどを渡すことを避けたい場合は、リクエストインターセプタを調べることができます。そうすれば、それらをリクエストに挿入するインターセプタを定義し、それらのパラメータをインタフェースから削除することができます。助けのためのhttps://inthecheesefactory.com/blog/retrofit-2.0/en

+0

ありがとう:ここ

は2を改造する移行についていくつかの情報です。私はそれを試していますが、私はあなたが私の質問の写真検索部分を削除したことに気付きました。 https://www.flickr.com/services/api/flickr.photos.search.html – tccpg288

+1

http/RESTについてもう少し学ぶことをお勧めします。 「?」の後に続くものはすべて?クエリパラメータです。 naschは、method = flickr.photos.searchをメソッドパラメータに変換しました。したがって、getPhotos( "flickt.photos.search")を呼び出して同じメソッド値を持つ必要があります。もう1つは、検索の次のフィールドです。私はpostman(ブラウザプラグイン)やカールのように、何が起こっているのかを理解するためにhttpクライアントを使ってテストすることをお勧めします。 – Lxu

+0

http/RESTチュートリアルに関するご意見はありますか?私はそれを少し読んだが、包括的なチュートリアルは有益だろう。 – tccpg288

関連する問題