如何解决如何从Androidjava中的json响应中获取内部索引对象,该对象对改造api调用使用了改造
我正面临从api响应的内部对象获取对象的问题。我的api响应格式如下所示:
{
status: true,message: success,result: {
name: demo,url: mysiet.com
}
}
我已经创建了两个如下所示的模型类
Project.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
}
ProjectData.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.f.c.a()”
解决方法
我正在发布一个答案,该答案用于获取内部索引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);
}
})
我想还会有其他解决方案,请随时发布答案
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。