服务器JSON数据显示在活动中使用改造。JSON数据通过gson转换。
给错误:"java.lang.IllegalState异常:预期BEGIN_ARRAY但BEGIN_OBJECT在第1行第2列路径$"
JSON格式:
{"success":1,"company":[{"Cmp_Id":"1","Cmp_Name":"ABC","GSTIN":"AAAA"}]}
代码:
class Company {
//@SerializedName("Cmp_Id")
var Cmp_Id : Int = 0
//@SerializedName("success")
//val success : String = ""
//@SerializedName("Cmp_Name")
var Cmp_Name : String? = ""
//@SerializedName("GSTIN")
var GSTIN : String? = ""
}
class CompanyList {
val success : String = ""
lateinit var company : ArrayList<Company>
}
interface APIInterface {
@GET("Company.php")
fun getCompanyData() : Observable<List<CompanyList>>
}
object APIClient {
val BASE_URL = "http://10.0.2.2/"
var retrofit:Retrofit? = null
val apIClient:Retrofit?
get() {
if (retrofit == null)
{
retrofit = Retrofit.Builder().
baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
return retrofit
}
}
主要活动。kt
private fun fetchData(){
/* compositeDisposable.add(api.getCompanyData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { companyList-> displayData(companyList)
}
)*/
val retrofit = APIClient.apIClient
if (retrofit != null) {
api = retrofit.create(APIInterface::class.java)
}
api.getCompanyData()
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ companyAdapter.setCompany(it.component1().company)
},{
Toast.makeText(applicationContext, it.message, Toast.LENGTH_SHORT).show()
})
}
改造接口:
interface APIInterface {
@GET("Company.php")
fun getCompanyData() : Observable<List<CompanyList>>
}
提示您需要一个公司列表
。但是,您收到的json是一个公司列表
。这就是你得到的gson错误告诉你的——应该以一个数组开始,但它是一个对象。
将改造接口更改为:
interface APIInterface {
@GET("Company.php")
fun getCompanyData() : Observable<CompanyList>
}
将提示Reformation,您需要一个类型为CompanyList
的单一对象,这应该适用于您发布的json。
问题内容: 我有一个JSON,它可以是单个对象或相同对象的数组。有没有一种方法可以使用Gson解析此数据,从而区分单个对象还是数组? 我目前唯一的解决方案是手动解析json并用try catch包围它。首先,我将尝试将其解析为单个对象,如果失败,它将引发异常,然后尝试将其解析为数组。 我不想手动解析它……那将使我永远。这是正在发生的事情的想法。 这是可以是数组或单个对象的对象。 然后在与json响
问题内容: 我有一个像这样的JSON对象: 并尝试与Gson解析: 但是“ responceBean”始终为“ null” 这是所有其他类: 这是我的最新尝试。我不知何故找不到正确的方法。任何帮助将不胜感激。 问题答案: 您的 JSON模型与您的对象模型不匹配 。 您需要一个中间层来填补空白: TypeAdapter 。 而且,没有用户的命名信息。 最后是名称不匹配:JSON中的“ worklog
我有一个这样的JSON文件: 如何使用Gson仅解析“数据”部分?我的想法是将JSON读入地图,然后用我在GSON中的键“数据”解析普通JSON内容。我能做些更优雅的事吗?
问题内容: 我试图从JSON数组中获取每个JSON对象。我通过HTTP发布获得此数据。 我知道我的数据是什么样的: 我的示例代码和结构如下所示: 我不确定如何遍历JSON数组并获取JSON对象,然后仅使用JSON对象。 问题答案: 试试这个作为您的结构, 您的名称不正确,顶层名称也不正确。解码为a之后,您可以遍历切片以获取每个切片
问题内容: 我有一个像这样的JSON文件: 在文件具有根元素之前,我将使用: 代码,但我不认为如何将类编码为根元素是一个数组。 我试过使用: 与: 但是还没有运气。使用这种方法我还能怎么读呢? PS我有这个工作使用: 但是我更想知道如何使用这两种方法(如果可能)。 问题答案: 问题是由放置在数组中的JSON对象(在 每种 情况下)的末尾逗号引起的: 如果删除它们,您的数据将成为 和 应该工作正常。
附言:我用这个来工作: 但我更希望知道如何做到这一点(如果可能的话)与这两种方法。