Android改造,序列化POST参数

标签 android retrofit okhttp

我正在使用 Retrofit 来发布表单数据并接收回 XML。到目前为止,我的工作正常,但我想做一些改变。这是我现有的代码(并且有效):

这是我的界面

public interface SignupUser
{
      @FormUrlEncoded
      @POST("/createaccount.cfm")
      SignupServerResponse signup(@Field("e") String email, @Field("p") String password);
}

这是调用 api 的代码(同样,这工作正常,我将在下面解释我想要更改的内容)

SignUpDetails mDeets; // this gets initialize and set somewhere else


RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint("http://myurl.com")
            .setConverter(new SimpleXMLConverter()).build(); // the response is xml, that works fine

SignupUser service = restAdapter.create(SignupUser.class);

SignupServerResponse res = service.signup(mDeets.getE(), mDeets.getP());

如何才能将 SignUpDetails 对象直接传递给 signup() 方法,而不是传递单独的字符串?当我更改 signup() 的构造函数以接受 SignUpdetails 对象(见下文)并将我的 SignUpDetails 对象传入时,我收到一条错误消息

No Retrofit Annotation Found

这是我想定义接口(interface)的方式

public interface SignupUser
{
        @FormUrlEncoded
        @POST("/createaccount.cfm")
        SignupServerResponse signup(SignUpDetails deets);
}

然后像这样调用它(而不是传递所有那些参数)

SignupServerResponse res = service.signup(mDeets);

我尝试在 SignUpDetails 类中的每个变量上方添加 @Field,但这也不起作用(编译错误)

最佳答案

在您的界面上为 deets 参数使用 @Body 注释:

@POST("/createaccount.cfm")
SignupServerResponse signup(@Body SignUpDetails deets);

这应该将 SignUpDetails 转换为 XML(因为您在适配器上使用了 xml 转换器)。 然后由您负责在服务器上解析 XML 请求正文。

关于Android改造,序列化POST参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27012270/

相关文章:

android - AppCompatEditText 安卓 :digits not working?

android - 如何使用 Retrofit + RX 实现 WebSocket

java - 如何使用Guava缓存HTTP响应? (没有线程被阻塞)

android - 无法弄清楚在 OkHttp 的 onResponse 方法中要检查什么

android - 如何在Android中使用okhttp库向api(http post)添加参数

android - 在 Android Studio 上在上次编辑的文件和当前工作的文件之间切换的键盘快捷键

Android 在后台重启应用程序

android - Unresolved reference 改造2

android: imageview 里面的按钮

android - 如果没有 @Inject 构造函数或来自 @Provides- 或 @Produces- 注释的方法,则不能提供改造