初试Retrofit网络请求
来源:互联网 发布:风险中性概率 知乎 编辑:程序博客网 时间:2024/05/22 10:44
1、Retrofit的简单介绍:
Retrofit是Square提供的开源框架,GitHub上的描述:Type-safe HTTP client for Android and Java by Square。采用注解,提供JSON TO POJO(简单java对象Plain Ordinary Java Object),POJO TO JSON,网络请求(GET,POST,DELETE,PUT等)的封装。
2、具体实现:
1、创建项目,添加Retrofit库:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:24.0.0' compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0'}
这里注意:
1.上面的红色背景的依赖包,不要忘了,GitHub上的Retrofit的api里是没有加这个依赖包的,如果按照官网的api不加 converter-gson依赖包,如果想用GsonConverterFactory(gson来将json转为POJO)是编译不通过的
2.添加网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2、创建请求接口
public interface GitApi { @GET("users/{user}") public Call<GitBeanUser> getGitUser(@Path("user") String user); }采用@Get注解,表明get请求的方式,而且是动态path,users/{user},{user}由注解@Path指定具体内容,Call<GitBeanUser>里的GitBeanUser是请求json返回之后,通过GsonConverterFactory转化为的Pojo对象
3、创建Pojo对象GitBeanUser
public class GitBeanUser { private String login; private String id; private String avatar_url; private String gravatar_id; private String url; private String html_url; private String followers_url; private String following_url; private String gists_url; private String starred_url; private String subscriptions_url; private String organizations_url; private String repos_url; private String events_url; private String received_events_url; private String type; private String site_admin; private String name; private String company; private String blog; private String location; private String email; private String hireable; private String bio; private String public_repos; private String public_gists; private String followers; private String following; private String created_at; private String updated_at;}
4、测试:创建Call请求数据
多个查询参数,用map集合public void getGitData(View view){ Log.e("onclickListener", "点击事件"); Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); GitApi gitApi = retrofit.create(GitApi.class); Call<GitBeanUser> call = gitApi.getGitUser("octocat"); call.enqueue(new Callback<GitBeanUser>() { @Override public void onResponse(Call<GitBeanUser> call, Response<GitBeanUser> response) { Log.e("getGitUser>>>>>", response.body().toString()); } @Override public void onFailure(Call<GitBeanUser> call, Throwable t) { Log.e("getGitUser>>>>>>>", "not success"); } }); }
3、请求方法,可以看下官方api
java接口里的每个Http请求方法,必须有一个Http注解和一个关联的url,Retrofit默认提供以下5中请求方式GET,POST,PUT,DELETE,HEAD,关联的url的一些请求参数可以在不同的注解之中配置
1.直接配置固定url,不能动态改变
@GET("users/list"):无请求参数
@GET("users/list?sort=desc"):在url后直接拼接参数
2.动态配置url,并添加参数
请求的url可以动态的用代替的模块和方法中的参数去替换,一些url中需要动态配置的path或者动态改变请求参数
url中需要动态改变的部分path可以用{and}大括号包起来,而对应的参数必须用@Path(and)注解标识,并且url的
{}里的String与@Path(“and”)必须一样:
@GET("group/{id}/users")Call<List<User>> groupList(@Path("id") int groupId);添加查询参数:@GET("group/{id}/users")Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
@GET("group/{id}/users")Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);3.请求体
可以用@Body注解,来将对象作为Http的请求体
@POST("users/new")Call<User> createUser(@Body User user);对象可以被配置Retrofit对象时的POJO转化器,做相应的转化,如果Retrofit对象没有添加任何的Converter时,只能使用RequestBody,不能使用对象。
4.表单
使用post提交表单数据,可以用@FormUrlEncoded注解来标识,方法用@Post("url")来标识,每个键值对,采用@Field(”key“)String value来标识
@FormUrlEncoded@POST("user/edit")Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
5.请求头
用@Headers注解,来为请求方法配置请求头
@Headers("Cache-Control: max-age=640000")@GET("widget/list")Call<List<Widget>> widgetList();多个header参数,用{ }包起来
@Headers({ "Accept: application/vnd.github.v3.full+json", "User-Agent: Retrofit-Sample-App"})@GET("users/{username}")Call<User> getUser(@Path("username") String username);可以用@Header注解动态配置请求头header的值,对应的header参数必须在@Header("key”)之中提供,如果对应的header参数的value是null,那么这个header键值对将被忽略,否则,value的toString方法将被调用,结果作为该header参数对应的value值
@GET("user")Call<User> getUser(@Header("Authorization") String authorization)
0 0
- 初试Retrofit网络请求
- Retrofit 网络请求
- Retrofit网络请求
- Retrofit网络请求入门
- Retrofit网络请求使用
- retrofit网络请求框架
- Retrofit 网络请求
- 网络请求框架:Retrofit
- Retrofit -网络请求
- Retrofit 网络请求学习
- 网络请求框架Retrofit
- Retrofit网络请求
- Retrofit网络请求框架
- RXJava+Retrofit网络请求
- Retrofit 网络请求
- Retrofit网络请求
- Retrofit进行网络请求
- 使用Retrofit进行网络请求
- 微信公众号、APP微信支付
- POSIX线程,线程的客户/服务通信(pthread_join,pthread_exit,pthread_detach,pthread_self)
- 【POJ】1451 - T9(动态字典树 & dfs & STL)
- view的父视图和父控制器
- 音频小知识
- 初试Retrofit网络请求
- 树状数组初始化
- JDK下载安装和配置
- maven项目发布到tomcat里lib包没有发布的问题
- BZOJ 3786: 星系探索
- Aizu 0189 Convenient Location
- 针对使用Myeclipse进行JDBC链接MySQL时添加中文数据出现?的解决方法!
- 正则篇:贪婪、非贪婪与回溯
- Java中stringBuilder用法