gpt4 book ai didi

java - 在 firebase 中上传后,保存在数据库中的图像链接不起作用

转载 作者:行者123 更新时间:2023-12-01 17:03:16 25 4
gpt4 key购买 nike

我制作了一个聊天应用程序,并且我制作了一个在聊天中发送图像的功能,该图像应上传到 Firebase 存储中,其链接应存储在 Firebase 数据库中,

图像已上传到 Firebase 存储中,但其链接未保存在数据库中,而是保存了此链接 -

“com.google.android.gms.tasks.zzu@4298b5d”

这是代码 -

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);

if(requestCode == 1 && resultCode == RESULT_OK)
{
Uri url = data.getData();

DatabaseReference messageRef = FirebaseDatabase.getInstance().getReference().child("Messages").child(currentUserId).child(otherUserId).push();
final String messageId = messageRef.getKey();

DatabaseReference notificationRef = FirebaseDatabase.getInstance().getReference().child("Notifications").child(otherUserId).push();
final String notificationId = notificationRef.getKey();

StorageReference file = FirebaseStorage.getInstance().getReference().child("message_images").child(messageId + ".jpg");

file.putFile(url).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>()
{
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task)
{
if(task.isSuccessful())
{
String imageUrl = task.getResult().getStorage().getDownloadUrl().toString();

Map messageMap = new HashMap();
messageMap.put("message", imageUrl);
messageMap.put("type", "image");
messageMap.put("from", currentUserId);
messageMap.put("to", otherUserId);
messageMap.put("timestamp", ServerValue.TIMESTAMP);

HashMap<String, String> notificationData = new HashMap<>();
notificationData.put("from", currentUserId);
notificationData.put("type", "message");

Map userMap = new HashMap();
userMap.put("Messages/" + currentUserId + "/" + otherUserId + "/" + messageId, messageMap);
userMap.put("Messages/" + otherUserId + "/" + currentUserId + "/" + messageId, messageMap);

userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/message", "You have sent a picture.");
userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/timestamp", ServerValue.TIMESTAMP);
userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/seen", ServerValue.TIMESTAMP);

userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/message", "Has send you a picture.");
userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/timestamp", ServerValue.TIMESTAMP);
userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/seen", 0);

userMap.put("Notifications/" + otherUserId + "/" + notificationId, notificationData);

FirebaseDatabase.getInstance().getReference().updateChildren(userMap, new DatabaseReference.CompletionListener()
{
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference)
{
sendButton.setEnabled(true);

if(databaseError != null)
{
Log.d(TAG, "sendMessage(): updateChildren failed: " + databaseError.getMessage());
}
}
});
}
}
});
}
}

最佳答案

我自己找到了解决方案,这就是解决方案。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 1 && resultCode == RESULT_OK) {
Uri url = data.getData();

DatabaseReference messageRef = FirebaseDatabase.getInstance().getReference().child("Messages").child(currentUserId).child(otherUserId).push();
final String messageId = messageRef.getKey();

DatabaseReference notificationRef = FirebaseDatabase.getInstance().getReference().child("Notifications").child(otherUserId).push();
final String notificationId = notificationRef.getKey();

final StorageReference file = FirebaseStorage.getInstance().getReference().child("message_images").child(messageId + ".jpg");

file.putFile(url).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

file.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String imageUrl = uri.toString();

Map messageMap = new HashMap();
messageMap.put("message", imageUrl);
messageMap.put("type", "image");
messageMap.put("from", currentUserId);
messageMap.put("to", otherUserId);
messageMap.put("timestamp", ServerValue.TIMESTAMP);

HashMap<String, String> notificationData = new HashMap<>();
notificationData.put("from", currentUserId);
notificationData.put("type", "message");

Map userMap = new HashMap();
userMap.put("Messages/" + currentUserId + "/" + otherUserId + "/" + messageId, messageMap);
userMap.put("Messages/" + otherUserId + "/" + currentUserId + "/" + messageId, messageMap);

userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/message", "You have sent a picture.");
userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/timestamp", ServerValue.TIMESTAMP);
userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/seen", ServerValue.TIMESTAMP);

userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/message", "Has send you a picture.");
userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/timestamp", ServerValue.TIMESTAMP);
userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/seen", 0);

userMap.put("Notifications/" + otherUserId + "/" + notificationId, notificationData);

FirebaseDatabase.getInstance().getReference().updateChildren(userMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
sendButton.setEnabled(true);

if (databaseError != null) {
Log.d(TAG, "sendMessage(): updateChildren failed: " + databaseError.getMessage());
}
}
});
}
});
}
});
}
}

关于java - 在 firebase 中上传后,保存在数据库中的图像链接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61484856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com