上一篇我们说了如何传输数据,那么这一篇我们进阶一下,来谈谈如何传输文件,比如图片。
关于如何在bmob上注册和申请,上一篇已经有说明,不懂的读者可以去看看,然后我们直接进入到项目中,首先我们还是老规矩,初始化bmob:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bmob.initialize(MainActivity.this, "267ef22e7f2a44fee01869204b25da3f");
initView();
initListener();
// initData();
}
这个初始化很容易,就不再赘述了,然后我们建一个新的bean类:
<span style="font-size:18px;">public class PersonBean extends BmobObject{
private String Name;
private String password;
private BmobFile file;
public PersonBean(String Name,String password,BmobFile file){
this.Name = Name;
this.password = password;
this.file = file;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public BmobFile getFile() {
return file;
}
public void setFile(BmobFile file) {
this.file = file;
}
}</span>
其中包含了新的属性,bmobfile也就是bmob的sdk里自己封装的类型,是属于文件类,所以我们直接进行声明,然后进行文件的选择和上传:
<span style="font-size:18px;">uploadImage.setOnClickListener(new OnClickListener() {
@SuppressWarnings("unused")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
File file = new File("/mnt/sdcard/"+Path);
if (file != null) {
final BmobFile bmobFile = new BmobFile(file);
final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("正在上传。。。");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
bmobFile.upload(MainActivity.this, new UploadFileListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
url = bmobFile.getUrl();
insertObject(new PersonBean("绝地反击","123456",bmobFile));
Toast.makeText(MainActivity.this, "上传成功", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
@Override
public void onFailure(int arg0, String arg1) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "上传失败"+arg1, Toast.LENGTH_SHORT).show();
}
});
}else {
Toast.makeText(MainActivity.this, "文件为空", Toast.LENGTH_SHORT).show();
}
}
});</span>
这是在上传的按钮中进行上传事件的调用,至于选择的文件的方法,等下笔者会将所有源码给出,不用急。然后上传成功后我们可以在后台直接进行查看,这样:
左边点击文件服务,然后点击右边的文件管理就能够看所有上传的文件,就像这样:
这里面是笔者测试的文件,点击文件名称就能看到文件了。
说完了上传文件,我们来说一说下载文件,下载文件就是从平台分配给文件的url来进行下载和解析,直接看代码:
<span style="font-size:18px;">downloadBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("正在上传。。。");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Looper.prepare();
try {
Bitmap bitmap1=null;
URL myUrl;
url = "http://file.bmob.cn/" + url;
Toast.makeText(MainActivity.this, url+"", Toast.LENGTH_SHORT).show();
myUrl=new URL(url);
HttpURLConnection conn=(HttpURLConnection)myUrl.openConnection();
conn.setConnectTimeout(5000);
conn.connect();
InputStream is=conn.getInputStream();
bitmap1=BitmapFactory.decodeStream(is);
//把bitmap转成圆形
BitmapUtil bmuUtil = new BitmapUtil(MainActivity.this);
mBitmap=bmuUtil.toRoundBitmap(bitmap1);
is.close();
Message msg = mhandler.obtainMessage(1, mBitmap);
mhandler.sendMessage(msg);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Looper.loop();
}
}).start();
}
});</span>
这个和上面的一样,笔者也是在按钮的点击事件中写的,由于是demo,所以都是用匿名内部类,大家看方法就好,由于是耗时的网络操作,所以笔者用了线程进行界面的变换,关于线程的问题,笔者还有文章是关于这个方面的,大家有兴趣可以去看看,然后成果是这样:
源码的地址:http://pan.baidu.com/s/1hq4dseo 记得将APPID给换成自己申请的id。