繁体   English   中英

改造在字符串中转换我的字段 Int

[英]Retrofit transform my fields Int in String

我正在尝试使用改造库。 我有我的乐趣:

    @FormUrlEncoded
@POST("login")
fun login(@Field("field1") field1: String,
          @Field("field2") field2: String,
          @Field("field3") field3: Int = 0

): Observable<String>

以及我的改造对象的定义:

Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl("")
                .client(get())
                .build()

 retrofit.create(RestApi::class.java)
            .login(UserManager.username, UserManager.password, editextToken.text.toString().toInt())
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(

                    {

                        updateUiLogin()


                        val token = JwtManager.decodeTokenClaims(it)
                        UserManager.jwtToken = it

                        toast("Connexion réussis")

                    },
                    { e ->

                        e as HttpException
                        updateUiLogin()

                        toast(R.string.an_error_occured)
                        Log.w(TAG, e.message())
                    }
            )

但是当我做我的请求时,我的“field3”字段被作为字符串接收到服务器。

在此处输入图片说明

我做的不是被转换为 String 吗?

谢谢

这是因为@FormUrlEncoded 和@Field。 如果我像这样保存我的用户:

@POST("users")
@FormUrlEncoded
Call<User> registerFormUser(@Field("name") String name,
                            @Field("verified_acc") boolean verified_acc,
                            @Field("points") int points);

那么 JSON 结果将是:

{
    "name": "Robert",
    "verified_acc": "false",
    "points": "0",
    "id": 8
}

所以我的 boolean 和 int 值现在是字符串。

但是如果你像这样保存它:

@POST("users")
Call<User> registerUser(@Body User user);

那么 JSON 结果将是:

{
    "id": 9,
    "name": "George",
    "points": 0,
    "verified_acc": false
}

第二种方法的唯一问题是它按字母顺序更改顺序。 如果您对此没有问题,则可以在不将字段转换为字符串的情况下保存它。

我创建了一个这样的对象:

data class UserLogin(val username: String, val password: String, val code: Int = 0)

并使它

@POST("login")
fun login(@Body user: UserLogin

): Observable<String>

把而不是 int - long。

例子:

@Field("_auth_code") authCode: long = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM