Bmob上传、下载文件 您所在的位置:网站首页 bmob上传头像 Bmob上传、下载文件

Bmob上传、下载文件

2024-01-25 05:22| 来源: 网络整理| 查看: 265

课设终于做完了,总结一下这个过程中遇到的问题。 Bmob的上传、下载文件。 说实话,Bmob的开发文档实在是坑,就写了点最简单的用法,而且当时去网上找资料也是找了好久,没几篇能看的,最后我也不知道怎么的就把上传、下载搞好了。。。现在来总结一下:

我这个方法的目的是给Bmob数据库内的User表的某一个用户设置对应头像。 先上代码:

private void uploadPic() { final String imagePath = getExternalCacheDir()+ "/output_image.ipg"; final BmobFile icon = new BmobFile(new File(imagePath)); icon.uploadblock(new UploadFileListener() { @Override public void done(BmobException e) { if (e == null){ Log.w(TAG, "上传成功。。。。。。。。。。。。。。。"); iconStringUrl = icon.getFileUrl(); User user = new User(); BmobQuery query = new BmobQuery(); query.addWhereEqualTo("UserName", name); query.findObjects(new FindListener() { @Override public void done(List list, BmobException e) { if (e == null){ for (User user1 : list){ objectId = user1.getObjectId(); Log.w(TAG, "获取id成功"+objectId); } User user2 = new User(); user2.setIcon(icon); user2.update(objectId, new UpdateListener() { @Override public void done(BmobException e) { if (e == null){ Toast.makeText(MainActivity.this, "信息更新成功", Toast.LENGTH_SHORT).show(); }else { Log.w(TAG, "失败"+e.getErrorCode()); } } }); }else { Log.w(TAG, "获取id失败"+e.getErrorCode()); } } }); try{ iconUrl = new URL(iconStringUrl); } catch (IOException e1){ e1.printStackTrace(); } }else { Log.w(TAG, "上传失败。。。。。。。。。。。。。"+e.getErrorCode()); } } }); }

来解释一下: String imagePath 是我要上传照片的本地存储路径,getExternalCacheDir()是获得当前应用的缓存目录,使用这个目录可以不用申请SD卡访问权限,”/output_image.ipg”表示在缓存目录下的 output_image.jpg 这个图片文件,记得一定要加上“/”,否则这个路径为空。 final BmobFile icon = new BmobFile(new File(imagePath)); Bmob的文件时以file形式存在的,所有我们得以file形式上传,怎么变成file形式上传呢,就是上面那行代码。固定格式吧,记住就好。 有了BmobFile后,接下来就可以将它上传了。 icon.uploadblock(new UploadFileListener() { @Override public void done(BmobException e) {} 这就是上传的固定格式。我们可以在done内进行是否上传成功的判断,就是第一个if、else,如果成功,那么e==null,否则,让e打印错误代码,去官网查看错误代码详情。 接下来,如果上传成功:iconStringUrl = icon.getFileUrl(); iconStringUrl是一个string字符串,用来保存icon上传成功后的url地址(如果要下载,必须要此地址,不下载可以不获取),而 icon.getFileUrl() 则是Bmob提供的获取当前上传文件url地址的方法。 其实到现在就已经上传成功了,只不过我们需要把这个文件和用户名对应起来,所以我们需要将其更新到User表内,使之填入当前用户的头像那一列。所以现在开始更新?不,Bmob很蛋疼的一点是得根据ObjectId来更新对应行(我不知道有没有其他方法了。。。),所以在更新前我们需要获取当前user的name,根据这个name去查他的ObjectId,然后根据这个ObjectId来进行更新。 然后查询ObjectId我就不解释了,基本用法而已。 最后更新: User user2 = new User(); user2.setIcon(icon); user2.update(objectId, new UpdateListener() { @Override public void done(BmobException e) { if (e == null){ Toast.makeText(MainActivity.this, “信息更新成功”, Toast.LENGTH_SHORT).show(); }else { Log.w(TAG, “失败”+e.getErrorCode()); } } }); 当弹出toast的时候说明更新成功,头像文件和我们当前用户对应起来了。现在看起来还是挺简单的,可当时确实很棘手。。。很烦躁。。。而且头很铁,搞了一个下午,就是把它硬搞出来。。。

然后是从Bmob下载: 还是先上代码:

private void refreshSeasonalFoodList(){ BmobQuery query = new BmobQuery(); query.addWhereNotEqualTo("SeasonalName", "空"); query.findObjects(new FindListener() { @Override public void done(List list, BmobException e) { if (e == null) { Log.w(TAG, "查表成功"); for (TableSeasonalFood tabFood : list) { titles[ListSize] = tabFood.getTitle(); describes[ListSize] = tabFood.getDescribe(); objectId[ListSize] = tabFood.getObjectId(); BmobFile file = tabFood.getImage(); imageUrl[ListSize] = file.getFileUrl(); Log.w(TAG, titles[ListSize]); Log.w(TAG, describes[ListSize]); Log.w(TAG, objectId[ListSize]); Log.w(TAG, imageUrl[ListSize]); ListSize++; File image = new File(getContext().getExternalCacheDir(), tabFood.getObjectId()+".PNG"); String path = getContext().getExternalCacheDir()+"/"+tabFood.getObjectId()+".PNG"; Log.w(TAG, path); if (image.exists()){ Log.w(TAG, "exists"+ ListSize); Bitmap exitsBitmap = convertToBitmap(path, 250, 200); bitmaps[ListSize-1] = exitsBitmap; }else { try{ image.createNewFile(); url = new URL(imageUrl[ListSize-1]); }catch (IOException e2){ e2.printStackTrace(); } //开始下载 downloadPic(url, image); } } }else { Log.w(TAG, "查询时令错误:"+e.getErrorCode()); } for (int i = 0; i < ListSize; i++){ Log.w(TAG, "开始加载数据"); SeasonalOne seasonalOne =new SeasonalOne(); seasonalOne.setTitle(titles[i]); seasonalOne.setDescribe(describes[i]); seasonalOne.setBitmap(bitmaps[i]); seasonalOnes.add(seasonalOne); } adapter = new MySeasonalListAdapter(seasonalOnes, getContext()); mListView.setAdapter(adapter); mFreshVIew.setRefreshing(false); } }); }

大致说一下吧。。。 query.addWhereNotEqualTo(“SeasonalName”, “空”); 因为bmob没有直接查询全部的数据方法,所以我在表内加了一行SeasonalName 为 “空”的行,查询所有该列不为“空”的数据,即查询了该表的全部数据(这是一波很有灵性的查表)。 查询成功,遍历该表内数据,并把之存放于数组内,最重要的是这两行: BmobFile file = tabFood.getImage(); imageUrl[ListSize] = file.getFileUrl(); 这里的文件列名是 Image,需要用BmobFile类型来接收,然后再获取它的url。 获取到url后就好办了,我先进行判断该文件是否存在,如果存在就将图片转换成Bitmap形式,否则下载(下载需要URL,所以我把URL作为参数传给了下载函数)。 大致的方法就是这样,一些具体的怎么通过URL下载文件,怎么转换为bitmap等自己查资料把。。。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有