android:retrofit库使用拦截器interceptor
一,安装第三方库
库地址:
https://mvnrepository.com/artifact/com.squareup.okhttp3/logging-interceptor
编辑 build.gradle,增加
// https://mvnrepository.com/artifact/com.squareup.okhttp3/logging-interceptor
implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
然后点击 Sync Now
二,代码
interceptor类
package com.example.okdemo1.interceptor;
import android.util.Log;
import java.io.IOException;
import java.util.Locale;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.Response;
public class LogInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String typeStr = "";
long contentLen = 0;
String reqBody = "";
//request.body().
if (request.body() != null) {
MediaType contentType = request.body().contentType();
typeStr = contentType.toString();
contentLen = request.body().contentLength();
reqBody = request.body().toString();
}
//.contentType().toString()
Log.i("TEST", "MyIntercepter.intercept.request.toString -> " + request.toString());
Log.i("TEST", String.format(Locale.getDefault(),
"MyIntercepter.intercept.requestbody -> {contentType : %1$s, contentLength : %2$d, toString : %3$s}",
//request.body().contentType().toString(),
typeStr,
contentLen,
reqBody));
Response response = chain.proceed(request);
String content = response.body().string();
okhttp3.MediaType mediaType = response.body().contentType();
Log.i("TEST", "MyIntercepter.intercept.response.message -> " + response.message());
Log.i("TEST", "MyIntercepter.intercept.response.toString -> " + response.toString());
Log.i("TEST", "MyIntercepter.intercept.response.body -> " + content);
return response.newBuilder().body(okhttp3.ResponseBody.create(content,mediaType)).build();
}
}
在activity中调用
package com.example.okdemo1.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.example.okdemo1.MainActivity;
import com.example.okdemo1.R;
import com.example.okdemo1.interceptor.LogInterceptor;
import com.example.okdemo1.interfaces.ApiServiceInterface;
import com.example.okdemo1.model.BaseEntity;
import com.example.okdemo1.model.UserListEntity;
import com.example.okdemo1.model.UserListItemEntity;
import java.util.List;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ApiActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_api);
//给按钮增加点击事件
Button button2 = findViewById(R.id.apiBtn);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//访问接口
request();
}
});
}
//retrofit2 请求方法
public void request() {
LogInterceptor loggingInterceptor = new LogInterceptor();
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor) // 这个会全部打印出来
.build();
//创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.testit.net") // 设置 网络请求 Url
.client(client)
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.build();
//创建 网络请求接口 的实例
ApiServiceInterface request = retrofit.create(ApiServiceInterface.class);
//对 发送请求 进行封装
String cate="HOUSE";
int channelId = 123;
Call<BaseEntity<UserListEntity>> call = request.getUserList(cate,channelId);
//发送网络请求(异步)
call.enqueue(new Callback<BaseEntity<UserListEntity>>() {
//请求成功时回调
@Override
public void onResponse(Call<BaseEntity<UserListEntity>> call, Response<BaseEntity<UserListEntity>> response) {
//处理返回的数据结果
List<UserListItemEntity> list = response.body().getData().getList();
//遍历list数据
for (int i = 0; i < list.size(); i++) {
UserListItemEntity one = list.get(i);
//对元素进行操作
String image = one.getImage().replace("abc", "test");;
System.out.println("one:"+one.getId()+"-"+one.getName()+"-"+image);
}
}
//请求失败时回调
@Override
public void onFailure(Call<BaseEntity<UserListEntity>> call, Throwable throwable) {
System.out.println("连接失败");
}
});
}
}