Retrofit 2.1 入门
Retrofit 2.1入门
, map);
try {
Response<String>body=call.execute();
System.out.print(body.body());
} catch (IOException e) {
e.printStackTrace();
}
}
query 访问的参数会添加到路径(path)的后面.
实际访问的url是 http://tieba.baidu.com/sheet?name=laiqurufeng&age=22&gender=male&address=sz (模拟的访问)
encoded =true表示对url的query进行url编码,同理还有encodeValues. 这2个的值默认都是true的
如果上面的代码换成 map.put("性别","男") ,然后更改@QueryMap(encoded =false )
那么实际访问的url变成了 http://tieba.baidu.com/sheet?name=laiqurufeng&age=22&性别=%E7%94%B7&address=sz (可以看到key没有进行url编码,value进行了url编码).
Header注解
header分为key和value都固定,静态Header注解方法 和 动态Header注解方法
注意header不会相互覆盖.
静态Header
interface FixedHeader{
@Headers({ //静态Header
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("/")
Call<ResponseBody> getResponse();
}
动态Header
interface DynamicHeader{
@Headers("Cache-Control: max-age=640000") //动态Header
@GET("/")
Call<ResponseBody> getResponse(
@Header("header1")String header1,
@Header("header2")String header2);
//动态Header,其value值可以在调用这个方法时动态传入.
}
例子:
public class PhoneResult {
/**
* errNum : 0
* retMsg : success
* retData : {"phone":"15210011578","prefix":"1521001","supplier":"移动","province":"北京","city":"北京","suit":"152卡"}
*/
public int errNum;
public String retMsg;
/**
* phone : 15210011578
* prefix : 1521001
* supplier : 移动
* province : 北京
* city : 北京
* suit : 152卡
*/
public RetDataEntity retData;
public static class RetDataEntity {
public String phone;
public String prefix;
public String supplier;
public String province;
public String city;
public String suit;
@Override
public String toString() {
return "RetDataEntity{" +
"phone='" + phone + '\'' +
", prefix='" + prefix + '\'' +
", supplier='" + supplier + '\'' +
", province='" + province + '\'' +
", city='" + city + '\'' +
", suit='" + suit + '\'' +
'}';
}
}
}
Service:
动态Header
public interface PhoneService {
@GET("/apistore/mobilenumber/mobilenumber")
Call<PhoneResult> getResult(
@Header("apikey")String apikey,
@Query("phone")String phone
);
}
静态Header
public interface PhoneServiceDynamic {
@Headers("apikey:8e13586b86e4b7f3758ba3bd6c9c9135")
@GET("/apistore/mobilenumber/mobilenumber")
Call<PhoneResult> getResult(
@Query("phone")String phone
);
}
调用
public static void phone_Query(String phone){
final String BASE_URL="http://apis.baidu.com";
final String API_KEY="8e13586b86e4b7f3758ba3bd6c9c9135";
//1.创建Retrofit对象
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
//2.创建访问API的请求
PhoneService service=retrofit.create(PhoneService.class);
Call<PhoneResult>call=service.getResult(API_KEY,phone);
//3.发送请求
try {
Response<PhoneResult>response=call.execute();
//4.处理结果
if (response.isSuccessful()) {
PhoneResult result=response.body();
if (result!=null) {
PhoneResult.RetDataEntity entity = result.getRetData();
System.out.print(entity.toString());
}
}
} catch (IOException e) {
e.printStackTrace();
}
/*异步调用
call.enqueue(new Callback<PhoneResult>() {
@Override
public void onResponse(Call<PhoneResult> call, Response<PhoneResult> response) {
//4.处理结果
if (response.isSuccessful()) {
PhoneResult result=response.body();
if (result!=null) {
PhoneResult.RetDataEntity entity = result.getRetData();
System.out.print(entity.toString());
}
}
}
@Override
public void onFailure(Call<PhoneResult> call, Throwable t) {
}
});*/
}
上传文件
public interface UploadServer {
@Headers({//静态Header
"User-Agent: androidphone"
})
@Multipart
@POST("/service.php?mod=avatar&type=big")
// upload is a post field
// without filename it didn't work! I use a constant name because server doesn't save file on original name
//@Part("filename=\"1\" ") RequestBody
//以表单的形式上传图片
Call<JsonObject> uploadImageM(@Part("file\";filename=\"1") RequestBody file);
// Call<ResponseBody> uploadImage(@Part("file\"; filename=\"image.png\"") RequestBody file);
/**
* 以二进制流的形式上传 图片
* @param file
* @return
*/
@Headers({//静态Header
"User-Agent:androidphone"
})
@POST("/service.php?mod=avatar&type=big")
Call<ResponseBody> uploadImage(@Body RequestBody file);
}
调用
public static void upload(String fpath) { // path to file like /mnt/sdcard/myfile.txt
String baseurl="http://dev.123go.net.cn";
File file = new File(fpath);
// please check you mime type, i'm uploading only images
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
/*RequestBody rbody=new MultipartBody.Builder()
.addPart(requestBody).build();
RequestBody requestFile =
RequestBody.create(MediaType.parse("image/jpg"), file);
MultipartBody.Part body =
MultipartBody.Part.createFormData("image", file.getName(), requestFile);
*/
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(baseurl)
.addConverterFactory(GsonConverterFactory.create())
.client(getOkhttpClient())
.build();
// 添加描述
/*String descriptionString = "hello, 这是文件描述";
RequestBody description =
RequestBody.create(
MediaType.parse("multipart/form-data"), descriptionString);*/
UploadServer server=retrofit.create(UploadServer.class);
Call<ResponseBody> call = server.uploadImage(requestBody);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
ResponseBody jsonObject=response.body();
System.out.print(jsonObject.toString());
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
}
private static OkHttpClient getOkhttpClient(){
final String cookie="your cookie";
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
// .addHeader("Content-Type", " application/x-www-form-urlencoded; charset=UTF-8")
// .addHeader("Accept-Encoding", "gzip, deflate")
// .addHeader("Connection", "keep-alive")
// .addHeader("Accept", "***")
.addHeader("Cookie", cookie)
.build();
return chain.proceed(request);
}
})
.build();
return httpClient;
}
Retrofit 2.1 入门的更多相关文章
- Retrofit网络框架入门使用
1.简单介绍 retrofit事实上就是对okhttp做了进一步一层封装优化. 我们仅仅须要通过简单的配置就能使用retrofit来进行网络请求了. Retrofit能够直接返回Bean对象,比如假设 ...
- Retrofit 入门学习
Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...
- Retrofit 从入门到了解【总结】
源码:https://github.com/baiqiantao/RetrofitDemo.git 参考:http://www.jianshu.com/p/308f3c54abdd Retrofit入 ...
- Retrofit学习入门
Retrofit的使用 设置权限与添加依赖 定义请求接口 通过创建一个retrofit生成一个接口的实现类(动态代理) 调用接口请求数据 设置权限与添加依赖 权限:首先确保在AndroidManife ...
- Retrofit入门
1 Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(ScalarsConverterFactory.create()) ...
- Retrofit 入门和提高
首先感谢这个哥们,把我从helloworld教会了. http://blog.csdn.net/angcyo/article/details/50351247 retrofit 我花了两天的时间才学会 ...
- MVP模式入门(结合Rxjava,Retrofit)
本文MVP的sample实现效果: github地址:https://github.com/xurui1995/MvpSample 老规矩,在说对MVP模式的理解之前还是要再谈谈MVC模式,了解了MV ...
- 「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!
老生常谈 什么是 Retrofit ? Retrofit 早已不是什么新技术了,想必看到这篇博客的大家都早已熟知,这里就不啰嗦了,简单介绍下: Retrofit 是一个针对 Java 和 Androi ...
- Android开发 retrofit入门讲解 (RxJava模式)
前言 retrofit除了正常使用以外,还支持RxJava的模式来使用,此篇博客讲解如何使用RxJava模式下的retrofit 依赖 implementation 'com.squareup.ret ...
随机推荐
- AI (Adobe Illustrator)详细用法(一)
一.新建文档 1.设置面板的各项参数 双击面板工具,会弹出“画板选项”窗口.画板就是最终会被输出的地方. 2.文档设置 文档设置好了以后,可以修改,在文件——>文档设置中打开修改. 二.界面设置 ...
- [转]ASP.NET MVC4+BootStrap 实战(一)
本文转自:http://leelei.blog.51cto.com/856755/1587301 好久没有写关于web开发的文章了,进到这个公司一直就是winform和Silverlight,实在是没 ...
- C#基础---C#如何对Json字符串处理
Json字符串对于做web应用的应该很熟悉,其实在很多请求我们返回的都是Json字符串.那对于C#代码如何处理Json字符串呢,.Net封装了一个类叫做JavaScriptSerializer[MSD ...
- Spring学习之AOP总结帖
AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...
- JAVA IO 以及 NIO 理解
由于Netty,了解了一些异步IO的知识,JAVA里面NIO就是原来的IO的一个补充,本文主要记录下在JAVA中IO的底层实现原理,以及对Zerocopy技术介绍. IO,其实意味着:数据不停地搬入搬 ...
- NGUI Label Color Code
UILabel的颜色代码 NGUI的Label文档:http://www.tasharen.com/?page_id=166 you can embed colors in [RrGgBb] form ...
- HOLOLENS的空间管理
http://blog.csdn.net/sun_t89/article/details/52460272
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...
- Visio连接数据表实体外键[快捷记录]
打开数据库模型图. 单击“常用”工具栏上的“连接线”工具. 将“连接线”工具放在父表的中心上,使表的四周出现轮廓线,然后拖到子表的中心.当子表出现轮廓线时,松开鼠标按钮. 两个连接点均变为红色,同时父 ...
- samsung Galaxy s2(GT i9100g )刷机升级至4.4小记
从昨天上午到现在,大部分时间都是在将i9100g更新到4.4.虽然中途也做了一些别的事情,但是更新过程还是走了一点弯路,比开始预想的稍微慢了一点,现在将完整的更新步骤分享给大家,以帮助后来的同学.升级 ...