因此,firebase具有此脱机功能。
因此,每当我发送任何短信时,只要单击“发送”,它就会立即显示在设备上。它像一种魅力。
我的问题是,当我尝试发送图像时,它不会发生相同的情况。即使当我在线时,该图像也将首先上传到Firebase Storage。然后,图像网址将被存储到firebase-database。之后,它显示给我。这需要时间,具体取决于文件大小。发送并在后台进行上传后,是否可以在设备上立即显示图像?
我有一个适配器类,并在recyclerView中检索数据。
这是我向视图添加图像的方式(这在适配器类中):
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
switch (holder.getItemViewType()){
case 1:
//for text messages
ViewHolder1 viewHolder1 = (ViewHolder1)holder;
viewHolder1.Text.setText(messageList.get(position).getMessage());
break;
case 2:
//for images
ViewHolder2 viewHolder2 = (ViewHolder2)holder;
Glide.with(viewHolder2.Image.getContext())
.load(messageList.get(position).getMessage())
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(viewHolder2.Image);
break;
}
}
这是我的上传方式(这在“聊天活动”类中):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CHOOSE_IMAGE && resultCode == Activity.RESULT_OK && data!=null && data.getData()!=null){
uriProfileImage = data.getData();
final StorageReference profileImageRef = FirebaseStorage.getInstance().getReference("message/"+System.currentTimeMillis()+"jpg");
if (uriProfileImage!=null){
profileImageRef.putFile(uriProfileImage).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
profileImageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Uri downloadUrl = uri;
profileImageUrl = downloadUrl.toString();
Map messageMap = new HashMap();
messageMap.put("Message", profileImageUrl);
messageMap.put("Type", 2);
Map messageUserMap = new HashMap();
messageUserMap.put(user_ref+"/"+push_id,messageMap);
mRootRef.updateChildren(messageUserMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
if (databaseError!=null){
}
}
});
}
});
}
})
});
}
}
}
希望我很清楚。任何帮助将不胜感激。
答案 0 :(得分:1)
当用户选择要上传的图像时,您可以同时执行两个操作。首先,开始上传到存储,其次,获取图像并将其添加到视图中。
然后,您可以立即向用户提供反馈并显示图像,而无需先往返服务器。