OKhttp的封装(上)

自从介绍了OKhttp3的一些基本使用之后,又偷了下懒,所以它的续篇被搁置了一段时间,现在补充。

OKhttpManager.Class  请求工具类
  1 package com.example.administrator.okhttp3;
  2
  3 import android.os.Handler;
  4 import android.os.Looper;
  5
  6 import java.io.IOException;
  7 import java.util.HashMap;
  8 import java.util.Map;
  9
 10 import okhttp3.Call;
 11 import okhttp3.Callback;
 12 import okhttp3.FormBody;
 13 import okhttp3.OkHttpClient;
 14 import okhttp3.Request;
 15 import okhttp3.RequestBody;
 16 import okhttp3.Response;
 17
 18 /**
 19  * Created by ${火龙裸先生} on 2016/9/28.
 20  * 邮箱:[email protected]
 21  * <p/>
 22  * OKhttpManager OKhttp封装类
 23  */
 24 public class OKhttpManager {
 25     private OkHttpClient client;
 26     private static OKhttpManager oKhttpManager;
 27     private Handler mHandler;
 28
 29     /**
 30      * 单例获取 OKhttpManager实例
 31      */
 32     private static OKhttpManager getInstance() {
 33         if (oKhttpManager == null) {
 34             oKhttpManager = new OKhttpManager();
 35         }
 36         return oKhttpManager;
 37     }
 38
 39     private OKhttpManager() {
 40         client = new OkHttpClient();
 41         mHandler = new Handler(Looper.getMainLooper());
 42     }
 43
 44
 45     /**************
 46      * 内部逻辑处理
 47      ****************/
 48     private Response p_getSync(String url) throws IOException {
 49         Request request = new Request.Builder().url(url).build();
 50         Response response = client.newCall(request).execute();
 51         return response;
 52     }
 53
 54     private String p_getSyncAsString(String url) throws IOException {
 55         return p_getSync(url).body().string();
 56     }
 57
 58     private void p_getAsync(String url, final DataCallBack callBack) {
 59         final Request request = new Request.Builder().url(url).build();
 60         client.newCall(request).enqueue(new Callback() {
 61             @Override
 62             public void onFailure(Call call, IOException e) {
 63                 deliverDataFailure(call, e, callBack);
 64             }
 65
 66             @Override
 67             public void onResponse(Call call, Response response) {
 68                 try {
 69                     String result = response.body().string();
 70                     deliverDataSuccess(result, callBack);
 71                 } catch (IOException e) {
 72                     deliverDataFailure(call, e, callBack);
 73                 }
 74             }
 75         });
 76     }
 77
 78     private void p_postAsync(String url, Map<String, String> params, final DataCallBack callBack) {
 79         RequestBody requestBody = null;
 80
 81         if (params == null) {
 82             params = new HashMap<String, String>();
 83         }
 84         FormBody.Builder builder = new FormBody.Builder();
 85         for (Map.Entry<String, String> entry : params.entrySet()) {
 86             String key = entry.getKey().toString();
 87             String value = null;
 88             if (entry.getValue() == null) {
 89                 value = "";
 90             } else {
 91                 value = entry.getValue().toString();
 92             }
 93             builder.add(key, value);
 94         }
 95         requestBody = builder.build();
 96         final Request request = new Request.Builder().url(url).post(requestBody).build();
 97         client.newCall(request).enqueue(new Callback() {
 98             @Override
 99             public void onFailure(Call call, IOException e) {
100                 deliverDataFailure(call, e, callBack);
101             }
102
103             @Override
104             public void onResponse(Call call, Response response) throws IOException {
105                 try {
106                     String result = response.body().string();
107                     deliverDataSuccess(result, callBack);
108                 } catch (IOException e) {
109                     deliverDataFailure(call, e, callBack);
110                 }
111             }
112         });
113     }
114
115     /**
116      * 数据分发的方法
117      */
118     private void deliverDataFailure(final Call call, final IOException e, final DataCallBack callBack) {
119         mHandler.post(new Runnable() {
120             @Override
121             public void run() {
122                 if (callBack != null) {
123                     callBack.requestFailure(call, e);
124                 }
125             }
126         });
127     }
128
129     private void deliverDataSuccess(final String result, final DataCallBack callBack) {
130         mHandler.post(new Runnable() {
131             @Override
132             public void run() {
133                 if (callBack != null) {
134                     callBack.requestSuccess(result);
135                 }
136             }
137         });
138     }
139
140
141     /******************
142      * 对外公布的方法
143      *****************/
144     public static Response getSync(String url) throws IOException {
145         return getInstance().p_getSync(url);//同步GET,返回Response类型数据
146     }
147
148
149     public static String getSyncAsString(String url) throws IOException {
150         return getInstance().p_getSyncAsString(url);//同步GET,返回String类型数据
151     }
152
153     public static void getAsync(String url, DataCallBack callBack) {
154         getInstance().p_getAsync(url, callBack);//异步GET请求
155     }
156
157     public static void postAsync(String url, Map<String, String> params, DataCallBack callBack) {
158         getInstance().p_postAsync(url, params, callBack);//异步POST请求
159     }
160
161     /**
162      * 数据回调接口
163      */
164     public interface DataCallBack {
165         void requestFailure(Call call, IOException e);
166
167         void requestSuccess(String result);
168     }
169
170 }

MainActivity.class   工具类的调用方法



  1 package com.example.administrator.okhttp3;
  2
  3 import android.os.Bundle;
  4 import android.support.v7.app.AppCompatActivity;
  5 import android.view.View;
  6 import android.widget.Button;
  7 import android.widget.TextView;
  8
  9 import java.io.IOException;
 10 import java.util.HashMap;
 11 import java.util.Map;
 12
 13 import okhttp3.Call;
 14 import okhttp3.OkHttpClient;
 15 import okhttp3.Request;
 16 import okhttp3.Response;
 17
 18 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 19     private static OkHttpClient client = new OkHttpClient();
 20     private Request request;
 21     private Response response;
 22
 23     private Button button1, button2, button3, button4;
 24     private TextView textView;
 25
 26     @Override
 27     protected void onCreate(Bundle savedInstanceState) {
 28         super.onCreate(savedInstanceState);
 29         setContentView(R.layout.activity_main);
 30         button1 = (Button) findViewById(R.id.btn_one);
 31         button2 = (Button) findViewById(R.id.btn_two);
 32         button3 = (Button) findViewById(R.id.btn_three);
 33         button4 = (Button) findViewById(R.id.btn_four);
 34         button1.setOnClickListener(this);
 35         button2.setOnClickListener(this);
 36         button3.setOnClickListener(this);
 37         button4.setOnClickListener(this);
 38         textView = (TextView) findViewById(R.id.tv);
 39     }
 40
 41     @Override
 42     public void onClick(View view) {
 43         switch (view.getId()) {
 44             case R.id.btn_one://同步GET 调用方法
 45
 46                 new Thread(new Runnable() {
 47                     @Override
 48                     public void run() {
 49                         try {
 50                             final String message = OKhttpManager.getSyncAsString("http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=jsonp9");
 51                             runOnUiThread(new Runnable() {
 52                                 @Override
 53                                 public void run() {
 54                                     textView.setText(message);
 55                                 }
 56                             });
 57                         } catch (IOException e) {
 58                             e.printStackTrace();
 59                         }
 60                     }
 61                 }).start();
 62
 63                 break;
 64             case R.id.btn_two://异步GET 调用方法
 65                 OKhttpManager.getAsync("http://web.juhe.cn:8080/finance/exchange/rmbquot", new OKhttpManager.DataCallBack() {
 66                     @Override
 67                     public void requestFailure(Call call, IOException e) {
 68                         /**
 69                          * 加载失败,回调这个方法
 70                          * */
 71                     }
 72
 73                     @Override
 74                     public void requestSuccess(String result) {
 75                         textView.setText(result);
 76                     }
 77                 });
 78                 break;
 79             case R.id.btn_three://POST提交表单 调用方法
 80                 Map<String, String> params = new HashMap<>();
 81                 params.put("cellphone", "123456");//用户名
 82                 params.put("password", "123456");//密码
 83                 OKhttpManager.postAsync("http://58.250.31.19:28080/afeducation/appfront/main/loginUser_app.do", params, new OKhttpManager.DataCallBack() {
 84                     @Override
 85                     public void requestFailure(Call call, IOException e) {
 86                         textView.setText(e.toString());
 87                     }
 88
 89                     @Override
 90                     public void requestSuccess(String result) {
 91                         textView.setText(result);
 92                     }
 93                 });
 94                 break;
 95             case R.id.btn_four://文件下载 调用方法
 96
 97                 break;
 98         }
 99     }
100 }

activity_main.xml   布局文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     android:paddingBottom="@dimen/activity_vertical_margin"
 8     android:paddingLeft="@dimen/activity_horizontal_margin"
 9     android:paddingRight="@dimen/activity_horizontal_margin"
10     android:paddingTop="@dimen/activity_vertical_margin"
11     tools:context="com.example.administrator.okhttp3.MainActivity">
12
13     <Button
14         android:id="@+id/btn_one"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:text="同步get" />
18
19     <Button
20         android:id="@+id/btn_two"
21         android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23         android:text="异步get" />
24
25     <Button
26         android:id="@+id/btn_three"
27         android:layout_width="wrap_content"
28         android:layout_height="wrap_content"
29         android:text="Post提交表单" />
30
31     <Button
32         android:id="@+id/btn_four"
33         android:layout_width="wrap_content"
34         android:layout_height="wrap_content"
35         android:text="文件下载" />
36
37     <TextView
38         android:id="@+id/tv"
39         android:layout_width="wrap_content"
40         android:layout_height="wrap_content"
41         android:text="text" />
42 </LinearLayout>

以前都是用Volley去进行网络交互,时间久了,也想换换新的东西。网络请求框架各具特色,需要自己不断探索和选择。加油!

				
时间: 2024-12-10 06:54:32

OKhttp的封装(上)的相关文章

安卓OKhttp请求封装

目前安卓开发中使用的网络工具为OKhttp,但是okhttp的使用还不是很方便,在okhttp的基础上再对请求进行封装会极大的方便网络调用. 下面直接上代码. 请求封装 public class HttpUtil { public static void sendOKHttpRequest(String address, Map<String,String> head,Map<String,String> body,okhttp3.Callback callback){ OkHtt

android 开发 - 使用okhttp框架封装的开发框架

概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 oknet是一套基于okhttp的android网络http框架,封装了请求参数处理,日志打印. Github地址 https://github.com/vir56k/oknet 特性 1.简洁的语法 2.支持自定义处理 message code 不等于0 的情形 3.支持文件上传 4.完整清晰的l

okhttp实现断点上传

前言 之前项目需要上传大文件的功能,上传大文件经常遇到上传一半由于网络或者其他一些原因上传失败.然后又得重新上传(很麻烦),所以就想能不能做个断点上传的功能.于是网上搜索,发现市面上很少有断点上传的案例,有找到一个案例也是采用SOCKET作为上传方式(大文件上传,不适合使用POST,GET形式).由于大文件夹不适合http上传的方式,所以就想能不能把大文件切割成n块小文件,然后上传这些小文件,所有小文件全部上传成功后再在服务器上进行拼接.这样不就可以实现断点上传,又解决了http不适合上传大文件

java_day25_UUID,封装上传,jsp

jsp和上传的封装 一.jsp的简介 1.jsp是java server pages允许在页面中使用java作为脚本语言动态生成html代码 2.jsp首先和html的区别,html可以直接放在浏览器中执行但是jsp必须把tomcat启动起来才能看到效果 3.组成部分:1.静态内容;2.指令;3.表达式;4.脚本;5.声明;6.注释 3.1注释:jsp有html使用的注释,java使用的注释,和自己的注释 第一种:跟html注释一样,此注释是第一种,在客户端可以看见 第二种jsp注释,在客户端看

OKhttp的封装(下)

OKhttpManager2.Class  请求工具类 1 package com.example.administrator.okhttp3; 2 3 import android.os.Handler; 4 import android.os.Looper; 5 6 import java.io.IOException; 7 import java.util.HashMap; 8 import java.util.Map; 9 10 import okhttp3.Call; 11 impor

PHP中封装上传文件函数

<?php /* *文件上传 * * */ //var_dump($_FILES); /* 多文件上传处理 $data = $_FILES['icon']; $name = $data['name']; if (is_array($name)) { for ($i=0; $i<count($name); $i++) { echo $data['tmp_name'][$i].'<br />'; } } else { echo '单个文件上传'; } */ $mimes = ['ima

Okhttp的封装和回调

public class HttpUtil { static HttpUtil util; private final OkHttpClient client; // 私有化构造方法 private HttpUtil(){ client = new OkHttpClient(); } public static HttpUtil getInstance(){ if(util == null){ synchronized (HttpUtil.class){ util = new HttpUtil(

16_封装上传多图组件

1. 创建子组件并剪贴内容 2. 子组件vue传值修改 3. 父组件调用 原文地址:https://www.cnblogs.com/luwei0915/p/12684442.html

Android实际开发之网络请求组件的封装(OkHttp为核心)

趁周末时间撸了两天代码,将OkHttp网络请求框架进行了一次简单封装,对于实际开发非常有用.. 此次封装主要针对我们经常使用的网络请求的步骤进行封装,在已有框架OkHttp的基础上进行实际开发的封装 发送一个网络请求,有以下三个功能模块: 一:request处理 二:OkHttp核心处理 三:callback处理 我们进行网络请求组件的封装也是根据这三大模块进行封装的,下面规划一下这次封装的一个思维导图: 根据以上思维导图,我们第一步,先进行request的封装: 以下是封装的一个CommonR