基于网络请求框架的封装

 平时开发我们需要用到网络请求框架例如volley和okhttp,但是有时我们需要更换请求框架,下面 就是一个基于代理模式的封装方便我们切换框架。

首先定义一个接口,执行请求的类都会实现这个接口

package com.example.blank.netprocessor.Processor;

import java.util.Map;

/**
 * 作者:Blank on 2017/4/19 22:57
 * 邮箱:yingyuwudi@163.com
 */
public interface IHttpProcessor {
    void get(String url, Map<String, Object> param, Callback callback);

    void post(String url, Map<String, Object> param, Callback callback);
}

然后是一个结果回调接口,

package com.example.blank.netprocessor.Processor;

/**
 * 作者:Blank on 2017/4/19 22:59
 * 邮箱:yingyuwudi@163.com
 */
public interface Callback {
    void Success(String result);
    void Failure(Exception e);
}
然后,我们再定义一个HttpHelper,使用变种代理模式进行请求转发,变种构建者模式进行参数构建。
package com.example.blank.netprocessor.Processor;

import java.util.HashMap;
import java.util.Map;

/**
 * 作者:Blank on 2017/4/19 23:03
 * 邮箱:yingyuwudi@163.com
 */
public class HttpHelper {
    private static final int REQUEST_TYPE_GET = 0;
    private static final int REQUEST_TYPE_POST = 1;

    private int mDefaultType;
    public static IHttpProcessor mIHttpProcessor;
    private String mUrl;
    private Map<String, Object> mParams;

    public HttpHelper() {
        mParams = new HashMap<>();
    }

    public static void init(IHttpProcessor iHttpProcessor) {
        mIHttpProcessor = iHttpProcessor;
    }

    public static  HttpHelper obtain() {
        return new HttpHelper();
    }

    /**
     * 代理get请求
     */
    public void get(Callback callback) {
        mDefaultType = REQUEST_TYPE_GET;
        request(callback);
    }

    /**
     * 代理po请求
     *
     * @param callback
     */
    public void post(Callback callback) {
        mDefaultType = REQUEST_TYPE_POST;
        request(callback);
    }

   //真正的请求
    private void request(Callback callback) {
        switch (mDefaultType) {
            case REQUEST_TYPE_GET:
                mIHttpProcessor.get(mUrl, mParams, callback);
                break;
            case REQUEST_TYPE_POST:
                mIHttpProcessor.post(mUrl, mParams, callback);
                break;
        }
    }
    public HttpHelper url(String url)
    {
        this.mUrl = url;
        return  this;
    }
    public HttpHelper params(Map<String,Object> params)
    {
        this.mParams = params;
        return  this;
    }
}

package com.example.blank.netprocessor.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.blank.netprocessor.Processor.Callback;
import com.example.blank.netprocessor.Processor.HttpHelper;
import com.example.blank.netprocessor.R;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private String url = "";
    private Map<String,Object> params = new HashMap<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        HttpHelper.obtain()
                .url(url)
                .params(params)
                .get(new Callback() {
                    @Override
                    public void Success(String result) {

                    }

                    @Override
                    public void Failure(Exception e) {

                    }
                });
    }
}


具体实现方法需要自己完善。

上面是一个测试用的activity,可以看到是一个链式调用,很方便。还有就是真正测试时需要导入使用的网络框架,然后权限获取。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小阳世界2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值