array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Android OkHttp的封装使用 - 爱码网

1.原始的请求过程

Android OkHttp的封装使用

private void useOkHttpSendRequest(){
	
	OkHttpClient client = new OkHttpClient();

	RequestBody body = new FormBody.Builder()
		.add("InfoOne", mInfoOneEditText.getText().toString())
		.add("InfoTwo", mInfoTwoEditText.getText().toString)
		.build();
	
	final Request request = new Request.Builder().url(UrlCons.YOUR_URL).post(body).build();

	Call call = client.newCall(request);

	call.enqueue(new Callback() {

		@Override
		public void onFailure(Call call, IOException e){

		}

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

			if (response.isSuccessful()) {
				//This is in the sub-thread, we shuold transport the data to the main thread
				String responseBody = response.body().string();

			}
		}

	});
}

没有封装的方法不好用。需要进行封装。

Android OkHttp的封装使用

在APP中可以创建全局变量,使整个APP都用这个变量。参考:https://www.cnblogs.com/maoIT/p/3835833.html

如下:

Android OkHttp的封装使用

此时对其进行封装,新建几个类。

//The class to deal with the OkHttpCallback
public abstract class OkHttpCallBack implements CallBack{

	public abstract void onSuccess(final Call call, JSONObject jsonObject);
		
	@Override
	public void onResponse(Call call, Response response) throws IOException{

		if (response != null) {
			if (response.isSuccessful()) {
				try{
					String str = response.body().string().trim();
					JSONObject object = (JSONObject)new JSONTokener(str).nextValue();
					if (object != null) {
						onSuccess(call, object);
					}els{
						onFailure(call, null);
					}
				}catch{
					e.printStackTrace();
				}

			}else{
				onFailure(call, null);
			}
		}

	}


	@Override
	public void onFailure(Call call, IOException e){

	}

}
//OkHttp Core Class
public class OkHttpUtil{
	private static OkHttpClient mOkHttpClient = null;

	//Call this method in the Application class. ---> onCreate() method.
	//Thus we can get only one instance of httpClient in the whole app. 
	public static void init(){
		if (mOkHttpClient == null) {
			OkHttpClient.Builder builder = new OkHttpClient().newBuilder()
				.connectTimeout(5000, TimeUnit.MILLISECOND)
				.readTimeout(5000, TimeUnit.MILLISECOND)
				.writeTimeout(5000, TimeUnit.MILLISECOND);
			mOkHttpClient = builder.build();	
		}
	}


	//If GET method needs some other params, just need to add a HaspMap. Refer to:https://www.imooc.com/video/18685
	public static void get(String url, OkHttpCallback okHttpCallback){
		Call call = null;

		try{
			Request request = new Request.Builder().url(url).build();
			call = mOkHttpClient.newCall(request);
			call.enqueue(okHttpCallback);

		}catch(IOException ex){
			ex.printStackTrace();
		}
	}


	public static void post(String url, OkHttpCallback okHttpCallback, HashMap<String, String> bodyMap){
		Call call = null;

		try{

			FormBody.Builder builder = new FormBody.Builder();
			for (HashMap.Entry<String, String> entry : bodyMap.entrySet()) {
				builder.add(entry.getKey(), entry.getValue());
			}
			RequestBody body = builder.build();

			Request request = new Request.Builder().post(body).url(url).build();
			call = mOkHttpClient.newCall(request);
			call.enqueue(okHttpCallback);

		}catch(IOException ex){
			ex.printStackTrace();
		}
	}

}
public  abstract class ApiUtil {

	private ApiListener mApiListener = null;
	private String mStatus;

	private OkHttpCallback mSendListener = new OkHttpCallback(){

		@Override
		public void onSuccess(Call call, Response response){
			mStatus = response.optString("status");
			if (isSuccess()) {
				try{
					parseData(response);
					mApiListener.success(ApiUtil.this);

				}catch(IOException e){
					e.printStackTrace();
				}
				
			}else{
				mApiListener.failrure(ApiUtil.this);
			}
		}

		@Override
		public void onFailure(Call call, IOException e){
			mApiListener.failrure(ApiUtil.this);
		}
	}

	public boolean isSuccess(){
		return "0".equals(mStatus) || "200".equals(mStatus); 
	}

	protected abstract void parseData(JSONObject jsonObject) throws Exception;

	protected abstract String getUrl();

	//Send GET request
	//Listener: Tell the app whether the GET reqeust is success.
	private void get(ApiListener listener){
		mApiListener = listener;
		OkHttpUtil.get(getUrl(), mSendListener);
	}


	private HashMap<String, String> mBodyMap = new HashMap<>();
	public void addParams(String key, String value){
		mBodyMap.put(key, value);
	}


	//Send POST request
	//Listener: Tell the app whether the POST reqeust is success.
	private void post(ApiListener listener){
		mApiListener = listener;
		OkHttpUtil.post(getUrl(), mSendListener, mBodyMap);
	}

}
public interface ApiListener {

	//Request success
	void succss(ApiUtil apiUtil);

	//Request failed
	void failrure(ApiUtil apiUtil);


}

以下是测试GET的API

public class TestGetBookApi extends ApiUtil{

	public String mResponse;

	@Override
	protected String getUrl(){
		return Url.IP + "/api/v1/books";
	}

	protected void parseData(JSONObject jsonObject){
		mResponse = jsonObject.toString();
	}
}

以下是POST的API

public class TestPostBookApi extends ApiUtil{

	public String mResponse;

	public TestGetBookApi(String bookName, String bookInfo){
		addParams("bookName", bookName);
		addParams("bookInfo", bookInfo);
	}
	
	@Override
	protected String getUrl(){
		return Url.IP + "/api/v1/books";
	}

	protected void parseData(JSONObject jsonObject){
		mResponse = jsonObject.toString();
	}
}

以下是在Activity中进行调用测试

//Use the api

public class TestActivity extends Activity{

	private void processGetApi(){

		new TestGetBookApi().get(new ApiListener() {

			@Override
			public void success(ApiUtil apiUtil){
				TestGetBookApi api = (TestGetBookApi)apiUtil;
				String response = api.mResponse;
				parseResponse(response);
			}

			@Override void failrure(ApiUtil apiUtil){

			}


		});
	};

	//The parse the response
	public void parseResponse(Response response){

	}

	private void processPostApi(){
		new TestPostBookApi(mBookNameEdit.getText().toString(),
			mBookInfoEdit.getText().toString()).post(new ApiListener(){
				@Override
				public void success(ApiUtil apiUtil){
					Log.d(TAG, "---apiUtil = " + apiUtil);
				}

				@Override void failrure(ApiUtil apiUtil){

			}

		});
	}

}

 

详细博客参考来源:https://www.imooc.com/video/18688

相关文章: