我在MoshiConverterFactory和Retrofit上遇到问题-我无法将POST JSON请求发送到RestAPI,因为它始终会导致错误。我可以使用Multipart成功完成此操作,但是API不支持它,因此这是不可能的...
我的单例对象包含对服务的引用:
Offer.rsOffersAll();
^
TypeError: Offer.rsOffersAll is not a function
注册导致我的ViewModel问题的用户方法:
object Singleton {
val okhttp = OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
.build()
val moshi = Moshi.Builder().build()
val retrofit = Retrofit.Builder()
.baseUrl("https://some_shows_api.com/api/")
.client(okhttp)
.addConverterFactory(MoshiConverterFactory.create())
.build()
val service = retrofit.create(ShowsApiService::class.java)
}
我的界面:
fun registerUser(email: String, password: String) {
val authData = AuthData(email, password)
Singleton.service.register(authData).enqueue(object : Callback<Register> {
override fun onFailure(call: Call<Register>, t: Throwable) {
// some errror implementation
}
override fun onResponse(call: Call<Register>, response: Response<Register>) {
if (response.isSuccessful) {
val body = response.body()
if (body != null) {
// login user
} else {
// some error implementation
}
}
}
})
}
我已经尝试做的事情:在AuthData类的参数上添加data class AuthData(
val email: String,
val password: String
)
interface ShowsApiService {
@Headers("Content-Type: application/json")
@POST("users")
fun register(@Body authData: AuthData): Call<Register>
}
批注(错误仍然相同),以多部分和表单URL编码方式传递数据(API不支持它) 。有人看到我在做什么错吗?我也没有看到一些使用Moshi与Retrofit结合使用的在线示例...非常感谢您的帮助或提示。谢谢!
错误:
@field:Json()
答案 0 :(得分:1)
我也从未使用过Moshi。但是您可以尝试使用此方法。
@POST("users")
fun register(@Body authData: Map<String, String>): Call<Register>
并如下创建地图:
fun registerUser(email: String, password: String) {
val authData = HashMap<String, String>()
authData.put("email", email)
authData.put("password", password)
Singleton.service.register(authData).
...
}