andriod中使用retrofit进行网络请求【实战】
一 Retrofit2是什么?
Android Retrofit2是一个安全的为Android和Java开发的Http访问框架,它是对OkHttp的进一步封装,它对应的的git地址和官网如下:二、Retrofit2能做啥?
不需要自己封装具体的Http请求,线程切换以及数据转换等等三、实战操作
在你的项目的build.gradle中dependencies区块下加入以下
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'然后点击同步按钮
如果没有报错,就表示同步成功了
我们现在又一个接口是这样的
http://www.bfw.wiki/Test/Login.html
通过post传递用户名与密码进行登录,post参数为username与userpwd
请求返回的数据格式为json
{"status":"201","data":"\u7528\u6237\u540d\u5bc6\u7801\u4e0d\u5bf9"}
status如果为200,表示登录成功,201表示出错,data就是提示的内容那么怎么通过retrofit来获取我们所需要的数据呢
先建一个返回的数据实体类RetData。
package bfw.wiki.api; public class RetData { private String status; private String data; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getData() { return data; } public void setData(String data) { this.data = data; } }
然后新建一个Api的接口,主要放一下接口url的域名后面的部分
package bfw.wiki.api; import com.squareup.okhttp.ResponseBody; import retrofit.Call; import retrofit.http.Field; import retrofit.http.FormUrlEncoded; import retrofit.http.Headers; import retrofit.http.POST; import retrofit.http.Query; public interface API { @FormUrlEncoded @POST("Test/login") Call<RetData> Login(@Field("username") String username, @Field("userpwd")String userpwd); }
我们看到retrofit的注解,POST后面是请求接口的路径,注意这里面我们没传接口的域名,由于域名相同,我们在后面会构造一个baseUrl
其中Call<RetData>表示我们请求接口后返回的数据格式json解码后转换的实体类RetData,@Field字段表示要传的post字段内容
@FormUrlEncoded表示采用表单的形式进行传输,这个要和Field结合使用,少了一个会报错,其他的注解如下:
请求方法
请求参数
最后我们build一个retrofit示例调用接口进行请求
public void login() { Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://www.bfw.wiki/") .addConverterFactory(GsonConverterFactory.create()) .build(); API api = retrofit.create(API.class); Call<RetData> news_api = api.Login("bfw","bfw"); news_api.enqueue(new Callback<RetData>() { @Override public void onResponse(Response<RetData> response, Retrofit retrofit) { Log.e("test",response.body().getData()); //请求处理,输出结果-response.body().show(); } @Override public void onFailure(Throwable throwable) { Log.e("fail",throwable.getMessage()); } }); }
解释一下
.baseUrl("http://www.bfw.wiki/")
这个http://www.bfw.wiki/是我们要访问的接口的BaseUrl,而我们现在用post注解的字符串 "Test/Login"会追加到BaseUrl中变为:http://www.bfw.wiki/Test/Login
在我们日常开发中,BaseUrl具体是啥由后端接口童鞋给出,之后接口童鞋们会出各种各种的后缀(比如上面的 "Test/Login")组成各种各行的接口用来供移动端数据调用,实现各种各样的功能
.addConverterFactory(GsonConverterFactory.create())
news_api.enqueue(new Callback<RetData>() {
Call<RetData> news_api=api=execute();ok,我们运行一下用fiddler抓包试试
成功了
下一章节我将带大家了解更多retrofit的更多方法,比如下载文件,证书请求等
网友评论0