其中使用了RXJava。

 1 public class HttpDataManager {
 2
 3     private static HttpDataManager INSTANCE;
 4     private RequestService service;
 5     private static String ONLINE_URL = "http://baidu.com/";
 6
 7     public static HttpDataManager getInstance() {
 8         if (INSTANCE == null) {
 9             INSTANCE = new HttpDataManager();
10         }
11         return INSTANCE;
12     }
13
14     public HttpDataManager() {
15         this.service = createService();
16     }
17
18     private RequestService createService() {
19         OkHttpClient client = new OkHttpClient.Builder()
20                 .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC))
21                 .build();
22         Retrofit retrofit = new Retrofit.Builder()
23                 .client(client)
24                 .baseUrl(ONLINE_URL)
25                 .addConverterFactory(ResponseConvertFactory.create())
26                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
27                 .build();
28         return retrofit.create(RequestService.class);
29     }
30
31     public RequestService getService() {
32         return service;
33     }
34 }

 1 public interface RequestService {
 2
 3     /**
 4      * getOcrRecog
 5      * @return
 6      */
 7     @Multipart
 8     @POST("reventondc/v5/ocr/json")
 9     Observable<OcrRecogResult> getOcrRecog(@Part MultipartBody.Part file);
10 }

 1 public class GsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {
 2
 3     private final Gson gson;
 4     private final Type type;
 5
 6     GsonResponseBodyConverter(Gson gson, Type type) {
 7         this.gson = gson;
 8         this.type = type;
 9     }
10
11     @Override
12     public T convert(ResponseBody value) throws IOException {
13         String response = value.string();
14         checkError(response);
15
16         return gson.fromJson(response, type);
17     }
18
19
20     public void checkError(String response) throws MyHttpException {
21         try {
22             JSONObject rawResponeJson = new JSONObject(response);
23             int code = 200;
24             String msg = "";
25             if (rawResponeJson.has("code")) {
26                 code = rawResponeJson.getInt("code");
27             }
28             if (rawResponeJson.has("message")) {
29                 msg = rawResponeJson.getString("message");
30             }
31             if (code != 200) {
32                 throw new MyHttpException(code, msg);
33             }
34         } catch (JSONException e) {
35             e.printStackTrace();
36         }
37     }
38 }

 1 public class ResponseConvertFactory extends Converter.Factory {
 2
 3
 4     /**
 5      * Create an instance using a default {@link Gson} instance for conversion. Encoding to JSON and
 6      * decoding from JSON (when no charset is specified by a header) will use UTF-8.
 7      */
 8     public static ResponseConvertFactory create() {
 9         return create(new Gson());
10     }
11
12     /**
13      * Create an instance using {@code gson} for conversion. Encoding to JSON and
14      * decoding from JSON (when no charset is specified by a header) will use UTF-8.
15      */
16     public static ResponseConvertFactory create(Gson gson) {
17         return new ResponseConvertFactory(gson);
18     }
19
20     private final Gson gson;
21
22     private ResponseConvertFactory(Gson gson) {
23         if (gson == null) {
24             throw new NullPointerException("gson == null");
25         }
26         this.gson = gson;
27     }
28
29     @Override
30     public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
31                                                             Retrofit retrofit) {
32         return new GsonResponseBodyConverter<>(gson,type);
33     }
34 }

 1 public class MyHttpException extends RuntimeException {
 2
 3     public int code;
 4     public String msg;
 5
 6     public MyHttpException(int code, String msg){
 7         super(msg);
 8         this.code = code;
 9         this.msg = msg;
10     }
11
12 }

调用方式:

 1 mOcrConsumer = new Consumer<OcrRecogResult>() {
 2
 3             @Override
 4             public void accept(OcrRecogResult ocrRecogResult) throws Exception {
 5                 if (mCallBack != null) {
 6                     mCallBack.success(ocrRecogResult);
 7                 }
 8             }
 9         };
10
11         mThrowableConsumer = new Consumer<Throwable>() {
12             @Override
13             public void accept(Throwable throwable) throws Exception {
14                 if (mCallBack != null) {
15                     mCallBack.fail(throwable.getMessage());
16                 }
17             }
18         };

传输本地图片文件:

1 File file = new File(filepath);
2
3         RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
4         MultipartBody.Part body = MultipartBody.Part.createFormData("pic", file.getName(), requestFile);
5
6         HttpDataManager.getInstance().getService().getOcrRecog(body).subscribeOn(Schedulers.io())
7                 .subscribe(mOcrConsumer, mThrowableConsumer);

传输内存图片:

1 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
2         bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
3
4         RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), byteArrayOutputStream.toByteArray());
5         MultipartBody.Part body = MultipartBody.Part.createFormData("pic", "src.jpg", requestFile);
6
7         HttpDataManager.getInstance().getService().getOcrRecog(body).subscribeOn(Schedulers.io())
8                 .subscribe(mOcrConsumer, mThrowableConsumer);

转载于:https://www.cnblogs.com/zl1991/p/8609611.html

okhttp进行网络传输文件相关推荐

  1. Android 实现无网络传输文件(2)

    在我的上一篇文章:Android 实现无网络传输文件,我介绍了通过 Wifi Direct(Wifi 直连)实现 Android 设备之间进行文件传输的方法,可以在无移动网络的情况下实现点对点的文件传 ...

  2. oracle asm和文件系统,Oracle工具之--ASM与文件系统及跨网络传输文件

    Oracle工具之--ASM与文件系统及跨网络传输文件 Oracle DBMS_FILE_TRANSFER可以实现文件系统和ASM磁盘组之间实现文件传输及ASM磁盘组之间跨网络的传输. DBMS_FI ...

  3. Oracle工具之--ASM与文件系统及跨网络传输文件

    Oracle工具之--ASM与文件系统及跨网络传输文件   Oracle DBMS_FILE_TRANSFER可以实现文件系统和ASM磁盘组之间实现文件传输及ASM磁盘组之间跨网络的传输. DBMS_ ...

  4. 吊炸天之Android 如何实现无网络传输文件

    热文导读 | 点击标题阅读 欢迎加入Java和Android架构知识星球 Android大厂面试题锦集附答案(BAT TMD JD 小米) 程序员如何进阶成为大神? 作者:叶应是叶 原文:http:/ ...

  5. Java 文件传输小工具,网络传输文件,内网传输

    文件传输小工具,网络传输文件,内网传输 换了一台电脑,想把一台电脑的资料放到另一太电脑上,由于没有太大的U盘就动手用Java写了个小工具.有需要的朋友下载使用! 运行环境 运行环境需要安装JDK,并配 ...

  6. android文件搜索广播,Android 实现无网络传输文件

    因为客户端可能会多次发起连接请求,所以当此处文件传输完成后(不管成功或失败),都需要重新 startService ,让服务再次堵塞等待客户端的连接请求 FileTransfer 包含三个字段,MD5 ...

  7. 为嵌入式linux添加网络功能并用tftp传输文件(以ZYNQ为例)

    在调试V4L2过程中需要用网络传输文件,将添加网络功能的过程记录在此.这里以ZYNQ为例. 首先需要在VIVADO中勾选以太网如下, 注意这里不要忘记勾选MDIO,需要通过这个接口与PHY芯片进行通信 ...

  8. 怎样用计算机传输文件,如何使用 Windows 轻松传送在计算机之间移动文件

    本文提供有关使用轻松文件传输功能将数据从旧计算机传输到新计算机的信息.Windows Vista.Windows 7 和 Windows 8.1 上提供此 Windows 功能.Windows 10 ...

  9. 实现了 Android 设备之间通过 Wifi 传输文件的功能

    WifiFileTransfer 项目地址:leavesC/WifiFileTransfer 简介:实现了 Android 设备之间通过 Wifi 传输文件的功能 更多:作者   提 Bug 标签: ...

最新文章

  1. 用深度神经网络搭建马赛克神器,高清无码效果感人
  2. 高速串行总线系列(1)8B/10B编码技术
  3. 李开复:为什么我认为“AI+”有四阶段
  4. mysql的索引优化_MySQL索引优化与分析(重要)
  5. C# 输出目录结构树到Console或文本文件
  6. c++ string 回文串_第33期:上海自来水来自海上,回文字符串验证!
  7. Flink 小贴士 (7): 4个步骤,让 Flink 应用达到生产状态
  8. Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks and SignalR
  9. 指导老师对计算机论文的评语,指导老师对论文的评语
  10. DW2019HTML中没有文本对象,Dreamweaver CC2019文字或图片添加空连接方法
  11. 【Java基础】ArraylistLinkedList机制,failfastfailsafe
  12. python项目打包部署到ios_Python实现iOS自动化打包详解
  13. excel单元格内容拆分_Excel | 单元格内容换行的两种方法
  14. 【VOLTE】【SRVCC】【1】 VOLTE SRVCC(SRVCC TO 3GPP)
  15. Jenkins拉取代码返回错误码128
  16. 英文、数字和汉字、日文的字符判断 英文占1个字符,中文汉字占2个字符 el-form表单验证规则
  17. 什么表示计算机存储信息的能力以字节为单位,大学计算机基础考试判断.doc
  18. uni-app关于uni.navigateTo的坑以及解决方案
  19. 程序员面试常见问题有哪些?如何回答才能拿到offer?
  20. 【天池大赛】淘宝直播商品识别

热门文章

  1. python 画云图_【词云图】如何用python的第三方库jieba和wordcloud画词云图
  2. android 回收站设计,android-如何根据屏幕尺寸设置回收站视图项目的宽度尺寸?...
  3. php调用execute,php运行生命周期--脚本执行阶段 php_execute
  4. 每天一个linux命令(12):more命令
  5. python【力扣LeetCode算法题库】58-最后一个单词的长度
  6. 第十一届蓝桥杯校内赛题解
  7. qt怎么做滑动调节参数_冬天冰箱温度怎么调?0到7旋钮是做什么的?学会调节省电又保鲜...
  8. pmp学习资料_PMP怎样叫通过考试,拿到证书?
  9. 西安网络推广浅谈SEO优化旧内容页面能不能删?怎么删?
  10. 危害网站关键词优化的因素如何避免?