我似乎不知道如何让android注释rest客户端工作我有两个主要问题。
a)如何解析通用json响应并获取有意义的密钥
b)如何增加参数
对于第一个问题,所有的响应都以json字符串的形式返回,格式如下
{“成功”:,“消息”:,“数据”:{}
其中success is boolean消息是一个字符串,数据将是我要解析的主要数据,可能是一个布尔值、一个数组、一个字符串或一个int
我很确定我需要拦截响应并处理代码,但我不确定如何做到这一点
让我们用一个像这样的真实反应
{“success”:true,“message”:“random message”,“data”:{“profile”:{“id”:“44”,“user-id”:“44”,“name”:“matt”,“username”:“mitch”,“icon”:“b1da7ae15027b7d64211c158d64f3220.png”,“med”:“2a3df53fb39d18b5edbd0b93688fe4a.png”,“map”:“b7ffedd1f456ca4bc8ca748ba34ceeb47.png”,“background”:null,“mobile-background”:null}
首先在拦截器中,我想查看布尔键“success”是否为true,然后返回数据值
@ EBean
公共类restInterceptor实现clientHttPrequestinTerceptor{
final string tag=“rest”;
@豆
authstore authstore;
@重写
public clientthtpresponse截获(httprequest请求,byte[]数据,clientthtpresquestexecution执行)
引发IOException{
//需要在这里设置API密钥,但什么都没有发生代码退出
//log.d(“rest”,authstore.getapikey());
httpHeaders headers=请求.getHeaders();
headers.set(“api_key”,“”);
clientHttPresponse resp=执行。执行(请求,数据);
httpstatus code=resp.getstatuscode();
if(code.value()==200){
log.d(标签,“成功代码200”);
//有效的http请求,但它是有效的api请求吗?
//在根json对象中执行if success==true的一些逻辑
//if true cast返回数据键
}
否则{
log.d(标记“fail code”+code.tostring());
}
收益率;
}
}
第二个问题是用带有api密钥和会话密钥的http请求发送参数,我定义了如下的应用程序类
@应用
公共类myapp扩展应用程序{
final string tag=“应用程序”;
@豆
authstore authstore;
@ RestService
restclient restclient;
公共空隙OnCeCATE(){
super.oncreate();
();
}
@ AfterInject
public void init(){
authstore.setapikey(“伪密钥”);
log.d(tag,“api key set to”+authstore.getapikey());
}
}
使用这样的authstore类
@ebean(scope=scope.singleton)
公共类authstore{
公共字符串apikey,sessionkey;
公共字符串getapikey(){
返回apikey;
}
public void setapikey(字符串apikey){
this.apikey=apikey;
}
公共字符串getSessionKey(){
返回sessionkey;
}
public void setSessionKey(字符串sessionKey){
this.sessionkey=sessionkey;
}
}
基本上,我在单例中的应用程序级别设置了一个虚拟api密钥,我应该可以在rest拦截器接口中访问这个密钥,但是代码只是在没有错误的情况下退出,我基本上是按照这个指南https://github.com/excilys/androidannotations/wiki/Authenticated-Rest-Client
最后,我有一个activity类,它将app依赖注入rest http类和authstore类
@活动(r.layout.activity_login)
公共类loginActivity扩展活动{
@应用程序
Myapp应用程序;
@ ViewById
文本查看电子邮件;
@ ViewById
文本查看密码;
@ ViewById
按钮登录按钮;
@ AfterInject
public void init(){
log.d(app.tag,“登录密钥中的api设置为”+app.authstore.getapikey());
}
@点击
@ Trace
void loginbutton(){
登录(email.tostring(),password.tostring());
}
@背景
无效登录(字符串电子邮件,字符串密码){
app.restclient.forcelogin();
}
}
抱歉,如果这是很多信息,我已经搜索了一段时间,无法解决这个问题!
提前谢谢

最佳答案

我不知道您正在使用的库(annotations,spring),但在我看来,您在解析success=true时遇到了困难,因为这不应该出现在json中。
json最好在app 1on1中表示一个类,这样就可以很容易地将其映射到一个对象中。
你的应用程序和webservice之间的通信,关于请求的状态应该进入标题。
像这样,您可以在解析json之前检查请求的头。

10-08 18:12