[英]How to get inner indexed object from json response in android (java) which use retrofit for rest api calls
我面临从 api 响应的内部对象获取对象的问题。 我的api响应格式如下
{
status: true,
message: success,
result: {
name: demo,
url: mysiet.com
}
}
我创建了两个模型类,如下所示
项目.java
public class Project {
@SerializedName("result")
@Expose
private ProjectData result;
@SerializedName("message")
@Expose
private String message;
@SerializedName("status")
@Expose
private boolean status;
//constructor, setter and getter functions I am skipping
}
项目数据.java
public class ProjectData {
@SerializedName("name")
@Expose
private String name;
@SerializedName("url")
@Expose
private String url;
//constructor, setter and getter functions I am skipping
}
在我的视图模型中,我已将 api 请求发送到服务器,如下所示
final LiveData<Resource<Project>> source = LiveDataReactiveStreams.fromPublisher(
dashboardApi.getProjectData(
"Bearer "+this.authCode,
"applicaion/json"
)
.onErrorReturn(new Function<Throwable, Project>() {
@Override
public Project apply(Throwable throwable) throws Exception {
Project projects = new Project();
projects.setStatus(false);
Log.d( TAG , "projectResource error ");
return projects;
}
})
.map(new Function<Project, Resource<Project>>() {
@Override
public Resource<Project> apply(Project project) throws Exception {
Log.d( TAG , "projectResource full Status "+project.getStatus()); // This retruns correctly
Log.d( TAG , "projectResource full Obj "+project.getResult()); // This is not null hence object works
Log.d( TAG , "projectResource full Obj "+project.getResult().getName()); // This cause error
//The above line cause error
if(project.getStatus() == false){
return Resource.error("projectResource Could not authenticate", null);
}
return Resource.success(project);
}
}).subscribeOn(Schedulers.io())
);
请求发送如下
@POST("myendpoint")
Flowable<Project> getProjectData(
@Header("Authorization") String token,
@Header("Accept") String accept
);
我得到的错误如下
异常无法传递给消费者,因为它已经取消/处置了流,或者异常无处可去。 进一步阅读: https : //github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.AbstractMethodError:抽象方法“java.lang.String com.myapppackage.fca()”
我发布了一个我用来获取内部索引 json 对象值的答案。 我也期待任何其他解决方案作为答案
在模型中,我将结果创建为Object
数据类型,如下所示
@SerializedName("result")
@Expose
private Object result;
在视图模型 Map 函数中,我执行以下操作以获取内部 json 对象
map(new Function<Project, Resource<Project>>() {
@Override
public Resource<Project> apply(Project project) throws Exception {
Gson gson = new Gson();
String projectData = gson.toJson(project.getResult());
// The above code return result index as string {"name": "demo", "url": "mysiet.com"}
try{
JSONObject projectObj = new JSONObject( projectData );// get inner json index as object
project.setName(projectObj.getString("name"));
project.setUrl(projectObj.getString("url"));
} catch (JSONException e) {
Log.d( TAG , "JSONException : "+e.getMessage());
}
if(project.getStatus() == false){
return Resource.error(project.getMessage(), null);
}
return Resource.success(project);
}
})
我想也会有其他解决方案,请随时发布答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.