首页 > 解决方案 > 更新 Firebase 实时数据库值的问题

问题描述

我试图在 Firebase 实时数据库上推送一些数据,但我面临的问题是它在上传图像后没有更新图像属性值(图像的默认值为 defaultimg)。新节点没有更新值,而是添加了 image 的值。

下面是代码。

private void postAd(final String title,final String description,final String category,final
        String price) {
    FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
    String uid = currentUser.getUid();

    mDatabase = FirebaseDatabase.getInstance().getReference().child("AdvertData");
    HashMap<String,String> userMap = new HashMap<>();
    userMap.put("title", title);
    userMap.put("description",description);
    userMap.put("category",category);
    userMap.put("image","defaultimg");
    userMap.put("price",price);

    mDatabase.push().setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if(task.isSuccessful()){
                mProgess.hide();
                Toast.makeText(getView().getContext(),"Data Uploaded Successfully",Toast
                        .LENGTH_SHORT).show();
                mTitle.getEditText().setText(null);
                mDescription.getEditText().setText(null);
                mPrice.getEditText().setText(null);
                mCategory.setText("Category");
            }else{
                Toast.makeText(getView().getContext(),"Data Uploaded Unuccessfully",Toast
                        .LENGTH_SHORT).show();
            }

以上代码部分用于将数据上传到数据库

下面将用于 onActivityResult 方法来更新孩子中的图像。

mImageStorage.child("ad_images").child(current_user_id+".jpg")
  .getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        String downloadUrl = uri.toString();
        mUserRef = FirebaseDatabase.getInstance().getReference();
        DatabaseReference adRef = mUserRef.child("AdvertData");
        String key = adRef.push().getKey();

        if (key != null) {
            adRef.child(key).child("image").setValue(downloadUrl)
              .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()){
                        mProgess.dismiss();
                        Toast.makeText(getActivity(), "Ad picture uploaded completely.", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

标签: androidfirebasefirebase-realtime-database

解决方案


好的,在应用程序上工作了 6 个小时后,我得出了一个解决方案,而不是从 firebase 获取随机生成的密钥来更新图像的值。每次将用户数据上传到 Firebase 时,我都会上传图像。所以简而言之,我没有在相机活动的 OnActivityResult 中更新图像,而是在数据上传到实时数据库时上传了图像。


推荐阅读