我在我的应用程序中使用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设备连接到某个代理服务器,应用程序运行正常,一切都正常!!
有什么问题吗?
发布于 2018-08-23 17:32:33
您尚未使用DatabaseReference对象的setValue(Object obj)设置任何值。
您可以通过如下方式添加具有setValue()权限的用户:
private void writeNewUser(String userId,String name,String email) { User user =新用户(name,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获取更多信息
https://stackoverflow.com/questions/51982491
复制相似问题