1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| public class OkHttpEngine implements IHttpEngine { private static final OkHttpClient M_OK_HTTP_CLIENT = new OkHttpClient();
@Override public void get(Context context, String url, Map<String, Object> params, EngineCallback callback) { final String jointUrl = HttpUtils.joinParams(url, params); Log.e("Get请求路径: ", jointUrl); Request request = new Request.Builder() .url(url) .get() .tag(context) .build(); M_OK_HTTP_CLIENT.newCall(request).enqueue( new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { callback.onError(e); }
@Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { String result = Objects.requireNonNull(response.body()).string(); Log.e("Get返回结果: ", result); Looper.prepare(); callback.onSuccess(result); Looper.loop(); } } ); }
@Override public void post(Context context, String url, Map<String, Object> params, EngineCallback callback) { final String jointUrl = HttpUtils.joinParams(url, params); Log.e("Post请求路径: ", jointUrl); RequestBody requestBody = appendBody(params); Request request = new Request.Builder() .url(url) .tag(context) .post(requestBody) .build(); M_OK_HTTP_CLIENT.newCall(request).enqueue( new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { callback.onError(e); }
@Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { String result = Objects.requireNonNull(response.body()).string(); Log.e("Post返回结果: ", result); Looper.prepare(); callback.onSuccess(result); Looper.loop(); } } ); }
/** * 组装post请求参数body */ protected RequestBody appendBody(Map<String, Object> params) { MultipartBody.Builder builder = new MultipartBody.Builder() .setType(MultipartBody.FORM); addParams(builder, params); return builder.build(); }
/** * 添加参数 */ private void addParams(MultipartBody.Builder builder, Map<String, Object> params) { if (params != null && !params.isEmpty()) { for (String key : params.keySet()) { builder.addFormDataPart(key, params.get(key) + ""); Object value = params.get(key); if (value instanceof File) { //处理文件 -->Object -->file File file = (File) value; builder.addFormDataPart(key, file.getName(), RequestBody .create(file, MediaType.parse(guessMimeType(file.getAbsolutePath())))); } else if (value instanceof List) { try { List<File> fileList = (List<File>) value; for (int i = 0; i < fileList.size(); i++) { //获取文件 File file = fileList.get(i); builder.addFormDataPart(key + i, file.getName(), RequestBody .create(file, MediaType.parse(guessMimeType(file.getAbsolutePath())))); } } catch (Exception e) { e.printStackTrace(); } } else { builder.addFormDataPart(key, value + ""); } } } }
/** * 猜测文件的类型 */ private String guessMimeType(String path) { FileNameMap fileNameMap = URLConnection.getFileNameMap(); String contentTypeFor = fileNameMap.getContentTypeFor(path); if (contentTypeFor == null) { contentTypeFor = "application/octet-stream"; } return contentTypeFor; } }
|