关于Bmob服务器-图片上传功能实现

本文章基于Bmob服务器的图片上传。 想了解其他服务器上传请绕道

本文章功能是单图片上传,批上传函数略有不同,自己去Bmob文档里面查看函数。


1、首先布局

关于Bmob服务器-图片上传功能实现_第1张图片

很简单的布局, 就圆框Image使用有点技巧

gradle app里面加   :implementation 'de.hdodenhof:circleimageview:2.0.0'  

 XML:

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_gravity="center_horizontal"
    android:id="@+id/head_image"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:src="@drawable/ic_launcher_background"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="60dp"
    app:civ_border_width="0.5dp"
    app:civ_border_color="#4a9bec" />

<Button
    android:id="@+id/registre_button_signup"
    android:layout_width="140dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="10dp"
    android:textSize="15dp"
    android:hint="Sign up"
    android:layout_height="40dp"
    android:text="upload"/>

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;
    } 
}


字段与Bmob数据库里面的一致, 因为就操作头像(User_pic)数据,就不声明其他数据了。


3、MainActivity 里面的代码

注意几个地方:

  • Bmob APPID  用你自己的;
  • 我用了ButterKnife快捷声明控件对象 ,不懂的自己百度,配置方法我也写了篇文章 ——> 点击打开链接
  •  相册接口调用我就不逼逼了,自己翻书 。这个相册借口调用的方法适用Android4.4版本以下。4.4以上调用方法复杂一点,想了解自己查资料吧。 推荐书籍《第一行代码》

    手机图片与Bmob数据库交接关键 。图片——上传到Bmob文件管理里面——保存图片BmobFile信息到表里
    关于Bmob服务器-图片上传功能实现_第2张图片
    这是第一个函数,上传图片到Bmob 的文件管理里面。
    红圈里面的参数必须是 图片的真实地址!! (4.4以下获取真实地址容易,4.4以上获取就有所改动,不过大多APP都是4.4以下)
     然后再写第二个函数 saveFile(file) ,用于保存BmobFile数据类型的数据 到相应的表里面 ,实际上是一个地址URL。
关于Bmob服务器-图片上传功能实现_第3张图片
红圈是指定表里  , 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 数据的值。 就是上传图片到服务器功能

你可能感兴趣的:(Android,Bmob)