Android 在没有OkHttp截获的情况下使用Reformation2进行日志记录

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

我想在不使用okHttp库的情况下记录Reformation2请求的完整请求(url、请求参数、正文)。如何做到这一点

您必须添加日志拦截器:

编译'com.squareup.okhttp3:logging interceptor:3.4.1'
编写 '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:

我做的一节简单的课 优势

  • 调用api的公共类
  • 内置的Progressbar处理程序无需显示或关闭
  • 使用以下格式登录您自己的记录器
  • 多部分内置,即

    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);
                        }
                    });