Firebase的实时数据库无法从android studio i can';你不能上传吗?
我已经修复了firebase实时数据库的读写规则,但仍然无法在上面读写Firebase的实时数据库无法从android studio i can';你不能上传吗?,android,firebase,firebase-realtime-database,firebase-storage,rules,Android,Firebase,Firebase Realtime Database,Firebase Storage,Rules,我已经修复了firebase实时数据库的读写规则,但仍然无法在上面读写 { "rules": { ".read": "true", ".write": "true" } } 我也试过: { "rules": { ".read": true, ".write": true } } Fire
{
"rules": {
".read": "true",
".write": "true"
}
}
我也试过:
{
"rules": {
".read": true,
".write": true
}
}
Firebase存储规则:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if true;
}
}
}
Firebase存储规则正常工作,因为已上载映像并调用onSuccessListener
下面和下面显示了我用来在数据库上设置值的代码
我已经将引用定义为:
storageReference = FirebaseStorage.getInstance().getReference("Events_Details");
databaseReference = FirebaseDatabase.getInstance().getReference("Events_Details");
private void uploadUserInformationToDatabase() {
progressDialog.show();
if (image_uri != null) {
//this will create a big_number.jpg and when we call .child this means we are
//going to add something inside Events_Images Directory
StorageReference fileReference = storageReference.child(System.currentTimeMillis() + "." + getFileExtension(image_uri));
uploadTask = fileReference.putFile(image_uri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
//Now we need to get the url of the image that you have uploaded.
Task<Uri> uri = taskSnapshot.getStorage().getDownloadUrl();
while (!uri.isComplete());
String url = uri.getResult().toString();
createUserEvent.setImageUrl(url);
//now we will save this object in our database
String uploadId = databaseReference.push().getKey();
databaseReference.child(uploadId)
.setValue(createUserEvent);
progressDialog.dismiss();
Toast.makeText(context, "Event Created Successfully", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
});
} else {
progressDialog.dismiss();
Toast.makeText(context, "No File Selected", Toast.LENGTH_SHORT).show();
}
}
storageReference=FirebaseStorage.getInstance().getReference(“事件详细信息”);
databaseReference=FirebaseDatabase.getInstance().getReference(“事件详细信息”);
私有void uploadUserInformationToDatabase(){
progressDialog.show();
if(image_uri!=null){
//这将创建一个大号码.jpg,当我们呼叫.child时,这意味着我们是
//要在Events\u Images目录中添加一些内容吗
StorageReference fileReference=StorageReference.child(System.currentTimeMillis()+“+”+getFileExtension(image_uri));
uploadTask=fileReference.putFile(图像uri)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//现在我们需要获取您上传的图像的url。
任务uri=taskSnapshot.getStorage().getDownloadUrl();
而(!uri.isComplete());
字符串url=uri.getResult().toString();
createUserEvent.setImageUrl(url);
//现在我们将把这个对象保存在数据库中
String uploadId=databaseReference.push().getKey();
databaseReference.child(上传ID)
.setValue(createUserEvent);
progressDialog.disclose();
Toast.makeText(上下文,“事件创建成功”,Toast.LENGTH_SHORT.show();
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Toast.makeText(上下文,例如getMessage(),Toast.LENGTH_SHORT).show();
progressDialog.disclose();
}
});
}否则{
progressDialog.disclose();
Toast.makeText(上下文,“未选择文件”,Toast.LENGTH_SHORT.show();
}
}
Toast for Event Created Successfully每次都会显示,并且图像也会上载到存储,但对象不会保存在实时数据库中。CreateUserEvent只是一个类,我想把它的对象和我要上传到存储器的图像一起保存到实时数据库中。图像在firebase存储上的上传总是成功的,在调用onSuccess函数后,在onSuccess函数内部,我已经为对象编写了代码以保存在实时数据库上,但这不起作用。请帮助我解决它,我已经浪费了2天的时间,但无法解决此问题。
好的……我已经试过你的代码了。以下是修改后的函数:
databaseReference=FirebaseDatabase.getInstance().getReference()代码>
private void uploadUserInformationToDatabase(){
progressDialog.show();
if(image_uri!=null){
//这将创建一个大号码.jpg,当我们呼叫.child时,这意味着我们是
//要在Events\u Images目录中添加一些内容吗
StorageReference fileReference=StorageReference.child(System.currentTimeMillis()+“+”+getFileExtension(image_uri));
//现在,我们将在firebase中存储映像文件,并检查成功和失败事件
//我们将当前进程的引用存储在这个uploadtask变量中,这对我们很有帮助
//当用户多次单击上载按钮时,所以当他单击一次上载任务时
//获取参考,当上传运行时,用户点击上传按钮
//然后我们检查uploadTask是否为null。如果为null,则表示没有任务
//正在运行其他我们不上载的程序。您在upload onlicklisterner中放置的此检查。
uploadTask=fileReference.putFile(图像uri)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//让我们用图像的名称和url创建对象,并将该对象保存到我们的数据库中。
//事件的字符串名=文件名。getText().toString().trim();
//字符串url\u of_image=taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
//Upload Upload=新上传(事件的名称、图像的url);
//现在,您只需要获取已上载图像的url。
任务uri=taskSnapshot.getStorage().getDownloadUrl();
而(!uri.isComplete());
字符串url=uri.getResult().toString();
createUserEvent.setImageUrl(url);
//现在我们将把这个对象保存在数据库中
String uploadId=databaseReference.push().getKey();
Log.d(标记“onSuccess:Going To Save Object To Firebase”);
Log.d(标记“onSuccess:UPLOAD-ID:”+uploadId);
databaseReference.child(“事件详细信息”).child(upl
private void uploadUserInformationToDatabase() {
progressDialog.show();
if (image_uri != null) {
//this will create a big_number.jpg and when we call .child this means we are
//going to add something inside Events_Images Directory
StorageReference fileReference = storageReference.child(System.currentTimeMillis() + "." + getFileExtension(image_uri));
//now we will store our image file in firebase and check for success and failure events
//And we store the refrence of current process in this uploadtask varriable which helps us
//when user clicks on upload button multiple time, so when he clicks one time uploadTask will
//take the reference and when the upload runnig and the user clicks the upload button another
//time then we put a check if uploadTask is null or not. it is null then this means no task is
//running else we don't upload. This check you put above in upload onlicklisterner.
uploadTask = fileReference.putFile(image_uri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// lets create the object with name and url of the image and save this object into our database.
// String name_of_event = file_name.getText().toString().trim();
// String url_of_image = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
// Upload upload = new Upload(name_of_event, url_of_image);
//Now you just need to get the url of the image that you have uploaded.
Task<Uri> uri = taskSnapshot.getStorage().getDownloadUrl();
while (!uri.isComplete()) ;
String url = uri.getResult().toString();
createUserEvent.setImageUrl(url);
//now we will save this object in our database
String uploadId = databaseReference.push().getKey();
Log.d(TAG, "onSuccess: Going To Save Object To Firebase");
Log.d(TAG, "onSuccess: UPLOAD ID : "+uploadId);
databaseReference.child("Event Details").child(uploadId).setValue(createUserEvent).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(context, "Data uploaded successfully", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(context, "Failed to upload data", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
});
}
});
} else {
progressDialog.dismiss();
Toast.makeText(context, "No File Selected", Toast.LENGTH_SHORT).show();
}
}