当前位置: 首页 > 知识库问答 >
问题:

java.lang.IllegalStateException:应为BEGIN_OBJECT,但为BEGIN_ARRAY改型,kotlin

欧阳杰
2023-03-14

我正在尝试使用改版在我的应用程序上实现用户注册,但是我一直得到这个错误不确定是什么错误,java.lang.IllegalStateException:应该是BEGIN_OBJECT,但应该是BEGIN_ARRAY

这是邮递员的回复

{
"isSuccessful": true,
"message": "successful",
"user": {
    "name": "Jackline Jazz",
    "email": "jackijazz@gmail.com",
    "phone": "000000"
}

}

我有两个模型类User模型类

data class User(
val name: String,
val email:String,
val phone:String
data class LoginResponse(
val isSuccessful:Boolean,
val message: String,
val user: List<User>
object RetrofitClient {

private const val BASE_URL = "http://10.0.2.2:7000/"

val instance: RetrofitApi by lazy {
    val retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build()

retrofit.create(RetrofitApi::class.java)
}
@FormUrlEncoded
@POST("users/register")
fun userRegister(
    @Field("name") name: String,
    @Field("email") email: String,
    @Field("password") password: String,
    @Field("confirmPassword") confirmPassword: String
): Call<LoginResponse>

和我的register类

RetrofitClient.instance.userRegister(name, email, password, confirmPassword)
            .enqueue(object : Callback<LoginResponse> {
                override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
                    Toast.makeText(applicationContext, t.message, Toast.LENGTH_LONG).show()`
                }

                override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
                    if (response.body()?.isSuccessful!!){

                        val intent = Intent(applicationContext, MainActivity::class.java)

                        startActivity(intent)

                    }else{
                        Toast.makeText(applicationContext, response.body()?.message, Toast.LENGTH_LONG).show()
                    }
                }

            })
    }
}

如果可能的话有人帮我实现Kotlin coroutines

共有1个答案

拓拔泓
2023-03-14

在上一个问题中,您访问了users/loginendpoint。您创建了一个loginresponse来建模来自服务器的响应。在那里,users/login返回一个列表 ,因此必须这样设置loginresponse

现在,您正在访问users/registerendpoint...但您仍在尝试使用loginresponse。从您的JSON中可以看到,您正在从服务器获得不同的JSON,在服务器中只有一个用户。因此,您需要一个不同的响应类(例如,registerresponse)来建模这个新响应:

data class RegisterResponse(
  val isSuccessful:Boolean,
  val message: String,
  val user: User
)

@FormUrlEncoded
@POST("users/register")
fun userRegister(
    @Field("name") name: String,
    @Field("email") email: String,
    @Field("password") password: String,
    @Field("confirmPassword") confirmPassword: String
): Call<RegisterResponse>
 类似资料: