其中使用了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
时间: 2024-10-08 08:17:22