【问题标题】:Expected BEGIN_ARRAY but was BEGIN_OBJECT at line预期为 BEGIN_ARRAY,但在行中为 BEGIN_OBJECT
【发布时间】: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)
        }
    }


}

【问题讨论】:

  • 请先搜索错误信息,然后再提出已经被问过无数次的问题。如果我不会太累,我会关闭它...见右下角,在“相关”下方。

标签: android kotlin retrofit2


【解决方案1】:

这就是问题

val data: List<Data>

遇到同样的问题,我找到的唯一解决方案是

val data: ArrayList&lt;ArrayList&lt;String&gt;&gt;

在第一个总是错误中找不到任何地方如何使用第二个数据类。 然后我得到第一个数组的位置 0,里面是另一个数组,在你的例子中是第二类(数据)的数据。 我希望有人向我们展示许多人遇到的这个问题的真正解决方案,但不明白错误在哪里。 祝你好运。

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 2014-08-01
    • 2015-11-26
    • 2018-03-27
    • 2016-08-20
    • 2019-06-14
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多