您现在的位置是:首页 > 文章详情

Android图文上传

日期:2018-07-02点击:373

这次介绍下如何使用Retrofit+rxjava上传图片和文字

接口的写法
public interface MarketApiService { @Multipart//这里一定要加这个 @POST("market/addNewOrder") Observable<ResultBean> addNewOrder(@QueryMap Map<String, String> map, @Part MultipartBody.Part pic); } 
上传的代码
Map<String, String> params = new HashMap<String, String>(); params.put("ship_type_id", type); params.put("cons_number", consNumber); params.put("note", beizhu); File fileByUri = FileUtil.getFileByUri(imagepath, this); //这里最好写成MediaType.parse("image/*"),之前写成MediaType.parse("image/png")上传失败 RequestBody photoRequestBody = RequestBody.create(MediaType.parse("image/*"), fileByUri); MultipartBody.Part photo = MultipartBody.Part.createFormData("file", fileByUri.getName(), photoRequestBody); RetrofitUtils.getInstance().getApiServier(MarketApiService.class) .addNewOrder(params,photo) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<ResultBean>() { @Override public void accept(ResultBean resultBean) throws Exception { } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { } }); 
这里的图片选择器使用的是知乎的图片选择器https://github.com/zhihu/Matisse
另外这里还有将Uri转换为File的工具类(因为知乎图片选择器返回的是Uri)
public static File getFileByUri(Uri uri, Context context) { String path = null; if ("file".equals(uri.getScheme())) { path = uri.getEncodedPath(); if (path != null) { path = Uri.decode(path); ContentResolver cr = context.getContentResolver(); StringBuffer buff = new StringBuffer(); buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")"); Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA }, buff.toString(), null, null); int index = 0; int dataIdx = 0; for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) { index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID); index = cur.getInt(index); dataIdx = cur.getColumnIndex(MediaStore.Images.ImageColumns.DATA); path = cur.getString(dataIdx); } cur.close(); if (index == 0) { } else { Uri u = Uri.parse("content://media/external/images/media/" + index); System.out.println("temp uri is :" + u); } } if (path != null) { return new File(path); } } else if ("content".equals(uri.getScheme())) { // 4.2.2以后 String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null); if (cursor.moveToFirst()) { int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); path = cursor.getString(columnIndex); } cursor.close(); return new File(path); } else { //Log.i(TAG, "Uri Scheme:" + uri.getScheme()); } return null; } 

个人博客https://myml666.github.io/

原文链接:https://yq.aliyun.com/articles/665576
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章