2016-07-24 9 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는 flickr.photos.search 메소드를 메소드 매개 변수로 변환했습니다. 따라서 getPhotos ("flickt.photos.search")를 호출하여 동일한 메소드 값을 가져야합니다. 다른 하나는 검색의 다음 필드입니다. postman (브라우저 플러그인)이나 컬처럼 http 클라이언트를 사용하여 진행 상황을 이해할 수 있는지 테스트 해 보는 것이 좋습니다. – Lxu

+0

http/REST 튜토리얼에 대한 권장 사항이 있습니까? 나는 그것에 대해 조금 읽었지만 포괄적 인 튜토리얼은 유익 할 것이다. – tccpg288

관련 문제