我在我的应用中使用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设备连接到某些代理服务器,则该应用程序可以正常运行,并且一切正常!!
出什么问题了?
答案 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
获得更多信息