Bmob的使用-上传图片
生活随笔
收集整理的这篇文章主要介绍了
Bmob的使用-上传图片
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Android Bmob 的图片上传与下载
| 上传方法 | 上床图片后放回一个 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的使用-上传图片的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 教女友用 trello 管理衣物和穿搭L
- 下一篇: C语言实现最大字段和(动态规划法和分治法