android网络框架Retrofit 同步异步
2015-11-03 16:35
549 查看
http://blog.csdn.net/jiguangcanhen/article/details/39006197
同步的方式:
1)首先定义要接口。注解Get表示使用的Get请求方式,{user}代表要被替换的数据
2)初始化RestAdapter,并利用动态代理来创建的接口对象。
3)使用网络访问并返回
异步的方式:
注:body注解,在进行请求前对象会被转换器进行相应的数据转换。
前两部和之前的相同,不同在于最后一个参数变成了CallBack对象。
controller.getLogin(mail,password,newCallback<UserDataModel>(){
@Override
publicvoidfailure(RetrofitErrorerror){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidsuccess(UserDataModelldm,Responseresponse){
//TODOAuto-generatedmethodstub
});
可以看到当请求网络返回之后,会在failure中和success中进行回调,而且默认的数据转换器会把相应的json字符串转换为对象。(当然,我们也可以定义自己的数据转换器)
定义自己的数据转换器:
publicclassMyConverterimplementsConverter{
@Override
publicObjectfromBody(TypedInputbody,Typetype)throwsConversionException{
StringBufferresult=newStringBuffer();
try{
InputStreamis=body.in();
byte[]buffer=newbyte[1024];
while(is.read(buffer)!=-1){
result.append(newString(buffer,"UTF-8"));
}
}catch(IOExceptione){
e.printStackTrace();
}
returnresult;
}
@Override
publicTypedOutputtoBody(Objectobject){
returnnull;
}
}
上面的自定义数据转换器,会在请求成功之后,返回给我们字符串,而不是相应的被gson转换过格式的字符串。
RestAdapterrestAdapter=newRestAdapter.Builder()
.setEndpoint(“url”)
.setConverter(newMyConverter())
.build();
在创建RestAdapter之后创建设置使用自己的数据转换器就可以了。
我们还可以灵活的进行其他的配置:
1)设置请求拦截器,会在请求发出前,进行拦截。
2)设置错误控制器
3)设置log日志。
上面只是简单介绍了它的使用,其实它还有很多的功能,Get,Post,Put,Delete,Head……具体请参见官方网址。
版权声明:本文为博主原创文章,未经博主允许不得转载。
同步的方式:
1)首先定义要接口。注解Get表示使用的Get请求方式,{user}代表要被替换的数据
publicinterfaceGitHubService{
@GET("/users/{user}/repos")
List<Repo>listRepos(@Path("user")Stringuser);
}
2)初始化RestAdapter,并利用动态代理来创建的接口对象。
RestAdapterrestAdapter=newRestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();
GitHubServiceservice=restAdapter.create(GitHubService.class);
3)使用网络访问并返回
List<Repo>repos=service.listRepos("octocat");
异步的方式:
@POST("/users/new")
voidcreateUser(@BodyUseruser,Callback<User>cb);
注:body注解,在进行请求前对象会被转换器进行相应的数据转换。
前两部和之前的相同,不同在于最后一个参数变成了CallBack对象。
controller.getLogin(mail,password,newCallback<UserDataModel>(){
@Override
publicvoidfailure(RetrofitErrorerror){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidsuccess(UserDataModelldm,Responseresponse){
//TODOAuto-generatedmethodstub
});
可以看到当请求网络返回之后,会在failure中和success中进行回调,而且默认的数据转换器会把相应的json字符串转换为对象。(当然,我们也可以定义自己的数据转换器)
定义自己的数据转换器:
publicclassMyConverterimplementsConverter{
@Override
publicObjectfromBody(TypedInputbody,Typetype)throwsConversionException{
StringBufferresult=newStringBuffer();
try{
InputStreamis=body.in();
byte[]buffer=newbyte[1024];
while(is.read(buffer)!=-1){
result.append(newString(buffer,"UTF-8"));
}
}catch(IOExceptione){
e.printStackTrace();
}
returnresult;
}
@Override
publicTypedOutputtoBody(Objectobject){
returnnull;
}
}
上面的自定义数据转换器,会在请求成功之后,返回给我们字符串,而不是相应的被gson转换过格式的字符串。
RestAdapterrestAdapter=newRestAdapter.Builder()
.setEndpoint(“url”)
.setConverter(newMyConverter())
.build();
在创建RestAdapter之后创建设置使用自己的数据转换器就可以了。
我们还可以灵活的进行其他的配置:
1)设置请求拦截器,会在请求发出前,进行拦截。
RequestInterceptorrequestInterceptor=newRequestInterceptor(){
@Override
publicvoidintercept(RequestFacaderequest){
request.addHeader("User-Agent","Retrofit-Sample-App");
}
};
RestAdapterrestAdapter=newRestAdapter.Builder()
.setEndpoint("https://api.github.com")
.setRequestInterceptor(requestInterceptor)
.build();
2)设置错误控制器
classMyErrorHandlerimplementsErrorHandler{
@OverridepublicThrowablehandleError(RetrofitErrorcause){
Responser=cause.getResponse();
if(r!=null&&r.getStatus()==401){
returnnewUnauthorizedException(cause);
}
returncause;
}
}
RestAdapterrestAdapter=newRestAdapter.Builder()
.setEndpoint("https://api.github.com")
.setErrorHandler(newMyErrorHandler())
.build();
3)设置log日志。
RestAdapterrestAdapter=newRestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint("https://api.github.com")
.build();
上面只是简单介绍了它的使用,其实它还有很多的功能,Get,Post,Put,Delete,Head……具体请参见官方网址。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- 网络抓包工具 Charles & Fiddler
- Android Http 下载
- Server.UrlEncode、HttpUtility.UrlDecode的区别
- android 网络判断工具类(APN+WIFI)
- nginx配置ssl加密(单双向认证、部分https)
- HttpClient连接池使用
- charles中如何对https抓包
- iOS开发网络篇—HTTP协议
- http协议
- c# 完成端口模型IOCP 网络NETWORK TCP/UDP通信 常用 字节byte环绕缓冲区 FIFO 内存池 源码
- 多线程网络(一)
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter
- python网络编程知识体系
- HttpClient PostMethod提交自定义参数
- Web API应用支持HTTPS的经验总结
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter
- 远程连接linux和linux的网络配置
- 解决erlang节点启动失败报["inet_tcp",econnrefused]的问题
- iOS开发 - AFNetworking网络请求
- Nginx图片剪裁模块探究 http_image_filter_module