Android 在没有OkHttp截获的情况下使用Reformation2进行日志记录
我想在不使用okHttp库的情况下记录Reformation2请求的完整请求(url、请求参数、正文)。如何做到这一点您必须添加日志拦截器: 编译'com.squareup.okhttp3:logging interceptor:3.4.1'Android 在没有OkHttp截获的情况下使用Reformation2进行日志记录,android,retrofit2,Android,Retrofit2,我想在不使用okHttp库的情况下记录Reformation2请求的完整请求(url、请求参数、正文)。如何做到这一点您必须添加日志拦截器: 编译'com.squareup.okhttp3:logging interceptor:3.4.1' 编写 'com.squareup.Refught2:Refught2.1.0' 没有快捷方式,没有okhttp就无法使用改装,从4.4开始,Android上的HttpUrlConnection在引擎盖下使用okhttp: 您必须添加日志拦截器: 编译'co
编写 'com.squareup.Refught2:Refught2.1.0' 没有快捷方式,没有okhttp就无法使用改装,从4.4开始,Android上的HttpUrlConnection在引擎盖下使用okhttp:
您必须添加日志拦截器: 编译'com.squareup.okhttp3:logging interceptor:3.4.1'
编写 'com.squareup.Refught2:Refught2.1.0' 没有快捷方式,没有okhttp就无法使用改装,从4.4开始,Android上的HttpUrlConnection在引擎盖下使用okhttp: 我做的一节简单的课 优势
HashMap fileParams=newhashmap()代码>
if(selectedImage!=null)fileParams.put(“image”,新文件(selectedImage))代码>
reformation.getInstance(“用户/editprofile”、参数、文件参数)
/*
*由RajeshKushvaha于2016年10月19日创作
*/
公共抽象类改型实现回调{
私有静态最终字符串BASE_URL=”http://192.168.1.100/apps/demo/web/v1/“;//本地
私人进展对话进展;
公共改装(){
}
公共改装(上下文){
if(progress!=null&&progress.isShowing()){
进步。解散();
}
进度=新的ProgressDialog(上下文,R.style.ProgressDialog);
progress.setUndeterminate(true);
progress.setIndenderedRavable(context.getResources().getDrawable(R.drawable.shape_drawable_progress));
进度。可设置可取消(false);
progress.setCanceledOnTouchOutside(false);
progress.show();
}
公共改装(上下文,布尔isLoadMore){
如果(isLoadMore)返回;
if(progress!=null&&progress.isShowing()){
进步。解散();
}
进度=新的ProgressDialog(上下文,R.style.ProgressDialog);
progress.setUndeterminate(true);
progress.setIndenderedRavable(context.getResources().getDrawable(R.drawable.shape_drawable_progress));
进度。可设置可取消(false);
progress.setCanceledOnTouchOutside(false);
progress.show();
}
公共静态调用getInstance(字符串端点,
HashMap参数){
返回getInstance(端点,参数,null);
}
公共静态调用getInstance(字符串端点,
HashMap参数,
HashMap文件){
HashMap bodyParams=null;
Logger.e(“URL”,基本URL+端点);
if(files!=null&&files.size()>0){
bodyParams=新HashMap();
对于(Map.Entry:params.entrySet()){
Logger.e(“params”,entry.getKey()+“\t”+entry.getValue());
bodyParams.put(entry.getKey(),createPartFromString(entry.getValue());
}
对于(Map.Entry:files.entrySet()){
Logger.e(“params”,entry.getKey()+“\t”+entry.getValue().getPath());
字符串文件名=entry.getKey()+“\”文件名=\”+entry.getValue().getName();
put(文件名,createPartFromFile(entry.getValue());
}
}否则{
对于(Map.Entry:params.entrySet()){
Logger.e(“params”,entry.getKey()+“\t”+entry.getValue());
}
}
//添加了句柄超时,您可以跳过此选项
OkHttpClient客户端=新建OkHttpClient.Builder()
.connectTimeout(60,时间单位为秒)
.readTimeout(60,时间单位为秒)
.writeTimeout(60,时间单位。秒)
.build();
ApiInterface ApiInterface=new-Refundation2.Refundation.Builder()
.baseUrl(基本URL)
.客户(客户)
.addConverterFactory(GsonConverterFactory.create())
.build().create(reformation.apinterface.class);
返回bodyParams!=null?apiInterface.methodMultipart(端点,bodyParams):apiInterface.method(端点,params);
}
@凌驾
公共void onResponse(调用、响应){
如果(progress!=null&&progress.isShowing())progress.disclose();
字符串体=null;
尝试{//将字符串转换为JSONObject
if(response.body()!=null){
body=((ResponseBody)response.body()).string();
JSONObject对象=新的JSONObject(主体);
Logger.e(“Response”,call.request().url().toString()+”\n“+object.toString());
onResponse(response.code(),对象);
}否则{
body=response.errorBody().string();
JSONObject对象=新的JSONObject(主体);
Logger.e(“Response”,call.request().url().toString()+”\n“+object.toString());
onFailed(response.code(),object.optString(“消息”);
}
}捕获(JSONException | IOException e){
e、 printStackTrace();
if(body!=null)Logger.e(body);
onFailed(response.code(),“出现问题!\n请重试”);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Logger.e(“Response”,call.request().url().toString()+”\n“+t.toString());
如果(progress!=null&&progress.isShowing())progress.disclose();
if(ConnectException的t instanceof | | SocketTimeoutException的t instanceof | | unknownhosexception的t instanceof){
onFailed(0,“与服务器连接失败!”);
}else if(IOException的t实例){
onFailed(0,“没有internet连接!”);
}else if(请求异常的t实例){
onFailed(0,“请求超时!”);
}否则{
onFailed(0,t.getMessage());
}
}
公共接口{
@FormUrlEncoded
@职位
调用方法(@Url字符串)
OkHttpClient.Builder builder = new OkHttpClient.Builder();
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.networkInterceptors().add(httpLoggingInterceptor);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor).build();
retrofit = new Retrofit.Builder()
.baseUrl(NetworkConstsParkCloud.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
/*
* Created by RajeshKushvaha on 19-10-16
*/
public abstract class Retrofit implements Callback<ResponseBody> {
private static final String BASE_URL = "http://192.168.1.100/apps/demo/web/v1/"; //Local
private ProgressDialog progress;
public Retrofit() {
}
public Retrofit(Context context) {
if (progress != null && progress.isShowing()) {
progress.dismiss();
}
progress = new ProgressDialog(context, R.style.ProgressDialog);
progress.setIndeterminate(true);
progress.setIndeterminateDrawable(context.getResources().getDrawable(R.drawable.shape_drawable_progress));
progress.setCancelable(false);
progress.setCanceledOnTouchOutside(false);
progress.show();
}
public Retrofit(Context context, boolean isLoadMore) {
if (isLoadMore) return;
if (progress != null && progress.isShowing()) {
progress.dismiss();
}
progress = new ProgressDialog(context, R.style.ProgressDialog);
progress.setIndeterminate(true);
progress.setIndeterminateDrawable(context.getResources().getDrawable(R.drawable.shape_drawable_progress));
progress.setCancelable(false);
progress.setCanceledOnTouchOutside(false);
progress.show();
}
public static Call<ResponseBody> getInstance(String endPoint,
HashMap<String, String> params) {
return getInstance(endPoint, params, null);
}
public static Call<ResponseBody> getInstance(String endPoint,
HashMap<String, String> params,
HashMap<String, File> files) {
HashMap<String, RequestBody> bodyParams = null;
Logger.e("URL", BASE_URL + endPoint);
if (files != null && files.size() > 0) {
bodyParams = new HashMap<>();
for (Map.Entry<String, String> entry : params.entrySet()) {
Logger.e("params", entry.getKey() + "\t" + entry.getValue());
bodyParams.put(entry.getKey(), createPartFromString(entry.getValue()));
}
for (Map.Entry<String, File> entry : files.entrySet()) {
Logger.e("params", entry.getKey() + "\t" + entry.getValue().getPath());
String fileName = entry.getKey() + "\"; filename=\"" + entry.getValue().getName();
bodyParams.put(fileName, createPartFromFile(entry.getValue()));
}
} else {
for (Map.Entry<String, String> entry : params.entrySet()) {
Logger.e("params", entry.getKey() + "\t" + entry.getValue());
}
}
//Added for handle timout you can skip this
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.build();
ApiInterface apiInterface = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build().create(Retrofit.ApiInterface.class);
return bodyParams != null ? apiInterface.methodMultipart(endPoint, bodyParams) : apiInterface.method(endPoint, params);
}
@Override
public void onResponse(Call call, Response response) {
if (progress != null && progress.isShowing()) progress.dismiss();
String body = null;
try {//Converting string to JSONObject
if (response.body() != null) {
body = ((ResponseBody) response.body()).string();
JSONObject object = new JSONObject(body);
Logger.e("Response", call.request().url().toString() + "\n" + object.toString());
onResponse(response.code(), object);
} else {
body = response.errorBody().string();
JSONObject object = new JSONObject(body);
Logger.e("Response", call.request().url().toString() + "\n" + object.toString());
onFailed(response.code(), object.optString("message"));
}
} catch (JSONException | IOException e) {
e.printStackTrace();
if (body != null) Logger.e(body);
onFailed(response.code(), "Something went wrong!\n Please try again");
}
}
@Override
public void onFailure(Call call, Throwable t) {
Logger.e("Response", call.request().url().toString() + "\n" + t.toString());
if (progress != null && progress.isShowing()) progress.dismiss();
if (t instanceof ConnectException || t instanceof SocketTimeoutException || t instanceof UnknownHostException) {
onFailed(0, "Failed to connect with server!");
} else if (t instanceof IOException) {
onFailed(0, "No internet connection!");
} else if (t instanceof RequestException) {
onFailed(0, "Request timeout!");
} else {
onFailed(0, t.getMessage());
}
}
public interface ApiInterface {
@FormUrlEncoded
@POST
Call<ResponseBody> method(@Url String endpoint,
@FieldMap HashMap<String, String> fields);
@Multipart
@POST
Call<ResponseBody> methodMultipart(@Url String endpoint,
@PartMap HashMap<String, RequestBody> fields);
}
private static RequestBody createPartFromString(String value) {
return RequestBody.create(MediaType.parse("multipart/form-data"), value);
}
private static RequestBody createPartFromFile(File file) {
return RequestBody.create(MediaType.parse("multipart/form-data"), file);
}
public abstract void onResponse(int statusCode, JSONObject jResponse);
public abstract void onFailed(int statusCode, String message);
}
HashMap<String, String> params = new HashMap<>();
params.put("email", email);
params.put("password", password);
Retrofit.getInstance("user/login", params)//user/login was endpoint
.enqueue(new Retrofit(ForgetPasswordActivity.this/*pass context if you want progressbar*/) {
@Override
public void onResponse(int statusCode, JSONObject jResponse) {
//handle your response
}
@Override
public void onFailed(int statusCode, String message) {
showToast(message);
}
});