java - 预期 begin_array 但在第 1 行第 1 列是字符串?
问题描述
我正在构建一个简单的应用程序,我们可以在其中通过 api 注册,注册效果很好,我看到当我在邮递员上发出 get 请求时创建了新用户。但是当我按下注册按钮时出现此错误消息:“预期为 begin_array 但在第 1 行第 1 列是字符串”
这是我的接口 api、retrofitClient 和 SignUpActivity 逻辑的代码:
接口接口:
接口 API {
@FormUrlEncoded
@POST("user")
fun createUser(
@Field("login") name: String,
@Field("mail") email: String,
@Field("password") password: String,
):Call<DefaultResponses>
@FormUrlEncoded
@POST("user/login")
fun loginUser(
@Field("mail") email: String,
@Field("password") password: String,
):Call<DefaultResponses>
}
请注意,我尝试在 @FormUrlEncoded 之前添加 @Headers("Content-Type: application/json") 但它没有改变任何东西
改造客户端代码:
object retrofitClient {
private const val BASE__URL = "http://172.20.176.1:8080/"
private val okHttpClient = OkHttpClient.Builder()
.addInterceptor{chain ->
val original = chain.request()
val requestBuilder = original.newBuilder()
.method(original.method(), original.body())
val request = requestBuilder.build()
chain.proceed(request)
}.build()
val instance: api by lazy{
val gson = GsonBuilder().setLenient().create()
val retrofit = Retrofit.Builder()
.baseUrl(BASE__URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build()
retrofit.create(api::class.java)
}
}
注册活动逻辑:
class secondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val SignUpButton = findViewById(R.id.enregistrer) as Button
val nameId = findViewById<TextView>(R.id.name)
val emailId = findViewById<TextView>(R.id.email)
val passwordId = findViewById<TextView>(R.id.password)
SignUpButton.setOnClickListener {
val name = nameId.text.toString().trim()
val email = emailId.text.toString().trim()
val password = passwordId.text.toString().trim()
if(name.isEmpty()){
nameId.error = "Name required"
nameId.requestFocus()
return@setOnClickListener
}
if(email.isEmpty()){
emailId.error = "Email required"
emailId.requestFocus()
return@setOnClickListener
}
if(password.isEmpty()){
passwordId.error = "Password required"
passwordId.requestFocus()
return@setOnClickListener
}
retrofitClient.instance.createUser(name , email , password)
.enqueue(object: Callback<DefaultResponses>{
override fun onResponse(call: Call<DefaultResponses>, response: Response<DefaultResponses>) {
Toast.makeText(applicationContext, response.body()?.message, Toast.LENGTH_LONG).show()
}
override fun onFailure(call: Call<DefaultResponses>, t: Throwable) {
Toast.makeText(applicationContext, t.message, Toast.LENGTH_LONG).show()
}
})
}
}
}
您知道如何避免出现的消息吗?
请记住,我的用户创建正在运行,我在 api 中检索我的数据!
解决方案
推荐阅读
- python - python中顶点之间的着色
- c# - 如何在 c# windows 窗体上创建静音按钮
- javascript - 结合过滤器和地图
- javascript - 如何从 console.log(ui) 中检索 Id
- mysql - 如果相同的单词重复,MYSQL 全文搜索结果评分会更高
- java - 单击后不显示新图像
- error-handling - 如何在 BIgQuery 中创建表?
- spring - 使用 API 和发送电子邮件的集成测试
- sql-server - SQL Server如何避免Ctrl-E执行意外?
- python - 迭代解包一个元组?我想传递给函数中的 2 个参数的浮点元组