Android 显示firebase存储项目中问题的图像

Android 显示firebase存储项目中问题的图像,android,firebase,firebase-realtime-database,firebase-storage,Android,Firebase,Firebase Realtime Database,Firebase Storage,我已经设置了firebase项目,我可以成功地在两个用户之间交换聊天信息,但我无法为用户显示配置文件图像。当我在网络浏览器中打开此url时,会显示图像,但如果我在android手机中使用此url,则不会显示图像 我得到的下载URL如下: 我正在上载另一个活动的图像,然后我尝试从上载另一个活动的图像URL获取图像 下面是我用来从Firebase数据库检索图像和其他数据的代码。我成功获取上传图像的URL并将其传递到适配器中, 我尝试使用毕加索或Glide通过使用此URL显示该图像 通过该URL,图

我已经设置了firebase项目,我可以成功地在两个用户之间交换聊天信息,但我无法为用户显示配置文件图像。当我在网络浏览器中打开此url时,会显示图像,但如果我在android手机中使用此url,则不会显示图像

我得到的下载URL如下:

我正在上载另一个活动的图像,然后我尝试从上载另一个活动的图像URL获取图像

下面是我用来从Firebase数据库检索图像和其他数据的代码。我成功获取上传图像的URL并将其传递到适配器中, 我尝试使用毕加索或Glide通过使用此URL显示该图像

通过该URL,图像在Web浏览器中成功显示,但无法在android的imageview中显示此图像

DatabaseReference mFirebaseDatabaseReference=FirebaseDatabase.getInstance().getReference();

mFirebaseDatabaseReference.child(USERPROFILE_CHILD).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if(FirebaseAuth.getInstance().getCurrentUser().getEmail().equalsIgnoreCase(dataSnapshot.child("email").getValue().toString())) {

            } else {
                HashMap<String, String> hashMap = new HashMap<String, String>();
                hashMap.put("email", dataSnapshot.child("email").getValue().toString());
                try {

// Got uploaded image url by using dataSnapshot.child("photourl").getValue() and put it in hashMap
                    hashMap.put("photourl",dataSnapshot.child("photourl").getValue().toString());

                } catch (Exception e) {
                    e.printStackTrace();
                }
                hashMap.put("uid", dataSnapshot.child("uid").getValue().toString());
                hashMap.put("firebaseToken",dataSnapshot.child("firebaseToken").getValue().toString());
                testData.add(hashMap);
                adapter.notifyDataSetChanged();
            }
        }

        @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) {

        }
    });
DatabaseReference mFirebaseDatabaseReference=FirebaseDatabase.getInstance().getReference();
mFirebaseDatabaseReference.child(USERPROFILE\u child).addChildEventListener(new ChildEventListener()){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
if(FirebaseAuth.getInstance().getCurrentUser().getEmail().equalsIgnoreCase(dataSnapshot.child(“电子邮件”).getValue().toString()){
}否则{
HashMap HashMap=新的HashMap();
hashMap.put(“email”,dataSnapshot.child(“email”).getValue().toString());
试一试{
//使用dataSnapshot.child(“photourl”).getValue()获取上载的图像url,并将其放入hashMap中
hashMap.put(“photourl”,dataSnapshot.child(“photourl”).getValue().toString());
}捕获(例外e){
e、 printStackTrace();
}
hashMap.put(“uid”,dataSnapshot.child(“uid”).getValue().toString();
hashMap.put(“firebaseToken”,dataSnapshot.child(“firebaseToken”).getValue().toString());
add(hashMap);
adapter.notifyDataSetChanged();
}
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
这是我在imageview中加载图像的自定义适配器代码:---

final ImageView profileimage=(ImageView)v.findViewById(R.id.profileImageView);
试一试{
字符串imageUrl=data.get(position.get(“photourl”);
if(imageUrl.startsWith(“gs://”){
final-StorageReference-StorageReference=FirebaseStorage.getInstance()
.getReferenceFromUrl(图像URL);
storageReference.getDownloadUrl().addOnCompleteListener(
新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
String downloadUrl=task.getResult().toString();
System.out.println(“==下载url===”+下载url);
/*带(上下文)滑动
.load(下载URL)
.into(profileimage);*/Picasso.with(context).load(downloadUrl).into(profileimage);
}否则{
Log.w(“谢谢”,“获取下载url未成功”,
task.getException());
}
}
});
}否则{
毕加索。与(上下文)
.load(图像URL)
.插入(图像);
}
}捕获(例外e){
e、 printStackTrace();
}
给你

先转到Firebase规则

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
   allow read, write; //here You Are Allowing everyone to read and write
    }
  }
}


service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null; //only auth person k read and write
    }
  }
}
然后添加Glide或毕加索库

compile 'com.squareup.picasso:picasso:2.5.2'

  compile 'com.github.bumptech.glide:glide:3.6.1'

    compile 'com.android.support:support-v4:25.1.0'

  StorageReference filePath;

     StorageReference mFStorage;


     mFStorage=FirebaseStorage.getInstance().getReference();

     String Id= UUID.randomUUID().toString();


       filePath=   mFStorage.child("images").child(Id+".png");


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

   String imageDownloadUrl=taskSnapshot.getDownloadUrl();


   Glide.with(ctx)
                    .load(imageDownloadUrl)
                    .into(imageview);

     Picasso.with(context).load(imageDownloadUrl.toString()).into(imageview);
编译'com.squareup.picasso:picasso:2.5.2'
编译'com.github.bumptech.glide:glide:3.6.1'
编译'com.android.support:support-v4:25.1.0'
StorageReference文件路径;
存储器参考存储器;
mFStorage=FirebaseStorage.getInstance().getReference();
字符串Id=UUID.randomUUID().toString();
filePath=mFStorage.child(“图像”).child(Id+“.png”);
filePath.putFile(uri).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
字符串imageDownloadUrl=taskSnapshot.getDownloadUrl();
滑翔带(ctx)
.load(imageDownloadUrl)
.进入(图像视图);
Picasso.with(context).load(imageDownloadUrl.toString()).into(imageview);

尝试使用毕加索或Glide,它将加载您的图像。!

显示您的代码。现在添加代码,您能提供帮助吗?您好@Atif,感谢共享代码,但这是文件上载,我已成功完成。我在检索数据时遇到问题。我获得的图像是“https”格式的格式化,然后无法在手机中显示该图像。您能告诉我修复方法吗?毕加索。with(context)。load(downloadUrl.toString())。into(imageview);此行是您的解决方案兄弟。!Glide.with(ctx)。load(imageDownloadUrl)。into(imageview)@Sandipsing也试试看。!您好,您向我展示的代码,我已经完成了,我正在成功获取下载URL。我面临的问题是:如何在手机中显示图像。毕加索和Glide都无法显示图像。我现在已经详细编辑了我的问题。您好@Sandipsing更新了我对您的fire base规则的答案检查现在你只需要在Glide或毕加索中使用这个!这两个代码都在那里。!
compile 'com.squareup.picasso:picasso:2.5.2'

  compile 'com.github.bumptech.glide:glide:3.6.1'

    compile 'com.android.support:support-v4:25.1.0'

  StorageReference filePath;

     StorageReference mFStorage;


     mFStorage=FirebaseStorage.getInstance().getReference();

     String Id= UUID.randomUUID().toString();


       filePath=   mFStorage.child("images").child(Id+".png");


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

   String imageDownloadUrl=taskSnapshot.getDownloadUrl();


   Glide.with(ctx)
                    .load(imageDownloadUrl)
                    .into(imageview);

     Picasso.with(context).load(imageDownloadUrl.toString()).into(imageview);