在imageview中显示来自firebase数据库的图像

时间:2017-08-31 06:25:34

标签: java android firebase firebase-realtime-database firebase-storage

这个问题没有直接答案,我尝试了各种方法。我需要存储在Firebase数据库中的图像才能显示在ImageView中。

这是我现有的代码,但是无效:

mUsersDB_photoUrl.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String photoUrl = dataSnapshot.child("photoUrl").getValue(String.class);
            try {
                Picasso.with(DisplayActivity.this).load(photoUrl).placeholder(R.mipmap.ic_launcher).into(Photo);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

调用用户名的方法有效:

mUsersDB_name.addValueEventListener(new ValueEventListener() {
        @Override

        public void onDataChange(DataSnapshot dataSnapshot) {
            Name.setText(dataSnapshot.getValue(String.class));

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

我没有那么好,我自学Firebase。欢迎指点和指导。

3 个答案:

答案 0 :(得分:1)

您正在使用Picasso,因此我建议您在获取图片时使用getDownloadUrl()。

StorageReference storageRef = storage.getReference().child("profiles").child(myAccount.getUID()).child("profile");//reach out to your photo file hierarchically
        storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Log.d("URI", uri.toString()); //check path is correct or not ?
               Picasso.with(DisplayActivity.this).load(uri.toString()).into(imageView);
            }
        }).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
    // Handle errors
}
});

答案 1 :(得分:0)

okey ..首先在此代码行下方设置日志并检查照片网址是否有效。

String photoUrl = dataSnapshot.child("photoUrl").getValue(String.class);

然后使用滑动将图像设置为ImageView

Glide.with([CONTEXT]).load([IMAGE_URL]).into([IMAGE_VIEW]);

注意:如果你想使用Picasso,那么你必须将你的背景传递给with([CONTEXT])

答案 2 :(得分:0)

我最后只是更改了我的数据库引用。 (代码的第一行)

完美无缺。

mUsersDB.child(user_id).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String photoUrl = dataSnapshot.child("photoUrl").getValue(String.class);
            try {
                Picasso.with(DisplayActivity.this).load(photoUrl).placeholder(R.mipmap.ic_launcher).into(disPhoto);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });