河源网站推广,做一个网页版面多少钱,网站开发有啥作用,美好乡村建设网站下面以一个例子来讲解在项目中如何使用OKHttp来对本地图片做个最简单的上传功能#xff0c;基本上无封装#xff0c;只需要简单调用便可#xff08;对于OKHttp的引入不再单独做介绍#xff09;。
1#xff1a;构建上传图片附带的参数#xff08;params#xff09;
Map…下面以一个例子来讲解在项目中如何使用OKHttp来对本地图片做个最简单的上传功能基本上无封装只需要简单调用便可对于OKHttp的引入不再单独做介绍。
1构建上传图片附带的参数params
MapString, Object reqData new HashMap();
RequestBody requestFile RequestBody.create(MediaType.parse(multipart/form-data), file);
MultipartBody.Part filePart MultipartBody.Part.createFormData(file, file.getName(), requestFile);
其中reqData中是需要传入的参数如接口请求token时间戳版本号等。然后构建RequestBody,表示上传类型,这里以form表单形式提交当然也可以以Json格式提交只要和后台约定好便可。然后构建filePart,有单个图片文件和多个文件图片选项多个文件也是封装在MultipartBody.Part中的这里以单个文件为例。
2第二步把参数与图片数据封装到心情求体里。这里ReqData中便是传递需要的参数这里对传递过来的参数重新取出以键值对方式构建。
MediaType MEDIA_TYPE_PNG MediaType.parse(multipart/form-data);
MultipartBody multipartBody new MultipartBody.Builder().setType(MEDIA_TYPE_PNG).addFormDataPart(token, reqData.get(token).toString()).addFormDataPart(ts, reqData.get(ts).toString()).addFormDataPart(rand, reqData.get(rand).toString()).addFormDataPart(platform, reqData.get(platform).toString()).addFormDataPart(version, reqData.get(version).toString()).addFormDataPart(source, appimg).addPart(filePart).build();
3发起请求,这里需要注意的有几点
1把上述构建的请求体传到Request中在OkHttpClient的配置中做简单配置参数。如请求连接时间读写时间等。
2在Request中设置上传URL就是需要上传的接口详细地址。
3在回调函数中接收返回的数据注意在回调函数中无论成功还是失败都是默认在子线程中当我们需要操作UI时需要切换到主线程中避免发生应用Crash
Request.Builder requestBuild new Request.Builder();
Request request requestBuild.url(UPLOAD_PHOTO_URL).post(multipartBody).build();
OkHttpClient okHttpClient new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS).build();
okHttpClient.newCall(request).enqueue(new Callback() {Overridepublic void onFailure(NonNull Call call, NonNull IOException e) {//返回失败的数据hideLoading();Log.e(onFailure img--, e.getMessage());}Overridepublic void onResponse(NonNull Call call, NonNull Response response) throws IOException {//返回成功的数据String newAvatar response.body().string();Log.e(onResponse img--, newAvatar);hideLoading();imageUrl newAvatar;locolPath file.getAbsolutePath();//切换到主线程中去操作UIrunOnUiThread(new Runnable() {Overridepublic void run() {//本地封装的图片加载工具类加载已上传成功的图片ImageUtil.loadLocalFile(XXActivity.this, iv_graph, file.getAbsolutePath());}});}
});