在onChildAdded触发器之后,没有数据插入到firebase

时间:2018-08-23 09:26:46

标签: java android firebase firebase-realtime-database

我在我的应用中使用firebase将图像发布到firebase storage,还向firebase中的实时数据库发送了一些数据。 问题是图像已成功上传,但尽管onChildAdded()事件被触发并没有添加任何数据,但仍会添加所添加的子数据!

这是我的Java代码:

public void postImage(View view){
    final ProgressDialog progressDialog=new ProgressDialog(this);
    progressDialog.setMessage("Please wait while posting is getting done !");
    progressDialog.setTitle("Posting ...");
    progressDialog.show();
    progressDialog.setCancelable(false);
    progressDialog.setCanceledOnTouchOutside(false);

    final String title=imgTitle.getText().toString();
    final String desc=imgDesc.getText().toString();
    if(TextUtils.isEmpty(title)||TextUtils.isEmpty(desc)){
        Toast.makeText(this,"Please input image title and image description then try again !",Toast.LENGTH_SHORT).show();
    }
    else {
        try {
            final StorageReference filePath = storageReference.child("PostImage").child(uri.getLastPathSegment());
            filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                DatabaseReference newPost = databaseReference.push();

                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            newPost.child("title").setValue(title);
                            newPost.child("desc").setValue(desc);
                            newPost.child("image").setValue(uri.toString());
                        }
                    });
                    newPost.addChildEventListener(new ChildEventListener() {
                        @Override
                        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String s) {
                            Toast.makeText(PostActivity.this, dataSnapshot.getValue().toString(), Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                        }

                        @Override
                        public void onChildRemoved(DataSnapshot dataSnapshot) {

                        }

                        @Override
                        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });

                    progressDialog.dismiss();
                    Toast.makeText(PostActivity.this, "The Image Uploaded successfully !", Toast.LENGTH_SHORT).show();
                }
            });
        }
        catch (Exception ex){
            Toast.makeText(PostActivity.this, ex.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
}

和我的Firebase数据库规则:

{
  "rules": {
   ".read": true,
   ".write": true
  }
}

关键是,如果我将android设备连接到某些代理服务器,则该应用程序可以正常运行,并且一切正常!!

出什么问题了?

1 个答案:

答案 0 :(得分:0)

您尚未为setValue(Object obj)个对象的DatabaseReference设置任何值。

您可以使用setValue()添加用户,如下所示:

private void writeNewUser(String userId,String name,String email){     用户用户=新用户(名称,电子邮件);

mDatabase.child("users").child(userId).setValue(user);

}

以这种方式使用setValue()将覆盖指定位置(包括所有子节点)上的数据。但是,您仍然可以更新子级而无需重写整个对象。如果要允许用户更新其个人资料,则可以如下更新用户名:

mDatabase.child("users").child(userId).child("username").setValue(name);

您需要设置以下值:

DatabaseReference newPost = FirebaseDatabase.getInstance().getReference();    
newPost.setValue(videoTrackBean.getPercentage())

或者您可以设置以下值:

FirebaseDatabase.getInstance().getReference().child(SUB_CHILD_PATH).setValue(chat);

您从https://firebase.google.com/docs/database/android/read-and-write

获得更多信息