参考博客:https://www.jianshu.com/p/6922337b4f88
这是一个关于Retrofit 注解的博客,可以看一下https://blog.youkuaiyun.com/qiang_xi/article/details/53959437
这是关于Retrofit网络请求的视频:https://www.imooc.com/video/17289
无Rxjava的Retrofit的网络请求
第一步:加权限
<uses-permission android:name="android.permission.INTERNET"/>
第二步:添加依赖
implementation 'com.squareup.retrofit2:retrofit:2.3.0' //retrofit库
implementation 'com.squareup.retrofit2:converter-gson:2.3.0' //Gson解析
第三步:代码
1.请求
public void toRequest(View view) {
//网络请求服务器基本地址
String Server = "http://www.xn--7t0ay76a.xn--6qq986b3xl/";
//创建一个retrofit对象
Retrofit retrofit = new Retrofit.Builder().baseUrl(Server)
//添加Gosn解析
.addConverterFactory(GsonConverterFactory.create())
.build();
//调用请求接口
LoginService loginService = retrofit.create(LoginService.class);
//调用请求登录方法
Call call = loginService.login("admin", "123456");
//发送请求
call.enqueue(new Callback<LoginModel>() {
@Override
public void onResponse(Call<LoginModel> call, Response<LoginModel> response) {
//成功返回
Log.i("MainActivity", "onResponse: " + response.body().getMessage()+"--"+response.body().getFlag());
}
@Override
public void onFailure(Call<LoginModel> call, Throwable t) {
//失败返回
Log.i("MainActivity", "onFailure: "+t.toString());
}
});
/* 同步请求
try {
call.execute();
} catch (IOException e) {
e.printStackTrace();
}*/
}
2.请求接口
public interface LoginService {
/**
* Post请求
* @param name
* @param pwd
* @return
*/
@FormUrlEncoded
@POST("requestdemo/login") //网络请求二级地址
Call<LoginModel> login(@Field("name") String name, @Field("pwd") String pwd); //参数
/**
* Get请求
* @param name
* @param pwd
* @return
*/
@GET("requestdemo/login")
Call<LoginModel> loginGet(@Query("name") String name, @Query("pwd") String pwd);
}
3. 创建一个model
public class LoginModel {
/**
* flag : 201
* message : 请求成功!
* data : aa
*/
private int flag;
private String message;
private String data;
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
下面是Retrofit+Rxjava网络请求:使用Rxjava后,返回的不是Call<T>而是一个Observable<T>的对象了。
1. 添加关于Rxjava依赖
//Rxjava and Retrofit(Retrofit+Rx需要添加的依赖)
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.2.1'
2.请求接口
/**
* Post请求
* @param name
* @param pwd
* @return
*/
@FormUrlEncoded
@POST("requestdemo/login") //网络请求二级地址 注意,原来的Call改成Observable
Observable<LoginModel> login(@Field("name") String name, @Field("pwd") String pwd); //参数
3. 请求主要代码
//网络请求服务器基本地址
String Server = "http://www.xn--7t0ay76a.xn--6qq986b3xl/";
//创建一个retrofit对象
Retrofit retrofit = new Retrofit.Builder().baseUrl(Server)
.addConverterFactory(GsonConverterFactory.create()) //Json转化器
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //RxJava 适配器
.build();
//调用请求接口
LoginService loginService = retrofit.create(LoginService.class);
loginService.login("admin", "123456")
.subscribeOn(Schedulers.io()) //IO线程加载数据
.observeOn(AndroidSchedulers.mainThread()) //主线程显示数据
.subscribe(new Subscriber<LoginModel>() {
@Override
public void onCompleted() { //请求完成
}
@Override
public void onError(Throwable e) { //请求失败
}
@Override
public void onNext(LoginModel loginModel) { //返回数据
Log.i("MainActivity", "onResponse: " + loginModel.getFlag() + "--" + loginModel.getMessage() + "--" + loginModel.getData());
}
});
demo地址:https://gitee.com/AndroidYaoDan/retrofit_and_rxjava.git