以下是我在 PostMan 中的请求参数
{"assign_id":"1","type":2,"attendance_list":[{"stud_id":"1703","attendanceID":"1","stud_attendance":"4"},{"stud_id":"1704","attendanceID":"2","stud_attendance":"1"},{"stud_id":"1705","attendanceID":"3","stud_attendance":"1"},{"stud_id":"1706","attendanceID":"4","stud_attendance":"1"},{"stud_id":"1707","attendanceID":"5","stud_attendance":"1"},{"stud_id":"1727","attendanceID":"25","stud_attendance":"1"}]}
以下是回复
{"status":1,"msg":"Success"}
现在在我的 Android 应用程序中,我使用 Retrofit 和 Gson。但是通过 Gson,我遇到了一些问题,所以我以jsonObject
and 的形式发送请求参数jsonArrays
。
以下是按下按钮向服务器提交请求时的代码
val jObjRequest = JsonObject()
jObjRequest.addProperty("assign_id",ClassModelInstance.getInstance().classInfo.assignId)
jObjRequest.addProperty("type","2")
val attendanceArray = JsonArray()
for(i in 0 until ClassModelInstance.getInstance().studentInfos.size){
val jsonObject = JsonObject()
jsonObject.addProperty("stud_id",ClassModelInstance.getInstance().studentInfos[i].studId)
jsonObject.addProperty("attendanceID",1)
jsonObject.addProperty("stud_attendance",ClassModelInstance.getInstance().studentInfos[i].studAttendance)
attendanceArray.add(jsonObject)
}
jObjRequest.addProperty("attendance_list",attendanceArray.toString())
Log.i("PritishAttendanceApi2", jObjRequest.toString())
val submitAttendanceInterface = ApiClient.client.create(SubmitAttendanceInterface::class.java)
submitAttendanceInterface.takeAttendance(jObjRequest)
.enqueue(object : Callback<SubmitAttendanceResponse> {
override fun onFailure(call: Call<SubmitAttendanceResponse>, t: Throwable) {
activity?.let { it1 -> ToastMaker.make(it1,getString(R.string.something_went_wrong),Toast.LENGTH_LONG) }
Log.i("Pritish",t.message+"\t"+t.localizedMessage+"\t"+t.printStackTrace()+"\t"+t.cause+"\n"+call.request())
alertDialog.dismiss()
}
override fun onResponse(call: Call<SubmitAttendanceResponse>, response: Response<SubmitAttendanceResponse>) {
if(response.body()?.status.toString().equals("1",true)){
activity?.let { it1 -> ToastMaker.make(it1,response.body()?.msg.toString(),Toast.LENGTH_LONG) }
goToPreviousFragment()
} else {
activity?.let { it1 -> ToastMaker.make(it1,response.body()?.msg.toString(),Toast.LENGTH_LONG) }
}
alertDialog.dismiss()
}
})
这是接口和响应类
interface SubmitAttendanceInterface {
@Headers("Content-Type: application/json")
@POST("timetable/takeAttendance")
fun takeAttendance(@Body body: JsonObject): Call<SubmitAttendanceResponse>
}
data class SubmitAttendanceResponse(
@SerializedName("status")
@Expose
var status: Int? = null,
@SerializedName("msg")
@Expose
var msg: String? = null
)
当我使用登录时,HttpInterceptor
我得到com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path
我在 Stack Overflow 上搜索了上述错误,但答案不符合我的要求
JSON 错误“java.lang.IllegalStateException:预期为 BEGIN_OBJECT 但在第 1 行第 1 列路径 $ 处为 STRING”
“应为 BEGIN_OBJECT,但在第 1 行第 1 列处为 STRING”
我在日志中编辑了 url,因为我不想公开 URL。
根据您的日志和示例数据,您应该将数据“attendance_list”发布为字符串的 json 数组
尝试jObjRequest.add("attendance_list",attendanceArray)
插入jObjRequest.addProperty("attendance_list",attendanceArray.toString())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句