2014-01-11 14 views
10

MapパラメータまたはオブジェクトをRetrofit POSTリクエストに渡す際に問題があります。Map <String、String>パラメータまたはオブジェクトをRetrofit経由でPOSTリクエストに渡す方法はありますか?

私はsquarekdubb labsチュートリアル、this threadに従っており、わかりませんでした。

働く私の現在のコード:

public interface FacebookUser { 
    @FormUrlEncoded 
    @POST("/user/login-facebook") 
    void login(
      @Field("fb_access_token") String fbAccessToken, 
      @Field("os") String os, 
      @Field("device") String device, 
      @Field("os_version") String osVersion, 
      @Field("app_version") String appVersion, 
      @Field("online") String online, 
      Callback<FacebookLoginUserResponse> callback 
    ); 
} 

やコード:

RestAdapter restAdapter = new RestAdapter.Builder() 
         .setServer(requestMaker.getUrl()) 
         .build(); 

FacebookUser facebookUser = restAdapter.create(FacebookUser.class); 
facebookUser.login(getFbAccessToken(), 
getString(R.string.config_os), 
Info.getAndroidId(getBaseContext()), 
Build.VERSION.RELEASE, 
     Info.getAppVersionName(getBaseContext()), 
     "" + 1, 
     new Callback<FacebookLoginUserResponse>() { 
    @Override 
    public void success(FacebookLoginUserResponse facebookLoginUserResponse, Response response) { 
    } 

    @Override 
    public void failure(RetrofitError retrofitError) { 
    } 
}); 

を私はパラメータが欠落しているサーバーから受信このインタフェースを使用しようとすると:

public interface FacebookUser { 
    @POST("/user/login-facebook") 
    void login(
      @Body Map<String, String> map, 
      Callback<FacebookLoginUserResponse> callback 
    ); 
} 

地図:

HashMap<String, String> map = new HashMap<String, String>(); 
    map.put("fb_access_token", getFbAccessToken()); 
    map.put("os", "android"); 
    map.put("device", Info.getAndroidId(getBaseContext())); 
    map.put("os_version", Build.VERSION.RELEASE); 
    map.put("app_version", Info.getAppVersionName(getBaseContext())); 
    map.put("online", "" + 1); 

質問: どうしますか? リクエストにオブジェクトを渡すにはどうすればよいですか?

答えて

29

これで、このこと(バージョン1.5.0)を実装できます。

あなたがこの方法をしなければならない改造2.0では
@FormUrlEncoded 
@POST("/oauth/access_token") 
void getToken(
    @FieldMap Map<String, String> params, 
    Callback<FacebookLoginUserResponse> callback 
); 
+0

** RestAdapter restAdapter =新しいRestAdapter.Builder()setEndpoint( "http://192.168.101.55/test")。 build(); **は正しく動作するはずですか?それは(バージョン1.5.0)の権利ですか? –

+1

@LOG_TAGそれは動作するはずです。 –

+1

なぜ改造文書に記載されていないのですか? – jvrodrigues

0

この機能はRetrofit 1.2.2ではまだサポートされていませんが、この機能でマスターブランチから独自のバージョンをコンパイルしたり、次のリリースを待つことができます。

https://github.com/square/retrofit/pull/390

更新:

これは、レトロフィットバージョン1.5.0 で利用可能です! (ref Anton Golovin答え)

12

@FormUrlEncoded 
    @POST(Constant.API_Login) 
    Call<UserLoginPost> userLogin(@FieldMap Map<String, String> params); 
関連する問題