【发布时间】:2020-09-15 22:03:14
【问题描述】:
我是 android 开发的新手,在创建应用程序时,当我尝试发送新的 POST 请求时遇到这样的错误。我希望能快速回复,指出我的代码中的错误和潜在的帮助。
错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ing, PID: 13835
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 29 path $.data
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:504)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 29 path $.data
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
...
数据类别
data class Employee (
val status: String,
val data: List<Data>
)
data class Data(
val id: String,
@SerializedName("employee_name")
val employeeName: String,
@SerializedName("employee_salary")
val employeeSalary: String,
@SerializedName("employee_age")
val employeeAge: String,
@SerializedName("profile_image")
val profileImage: String
)
界面
@POST("create")
suspend fun createEmployee(@Body employee: Employee):Employee
活动(无 ui 元素)
class AddEmployeeActivity : AppCompatActivity() {
@Inject
lateinit var factory: ViewModelProvider.Factory
@Inject
lateinit var viewModel: ViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_add_employee)
DaggerComponent.create().inject(this)
//Inputs
val id:String
val name:String
val age:String
val salary:String
add.setOnClickListener {
val data:List<Data> = addEmployee(id, name, age, salary)
val newEmployee = Employee("success", data)
try{
viewModel = ViewModelProvider(this, factory).get(ViewModel::class.java)
viewModel.createEmployee(newEmployee)
Toast.makeText(this, "Success!", Toast.LENGTH_LONG)
}catch (e:Exception){
Toast.makeText(this, "Failure!", Toast.LENGTH_LONG)
}
startActivity(intent)
}
}
}
【问题讨论】:
-
请先搜索错误信息,然后再提出已经被问过无数次的问题。如果我不会太累,我会关闭它...见右下角,在“相关”下方。