我对gson反序列化有问题
是我儿子
[{"compteurdi":"00","numero":"DI00","message":"LOLOL","equipement":"LE TRUC","etat":"DEMANDER","demandeur":"MOI","datedi":"020202"}]
我的kotlin小工具
"http://10.0.2.2:8080/WebApi/V1/index.php?op=getdis".httpGet().responseObject(DI.Deserializer())
{ request, response, result ->
val(disw,err) = result
println(err)
disw?.forEach { DI ->
dis.add(DI)
}
adapter = DiAdapter(dis,this )
val recyclerView = findViewById(R.id.di_recycler_view) as RecyclerView
recyclerView.layoutManager = LinearLayoutManager(this) as RecyclerView.LayoutManager?
recyclerView.adapter = adapter
}
还有我的反序列化函数
class Deserializer:ResponseDeserializable<Array<DI>>{
override fun deserialize(content: String): Array<DI>? = Gson().fromJson(content,Array<DI>::class.java)
}
我有这个错误
I/System.out: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $
我不明白什么是错误的,我真的觉得一切都是正确的,我做了多次不同的测试。
你能帮助我吗。
您的json响应是数组,您可以定义基于字符串的方式来显示错误。
您的json出现错误将json数据粘贴到此链接中显示错误。。http://www.jsonschema2pojo.org/
试着用它来改造api集成。
将以下依赖项添加到应用程序级渐变文件中。
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
在为api响应生成pojo类之后。。
public class ResponseUserData{
@SerializedName("datedi")
private String datedi;
@SerializedName("numero")
private String numero;
@SerializedName("equipement")
private String equipement;
@SerializedName("compteurdi")
private String compteurdi;
@SerializedName("demandeur")
private String demandeur;
@SerializedName("message")
private String message;
@SerializedName("etat")
private String etat;
public void setDatedi(String datedi){
this.datedi = datedi;
}
public String getDatedi(){
return datedi;
}
public void setNumero(String numero){
this.numero = numero;
}
public String getNumero(){
return numero;
}
public void setEquipement(String equipement){
this.equipement = equipement;
}
public String getEquipement(){
return equipement;
}
public void setCompteurdi(String compteurdi){
this.compteurdi = compteurdi;
}
public String getCompteurdi(){
return compteurdi;
}
public void setDemandeur(String demandeur){
this.demandeur = demandeur;
}
public String getDemandeur(){
return demandeur;
}
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
return message;
}
public void setEtat(String etat){
this.etat = etat;
}
public String getEtat(){
return etat;
}
@Override
public String toString(){
return
"ResponseUserData{" +
"datedi = '" + datedi + '\'' +
",numero = '" + numero + '\'' +
",equipement = '" + equipement + '\'' +
",compteurdi = '" + compteurdi + '\'' +
",demandeur = '" + demandeur + '\'' +
",message = '" + message + '\'' +
",etat = '" + etat + '\'' +
"}";
}
}
改造对象创建...
class ApiClient {
companion object {
val BASE_URL = "https://simplifiedcoding.net/demos/"
var retrofit: Retrofit? = null
fun getClient(): Retrofit? {
if (retrofit == null) {
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder().apply {
readTimeout(20, TimeUnit.SECONDS)
writeTimeout(20, TimeUnit.SECONDS)
connectTimeout(20, TimeUnit.SECONDS)
addInterceptor(interceptor)
addInterceptor { chain ->
var request = chain.request()
request = request.newBuilder()
.build()
val response = chain.proceed(request)
response
}
}
retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client.build())
.addConverterFactory(GsonConverterFactory.create())
.build()
}
return retrofit
}
}
}
为api调用生成接口后。。
interface ApiInterface {
@GET(NetworkConstant.DATA)
fun getData(): Call<List<Hero>> // define your response class
}
将api调用到片段或活动中。。
private fun getHeroData() {
val dialog= ProgressDialog(mContext)
showProgress(dialog)
var apiInterface: ApiInterface = ApiClient.getClient()!!.create(ApiInterface::class.java)
var hero: Call<List<Hero>>
hero = apiInterface.getData()
hero.enqueue(object : Callback<List<Hero>> {
override fun onFailure(call: Call<List<Hero>>?, t: Throwable?) {
closeDialog(dialog)
Toast.makeText(mContext, t?.message, Toast.LENGTH_SHORT).show()
Log.d("Error:::",t?.message)
}
override fun onResponse(call: Call<List<Hero>>?, response: Response<List<Hero>>?) {
mHeroDataList.clear()
if (response != null && response.isSuccessful && response.body() != null) {
closeDialog(dialog)
mHeroDataList .addAll(response.body()!!)
setAdapter(mHeroDataList)
}
}
})
}
当我只收到列表中的一个项目时,就会出现这个错误。我在服务器端REST Web服务中使用Jersey,只有当列表返回一个元素时,以及当它有但当它有多个异常时,它工作得非常完美,我就是这样做的: Jersey为什么不发送包含一个项目的列表?是泽西岛的虫子吗?有没有办法让它始终序列化为数组? 这是web服务返回0元素时的JSON数据: 这是web服务返回1个元素时的JSON数据: 当web服务返回超过1
我试图使用GSON解析一些非常简单的JSON。这是我的代码: 以下是从url返回的JSON: 我得到了一个例外: 有什么想法吗?我是格森的新手。
这个错误又回来了! 我是改装的初学者,我看过这篇文章:改装:预期BEGIN_OBJECT但BEGIN_ARRAY 但是即使我试着让它适应我的模型,我仍然不能让它工作。所以我的错误是: 我得到的是: 解析类的属性: IoTGenericDevice子类的属性: 改装电话: 经理:
我试图将JSON字符串转换为HashMap。下面是我的一些代码: 在这些行的最后一行(我在其中设置数据)抛出异常。 JSON字符串是 {"body":"body","start Date":"2014-05-30 11:00:00","endDate":"2014-05-30 12:00:00","位置":"位置","主题":"主题!"} 我得到的例外是 线程“main”java中出现异常。朗,反
我想对我的数组使用。 提前致谢
我知道以前有人问过很多这个问题,但在我的情况下,我找不到解决办法。我请求获得关于POJO(电影)列表的json回复 虽然这是我第一次使用改型,但我在标题中遇到了问题。我正在创建的url是正确的,下面是响应的示例: 这是我的模特 } 我的@GET 我的数据请求类 最后,我想在我的主要活动中做些什么