欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Bmob的使用-上传图片

发布时间:2023/12/31 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Bmob的使用-上传图片 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Android Bmob 的图片上传与下载

图片上传图片上传后,对象( user )里不要存 Bitmap 否则拖慢加载速度有烂费流量
上传方法上床图片后放回一个 BmobFile 对象,保存到 User 里
下载方法根据所获得 User 的BmobFile 成员信息,调用 .getUrl() 方法获得 Url 进行下载

实战项目:

亿签-让签到更简单( 实验室签到系统 ):点击跳转 https://github.com/FishInWater-1999/android-SignInSystem

图片上传部分

注:picPath 为访问相册或相机拍照后,获得的图片路径

/*定义一个Handler,定义延时执行的行为*/ public void chnageImage(){final String picPath = path;final BmobFile bmobFile = new BmobFile(imageFactory(picPath));bmobFile.uploadblock(new UploadFileListener() {@Overridepublic void done(BmobException e) {if(e==null){user.setImageFile(bmobFile);user.update(new UpdateListener() {@Overridepublic void done(BmobException e) {if (e == null) {Toast.makeText(MainActivity.this, "头像已更新", Toast.LENGTH_SHORT).show();} else {}}});//bmobFile.getFileUrl()--返回的上传文件的完整地址new Thread(){@Overridepublic void run() {while ( bitmap == null ){bitmap = BitmapFactory.decodeFile(picPath);}Message message = handler.obtainMessage();message.obj = 0;handler.sendMessage(message);}}.start();}else{Toast.makeText(MainActivity.this, "设置失败,请重新选择", Toast.LENGTH_SHORT).show();}}@Overridepublic void onProgress(Integer value) {// 返回的上传进度(百分比)}}); }

下载图片

new AvatarLoader(userViewHolder.head_icon, user).load();

这里需要两个封装类

public class AvatarLoader extends ImageLoader{private User mUser;public AvatarLoader(ImageView imageView, User user) {super(imageView);mUser = user;}public void load(){BmobQuery<User> q=new BmobQuery<>();q.getObject(mUser.getObjectId(), new QueryListener<User>() {@Overridepublic void done(User user, BmobException e) {if(user.getImageFile()!=null) {setUrl(user.getImageFile().getUrl());AvatarLoader.super.load();}}});} } public class ImageLoader extends Handler {private ImageView mImageView;private String mUrl;private Bitmap mBitmap;public ImageLoader(ImageView imageView, String url) {mImageView = imageView;mUrl = url;}public ImageLoader(ImageView imageView) {mImageView = imageView;}public void setUrl(String url) {mUrl = url;}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 0) {new Thread(){@Overridepublic void run() {super.run();try{URL url=new URL(mUrl);URLConnection connection=url.openConnection();connection.connect();InputStream inputStream=connection.getInputStream();mBitmap= BitmapFactory.decodeStream(inputStream);sendEmptyMessage(1);} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (NullPointerException e){e.printStackTrace();}}}.start();}else {if(mImageView.getMeasuredWidth()==0) {final ViewTreeObserver vto = mImageView.getViewTreeObserver();vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {vto.removeOnGlobalLayoutListener(this);adjustViewHeight();}});}else{adjustViewHeight();}}}public void load(){sendEmptyMessage(0);}private void adjustViewHeight(){ViewGroup.LayoutParams params=mImageView.getLayoutParams();float ratio = (float) mBitmap.getHeight() / mBitmap.getWidth();params.height = (int) (mImageView.getMeasuredWidth() * ratio);params.width=mImageView.getMeasuredWidth();mImageView.setImageBitmap(mBitmap);}}

由于拍摄的图片一般较大所以进程需要压缩

/* 压缩路径下的文件*/ private File imageFactory(String picPath){BitmapFactory.Options o=new BitmapFactory.Options();Bitmap bitmap=BitmapFactory.decodeFile(picPath, o);bitmap=Bitmap.createScaledBitmap(bitmap, 400, 400, false);File root= getExternalCacheDir();File pic=new File(root,"test.jpg");try {FileOutputStream fos=new FileOutputStream(pic);bitmap.compress(Bitmap.CompressFormat.JPEG,50,fos);} catch (FileNotFoundException e) {e.printStackTrace();}return pic; }

使用到这些内容的项目地址:

点击右边跳转:点击跳转 https://github.com/FishInWater-1999/android-SignInSystem

如果有帮助欢迎点赞哦~~

有问题请在评论区留言

总结

以上是生活随笔为你收集整理的Bmob的使用-上传图片的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。