java - 如何通过 Retrofit 将 Map<String, String> 参数或对象传递给 POST 请求?

标签 java android api retrofit

我在将 Map 参数或对象传递给 Retrofit POST 请求时遇到问题。

我关注 square , kdubb 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) {
    }
});

当我尝试使用此接口(interface)时,我从服务器收到缺少参数的信息:

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

和 map :

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);

问题: 怎么了? 如何将对象传递给请求?

最佳答案

好吧,现在我们可以实现这个东西了(版本 1.5.0)。

@FormUrlEncoded
@POST("/oauth/access_token")
void getToken(
    @FieldMap Map<String, String> params, 
    Callback<FacebookLoginUserResponse> callback
);

关于java - 如何通过 Retrofit 将 Map<String, String> 参数或对象传递给 POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21063873/

相关文章:

javascript - 电话间隙 : uploading file to server using multipart/form-data

android - LayoutInflater 忽略参数?

java - 如何阻止 java replaceAll() 删除反斜杠?

java - Android MPAndroid图表

android - 在 AOSP 中为 Gingerbread 构建 ARMv6

c# - 使用 API 更新现有防火墙规则

javascript - Discord 机器人无法访问 Google 表格并出现错误 请求缺少有效的 API key

java - 如何在没有用户登录的情况下使用 instagrams API 获取我的最新图像?

java - 使用 Java 或 C# 在 Y 轴上进行 Open GL 翻译

Java - 修改列表会修改包含列表的对象