gpt4 book ai didi

java - 改造:处理数组或单个对象时出现问题

转载 作者:行者123 更新时间:2023-11-30 01:58:01 28 4
gpt4 key购买 nike

我一直在关注其他答案,但缺少一个我找不到的步骤,这导致调用成功但数据未被正确解析,因为我进行的第一次调用返回了一个对象列表,但只返回了一个对象全部为空

我的模型.java

    public class MyModel {
@SerializedName("url")
private String mUrl;

@SerializedName("name")
private String mName;

@SerializedName("description")
private String mDescription;
}

MyModelDeserializer.java

这只是检查它的数组或对象,并简单地返回数组

public class MyModelTypeAdapter implements JsonDeserializer<ArrayList<MyModel>>{

@Override
public ArrayList<MyModel> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
ArrayList<MyModel> objects = new ArrayList<>();
if(json.isJsonArray()){
for(JsonElement e : json.getAsJsonArray()){
objects.add((MyModel)context.deserialize(e,MyModel.class));
}
}else if(json.isJsonObject()){
objects.add((MyModel)context.deserialize(json,MyModel.class));
}
return objects;
}
}

一些其他的东西

 Gson gson = new GsonBuilder()
.registerTypeAdapter(new TypeToken<ArrayList<MyModel>>() {}.getType(), new MyModelTypeAdapter())
.create();
restAdapter = new RestAdapter.Builder()
.setEndpoint(BuildConstants.BASE_URL)
.setConverter(new GsonConverter(gson))
.setClient(new OkClient(okHttpClient))
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();

这是让我困惑的部分,我应该把什么作为回调的返回类型

@GET(URLConstants.LIST_URL)
void getData(Callback<ArrayList<MyModel>> callback);

编辑 JSON 数据

{
"places": [
{
"url": "www.google.com",
"name": "Google",
"description": "Search engine"
},
{
"url": "www.Facebook.com",
"name": "Facebook",
"description": "Social Network"
},

{
"url": "www.amazon.com",
"name": "Amazon",
"description": "Shopping"
}
]
}

最佳答案

首先创建一个POJO类来处理json。您可以使用 jsonschema2pojo为你的 json 创建 pojo 类:

public class MyModel {

@Expose
private List<Place> places = new ArrayList<Place>();

/**
*
* @return
* The places
*/
public List<Place> getPlaces() {
return places;
}

/**
*
* @param places
* The places
*/
public void setPlaces(List<Place> places) {
this.places = places;
}

}

public class Place {

@Expose
private String url;
@Expose
private String name;
@Expose
private String description;

/**
*
* @return
* The url
*/
public String getUrl() {
return url;
}

/**
*
* @param url
* The url
*/
public void setUrl(String url) {
this.url = url;
}

/**
*
* @return
* The name
*/
public String getName() {
return name;
}

/**
*
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}

/**
*
* @return
* The description
*/
public String getDescription() {
return description;
}

/**
*
* @param description
* The description
*/
public void setDescription(String description) {
this.description = description;
}

}

接下来像这样创建一个 restadapter:

public class SimpleRestClient {

private SimpleRestApi simpleRestApi;

public SimpleRestClient() {

RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(Constants.BASE_URL)
.build();

simpleRestApi = restAdapter.create(SimpleRestApi.class);

}

public SimpleRestApi getSimpleRestApi() {

return simpleRestApi;

}

}

现在创建 api 接口(interface)。这里我们设置我们的 POJO 类来处理 json 响应:

public interface SimpleRestApi {

@GET("Enter URL")
public void getSimpleResponse(Callback<MyModel> handlerCallback);

}

最后调用如下:

simpleRestApi = new SimpleRestClient().getSimpleRestApi();
simpleRestApi.getSimpleResponse(new Callback<MyModel>() {
@Override
public void success(MyModel responseHandler, Response response) {
// here you can get your url, name and description.
}

@Override
public void failure(RetrofitError error) {
progress.dismiss();
Log.e("CLASS", "JSON: " + error.getCause());
}
});

引用资料:

jsonschema2pojo

A smart way to use retrofit

关于java - 改造:处理数组或单个对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919381/

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