本文章基于Bmob服务器的图片上传。 想了解其他服务器上传请绕道
本文章功能是单图片上传,批上传函数略有不同,自己去Bmob文档里面查看函数。
1、首先布局
![](https://img-blog.csdn.net/2018042120312563?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3R4eTgwNjg5MzYzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
很简单的布局, 就圆框Image使用有点技巧
gradle app里面加 :implementation 'de.hdodenhof:circleimageview:2.0.0'
XML:
2、我的数据类
public class IpetUser extends BmobUser{
public IpetUser(BmobFile user_pic) {
User_pic = user_pic;
}
public IpetUser(String objectId){setObjectId(objectId);}
private BmobFile User_pic;
public BmobFile getUser_pic() {
return User_pic;
}
public void setUser_pic(BmobFile user_pic) {
User_pic = user_pic;
}
}
![](https://img-blog.csdn.net/20180421203704197?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3R4eTgwNjg5MzYzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
字段与Bmob数据库里面的一致, 因为就操作头像(User_pic)数据,就不声明其他数据了。
3、MainActivity 里面的代码
注意几个地方:
Bmob APPID 用你自己的;我用了ButterKnife快捷声明控件对象 ,不懂的自己百度,配置方法我也写了篇文章 ——> 点击打开链接 相册接口调用我就不逼逼了,自己翻书 。这个相册借口调用的方法适用Android4.4版本以下。4.4以上调用方法复杂一点,想了解自己查资料吧。 推荐书籍《第一行代码》
手机图片与Bmob数据库交接关键 。图片——上传到Bmob文件管理里面——保存图片BmobFile信息到表里
这是第一个函数,上传图片到Bmob 的文件管理里面。
红圈里面的参数必须是 图片的真实地址!! (4.4以下获取真实地址容易,4.4以上获取就有所改动,不过大多APP都是4.4以下)
然后再写第二个函数 saveFile(file) ,用于保存BmobFile数据类型的数据 到相应的表里面 ,实际上是一个地址URL。
红圈是指定表里 , ID 为
zr3TKKKo的那条数据 。
public class MainActivity extends AppCompatActivity {
@BindView(R.id.head_image)
CircleImageView headImage;
@BindView(R.id.registre_button_signup)
Button registreButtonSignup;
public static final int CHOOSE_PHOTO=2;
String mpath=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Bmob默认初始化
Bmob.initialize(this, "XXXXXXX");
//ButterKnife初始化
ButterKnife.bind(this);
registreButtonSignup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
/* 开启Pictures画面Type设定为image */
intent.setType("image/*");
/* 使用Intent.ACTION_GET_CONTENT这个Action */
intent.setAction(Intent.ACTION_GET_CONTENT);
/* 取得相片后返回本画面 */
startActivityForResult(intent, 1);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
mpath = getImagePath(uri, null);
//上传头像
final BmobFile file=new BmobFile(new File(mpath));
file.upload(new UploadFileListener() {
@Override
public void done(BmobException e) {
if(e==null){
saveFile(file);
}
}
});
ContentResolver cr = this.getContentResolver();
try {
Log.e("qwe",mpath.toString());
Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
/* 将Bitmap设定到ImageView */
headImage.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
Log.e("qwe", e.getMessage(),e);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
private void saveFile(BmobFile file) {
IpetUser user=new IpetUser("zr3TKKKo");
user.setUser_pic(file);
user.update(new UpdateListener() {
@Override
public void done(BmobException e) {
if(e==null){
Toast.makeText(MainActivity.this,"上传成功",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this,"上传失败",Toast.LENGTH_SHORT).show();
}
}
});
}
private String getImagePath(Uri uri, String seletion) {
String path = null;
Cursor cursor = getContentResolver().query(uri, null, seletion, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
}
cursor.close();
}
return path;
}
}
结尾:第二次写请大家多多指教。有错误请在评论区指正 ,我好进步 !~~~
该功能就只能上传图片和改变_user表里 BmobFile 数据的值。 就是上传图片到服务器功能
|