您的位置:首页 > 理论基础 > 计算机网络

基于网络请求框架的封装

2017-04-19 23:54 411 查看
 平时开发我们需要用到网络请求框架例如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,可以看到是一个链式调用,很方便。还有就是真正测试时需要导入使用的网络框架,然后权限获取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: