gpt4 book ai didi

android - Gson 无法转换对象

转载 作者:行者123 更新时间:2023-11-29 20:01:29 25 4
gpt4 key购买 nike

我调用一个请求网络到我的服务器,服务器总是响应一个格式 json,如下所示:

{

"error": 200,
"message": "Login Success",
"message_app": "abcxyz",
"data": {
"client_id": "1423423",
"client_secret": "64646456546"
}
}

只有 jsonObject data 为每种请求包含不同的字段。新响应示例:

{

"error": 200,
"message": "Get product success",
"message_app": "vcxvxcv",
"data": {
"product_title": "Product A",
"product_desc": "This is a description for product A"
}
}

所以我决定让一个通用的类调用 ServerResult 包含一个字段“Object”,这样我就可以将它转换为一个特定的对象。

//ServerResult.class

public class ServerResult {
private int error;
private String message;
private String message_app;
private Object data;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public String getMessageApp() {
return message_app;
}

public void setMessageApp(String messageApp) {
this.message_app = messageApp;
}

public int getError() {
return error;
}

public void setError(int error) {
this.error = error;
}

public Object getData() {
return data;
}

public void setData(Object data) {
this.data = data;
}

public String getMessage_app() {
return message_app;
}

public void setMessage_app(String message_app) {
this.message_app = message_app;
}
}

//客户端.java

public class Client {

private String client_id;
private String client_secret;

public String getClientId() {
return client_id;
}

public void setClientId(String client_id) {
this.client_id = client_id;
}

public String getClientSecret() {
return client_secret;
}

public void setClientSecret(String client_secret) {
this.client_secret = client_secret;
}
}

请求完成后,我通过 GSON 将 json 转换为 ServerResult 对象:

@Override    
public void onResponse(String response) {
Gson gson = new Gson();
ServerResult serverResult = gson.fromJson(response, ServerResult.class); //convert json String to ServerResult object

}

然后将 Data 对象转换为 Client 对象

Client client = (Client)serverResult.getData(); // problem here

记录来自 GSON 的错误:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap 无法转换为 mypackagename.Client

问题与 GSON 有关吗?

最佳答案

不幸的是,它不能那样工作。如您所写,您的 data 字段可能会根据请求包含不同的内容(即作为不同的类)。

Gson 只能看到 ServerResult 中的 object data 字段。Gson 应该如何知道数据对象中“隐藏”了哪种对象(例如您的 Client 类)? Gson 不会检查您代码中的所有可用类,而只是“尝试转换它”。

关于android - Gson 无法转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36258347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com