首先呢 老老实实导依赖就行了
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
第二步 清单文件中加入网络权限 !
第三步定义接口请求方式吧
/*Time:2019/5/15
*Author:zhaozhiwei
*Description:
*/
public interface IApiService {
/**
* 获取Banner信息
* @return
*/
@GET("small/commodity/v1/bannerShow")
Call<BannerResponse> getBannerShow();//括号里是bean类
/**
* 登陆
* @param phone
* @param pwd
* @return
*/
@FormUrlEncoded //这个加上有啥用,为什么不加这个会崩溃 @Field parameters can only be used with form encoding.
@POST("small/user/v1/login")
Call<PostBean> getPostShow(@Field("phone")String phone,@Field("pwd") String pwd);
}
里面的Bean类大家自己alt+s 封装一下就ojbk
第四步呢就该写retroifit管理类
/*Time:2019/5/15
*Author:zhaozhiwei
*Description:
*/
public class RetrofitManager {
private Retrofit mRetrofit;
private RetrofitManager(){
initRetrofit();
}
//静态内部类单例
private static class oKHPMH{
public static RetrofitManager instance = new RetrofitManager();
}
public static RetrofitManager getInstance(){
return oKHPMH.instance;
}
//初始化fit
private void initRetrofit() {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)//添加拦截器日志
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.retryOnConnectionFailure(true);
OkHttpClient client = builder.build();
mRetrofit = new Retrofit.Builder()
.baseUrl("http://XX.177.77.177/") //这里写的是接口的前半部分 必须以“ / ”结尾
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
}
public <T> T createReq(Class<T> reqServer){
return mRetrofit.create(reqServer);
}
}
最后在需要调用的类里用就可以了 比如mvp的model层
public class MainActivity extends AppCompatActivity {
@BindView(R.id.mButton)
Button mButton;
@BindView(R.id.mButtonPost)
Button mButtonPost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick({R.id.mButton, R.id.mButtonPost})
public void onClick(View view) {
switch (view.getId()) {
case R.id.mButton://GET请求
//创建获取Banner内容的接口实例
IApiService apiService = RetrofitManager.getInstance().createReq(IApiService.class);
//对发送请求进行封装
Call<BannerResponse> call = apiService.getBannerShow();//getBannerShow是定GET请求的类方法
//发送网络请求(异步)
call.enqueue(new Callback<BannerResponse>() {
@Override
public void onResponse(Call<BannerResponse> call, Response<BannerResponse> response) {
if (response.isSuccessful()) {
List<BannerResponse.ResultBean> result = response.body().getResult();
String imageUrl = result.get(1).getImageUrl();
//这里直接解析完的 所以不用解析了
Log.i("AAn", "onResponse: " + imageUrl + "返回值");
} else {
Log.i("AAn", "onResponse: 空" + "返回值");
}
}
@Override
public void onFailure(Call<BannerResponse> call, Throwable t) {
Log.i("AAn", "onResponse: 失败" + "返回值" + t.toString());
}
});
break;
case R.id.mButtonPost://POST请求
IApiService req = RetrofitManager.getInstance().createReq(IApiService.class);
//对发送的请求进行封装
Call<PostBean> postShow = req.getPostShow("15201230076", "1111");
postShow.enqueue(new Callback<PostBean>() {
@Override
public void onResponse(Call<PostBean> call, Response<PostBean> response) {
if (response.isSuccessful()){
PostBean.ResultBean result = response.body().getResult();
String nickName = result.getNickName();
Log.i("AAn", "onResponse: 返回值"+nickName);
}
}
@Override
public void onFailure(Call<PostBean> call, Throwable t) {
Log.i("AAn", "onResponse: 失败" + "返回值" + t.toString());
}
});
break;
}
}
}