gpt4 book ai didi

java - Android GSON - 使用 JSON 结构化对象的模板

转载 作者:行者123 更新时间:2023-12-01 12:22:51 25 4
gpt4 key购买 nike

我的服务器响应 JSON 对象,始终包含相同的结构:

[int id, Error error, T result] 其中 result 是一种类型,具体取决于所调用的 JSON 方法。我正在尝试使用 GSON 进行反序列化,但在使用泛型时似乎遇到了问题。

private <T> T executeRequest(String methodName, Object[] params,
Class<T> resultType) throws HttpException, IOException {
final Gson gson = buildGson();
final URL url = new URL(WEB_URL + methodName);


final ZenfolioRequest request = new ZenfolioRequest();
request.setMethod(methodName);
request.setId(getNextRequestId());
request.setParams(params);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(POST);
connection.setRequestProperty(USER_AGENT_PROPERTY, AGENT_NAME);
connection.setRequestProperty(CONTENT_TYPE, APPLICATION_JSON);
connection.setRequestProperty(ACCEPT, APPLICATION_JSON);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setChunkedStreamingMode(0);
connection.connect();

final String toSend = gson.toJson(request);
connection.getOutputStream().write(toSend.getBytes());
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {

final InputStream in = new BufferedInputStream(
connection.getInputStream());

//String response = readResponseString(in);

final T result = gson.fromJson(new InputStreamReader(in, UTF_8),
resultType);
return result;
} else {
throw new HttpException();
}

}

示例方法:

@Override
public ZenfolioResponse<AuthChallenge> getChallenge(String loginName) {

try {
final String methodName = "GetChallenge";
return executeRequest(methodName, new Object[] { loginName },
new ZenfolioResponse<AuthChallenge>().getClass());
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return null;
}


public class ZenfolioResponse<T>{

@SerializedName("id")
int id;
@SerializedName("error")
Error error;
@SerializedName("result")
T result;

public T getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
public Error getError() {
return error;
}
public void setError(Error error) {
this.error = error;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

}

问题是对象 ZenfolioResponse 未正确填充结果正文。它不是类型化的,它是一个对象实例而不是 AuthChallenge 类型。

有人对如何调整这个有任何提示吗?

最佳答案

尝试使用 GSON 库中的 TypeToken。它将帮助您解析泛型类型。我在这里找到了例子: http://www.studytrails.com/java/json/java-google-json-serializing-classes-with-generic-type.jsp

关于java - Android GSON - 使用 JSON 结构化对象的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547655/

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