(安卓)拦截器 以及 封装post 请求

拦截器:

//拦截器
public class MyInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {

        Request request = chain.request();

        Request newRequest = chain.request().newBuilder()
                .addHeader("source", "android")
                .url(request.url())
                .build();


        return chain.proceed(newRequest);
    }
}

okhttp :   封装的post请求  (公共类):

public class OkHttpUtils {
    private static volatile OkHttpUtils instance;

    private OkHttpClient client;

    private Handler handler = new Handler();

    private OkHttpUtils() {
        client = new OkHttpClient.Builder()
                //设置拦截器
                .addInterceptor(new MyInterceptor())
                .build();
    }

    public static OkHttpUtils getInstance() {
        if (null == instance) {
            synchronized (OkHttpUtils.class) {
                if (instance == null) {
                    instance = new OkHttpUtils();
                }
            }
        }
        return instance;
    }

    public void post(String url, Map<String, Object> map, final CallBack callBack, final Class cls) {
        FormBody.Builder builder = new FormBody.Builder();
        if (map != null && !map.isEmpty()) {
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                builder.add(entry.getKey(), (String) entry.getValue());
            }
        }

        Request request = new Request.Builder()
                .url(url)
                .post(builder.build())
                .build();

        Call call = client.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onFailed(e);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                String result = response.body().string();

                final Object o = GsonUtils.getInstance().fromJson(result, cls);

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onSuccess(o);
                    }
                });
            }
        });
    }
}


在P层:  防止内存泄漏:


//防止内存泄漏
    public void detachView() {
        if (null != iv) {
            iv = null;
        }
    }

MainActivity
    (视图层)

 @Override
    protected void onDestroy() {
        super.onDestroy();

        if (presenter != null) {
            //调用P层 防止内存泄漏
            presenter.detachView();
        }
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本人第一个Android程序,支持抓包(pcap)和对抓包文件进行分析(只支持http分析,自动解压gzip), 本程序无广告,无恶意代码, 如果不能用请告知手机信息和具体问题. Email: [email protected] 更新说明: V1.0.4 1.兼容Android4.2 V1.0.3 1.处理展示时间bug V1.0.2 1.增加部分机型适配 2.增加封包解析时间展示 3.处理长连接解析问题 说明: 1.请确认你的手机已ROOT 或者 能够在电脑上连接ADB 2.请确认你的手机有储存卡(/sdcard) 3.如果你的手机已经有ROOT权限,可以直接使用此应用进行抓包 4.如果没有获取ROOT权限,请使用 ADB命令 将应用生成的[/sdcard/tcpdump]复制到[/ststem/xbin/]目录下,并修改权限为6755后再次运行此应用抓包。 5.抓包文件保存在/sdcard/目录下,文件格式为.pcap 6.所抓取的数据包可以直接打开分析或者在电脑上使用Wireshark打开分析 7.注意在抓包过程中不要切换网络,否则会导致切换后的网络访问无法被抓取 ADB命令示例: adb root adb remount adb pull /sdcard/tcpdump c:\\ adb push c:\\tcpdump /system/xbin/ adb shell chmod 6755 /system/xbin/tcpdump 相关命令备注: 抓包命令:/system/xbin/tcpdump -p -s 0 -w /sdcard/xxxxxx.pcap 查看网卡:/system/xbin/tcpdump -D 或者 netcfg (查看状态为UP的网卡) 复制文件:cp 不成功可以使用 dd if=/sdcard/tcpdump of=/system/xbin/tcpdump 没有写权限:mount -o remount,rw / 和 mount -o remount,rw /system 参考代码: 手机抓包工具V2.0 pyhttpcap-master

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值