Android 如何从Firebase存储中获取上载的图像

Android 如何从Firebase存储中获取上载的图像,android,firebase,firebase-realtime-database,firebase-storage,Android,Firebase,Firebase Realtime Database,Firebase Storage,我一直在youtube上关注这一点,了解如何上传和检索图像。一切都很顺利,直到我看到你展示图片的那部分。我的图像没有显示。我没有收到任何错误或警告消息,我只是在运行我的应用程序时收到一个空白页面。下面是我的代码。提前谢谢 //UsersAcivity class private RecyclerView recyclerView; private UploadAdapter uploadAdapter; private DatabaseReference

我一直在youtube上关注这一点,了解如何上传和检索图像。一切都很顺利,直到我看到你展示图片的那部分。我的图像没有显示。我没有收到任何错误或警告消息,我只是在运行我的应用程序时收到一个空白页面。下面是我的代码。提前谢谢

     //UsersAcivity class

      private RecyclerView recyclerView;
    private UploadAdapter uploadAdapter;

    private DatabaseReference dbReference;
    private List<UploadModel> uploads;
    FirebaseStorage firebaseStorage;
    StorageReference storageR;
    private ImageView imageView;
    FirebaseAuth firebaseAuth;
    FirebaseUser firebaseUser;
    FirebaseDatabase firebaseDatabase;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        overridePendingTransition(R.anim.slide_right, R.anim.slide_left);

        uploads = new ArrayList<>();

        mAdapter = new ImageAdapter(getApplicationContext(), uploads);


        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(mAdapter);
        uploadAdapter.notifyDataSetChanged();



        dbReference = FirebaseDatabase.getInstance().getReference("Users");
        String userid = FirebaseAuth.getInstance().getCurrentUser().getUid();

        firebaseStorage = FirebaseStorage.getInstance();
        storageR = firebaseStorage.getReference();

        firebaseUser = firebaseAuth.getInstance().getCurrentUser();
        firebaseDatabase.getInstance().getReference();



        dbReference.orderByChild(userid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {


                    UploadModel uploadModel = postsnapshot.getValue(Upload.class);
                    Uploads.add(uploadModel);



                }



                uploadAdapter.notifyDataSetChanged();




            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(UsersActivity.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();

            }
        });
    }


}



 //UploadModel class

     public class UploadModel {
    private String image;

    public UploadModel(){
        //Empty constructor needed
    }

    public UploadModel (String imageUrl){
        images=imageUrl;

    }

    public String getImageUrl() {
        return image;
    }

    public void setImageUrl(String image) {
        this.image = image;
    }
}
//UsersAcivity类
私人回收站;
专用上传适配器上传适配器;
私有数据库引用dbReference;
私人名单上传;
火基存储火基存储;
存储器;参考存储器;
私人影像视图;
FirebaseAuth FirebaseAuth;
FirebaseUser FirebaseUser;
FirebaseDatabase FirebaseDatabase;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u NOSENSOR);
覆盖转换(右动画幻灯片,左动画幻灯片);
uploads=新建ArrayList();
mAdapter=新的ImageAdapter(getApplicationContext(),上载);
recyclerView=findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
recyclerView.setAdapter(mAdapter);
uploadAdapter.notifyDataSetChanged();
dbReference=FirebaseDatabase.getInstance().getReference(“用户”);
字符串userid=FirebaseAuth.getInstance().getCurrentUser().getUid();
firebaseStorage=firebaseStorage.getInstance();
storageR=firebaseStorage.getReference();
firebaseUser=firebaseAuth.getInstance().getCurrentUser();
firebaseDatabase.getInstance().getReference();
dbReference.orderByChild(userid).addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot postsnapshot:DataSnapshot.getChildren()){
UploadModel UploadModel=postsnapshot.getValue(Upload.class);
Uploads.add(uploadModel);
}
uploadAdapter.notifyDataSetChanged();
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
Toast.makeText(UsersActivity.this,databaseError.getMessage(),Toast.LENGTH_LONG.show();
}
});
}
}
//上载模型类
公共类上传模型{
私有字符串图像;
公共上传模型(){
//需要空构造函数
}
公共上载模型(字符串imageUrl){
images=imageUrl;
}
公共字符串getImageUrl(){
返回图像;
}
公共void setImageUrl(字符串图像){
这个图像=图像;
}
}
上载适配器类

public class UploadAdapter extends RecyclerView.Adapter<UploadAdapter.ViewHolder>{

    private Context ctext;
    private List<Upload> list;

    public UploadAdapter(Context context,List<Upload> uploads){
        ctext = context;
        list = uploads;

    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View V = LayoutInflater.from(ctext).inflate(R.layout.cardview, parent, false);
        return new ViewHolder(V);


    }

    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
        Upload uploadCurrent=list.get(position);
        Picasso.get().load(uploadCurrent.getImageUrl()).fit().centerCrop().into(holder.imageView);

    }

    @Override
    public int getItemCount() {
        return list.size();

    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        public View view;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            imageView=itemView.findViewById(R.id.imageview);
        }
    }
}
公共类UploadAdapter扩展了RecyclerView.Adapter{ 私有上下文文本; 私人名单; 公共上载适配器(上下文上下文、列表上载){ ctext=上下文; 列表=上传; } @非空 @凌驾 public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){ 视图V=布局更平坦。从(ctext)。充气(R.layout.cardview,父视图,false); 返回新的视图持有者(V); } @凌驾 public void onBindViewHolder(@NonNull ImageViewHolder,int位置){ Upload uploadCurrent=list.get(位置); Picasso.get().load(uploadCurrent.getImageUrl()).fit().centerCrop().into(holder.imageView); } @凌驾 public int getItemCount(){ 返回list.size(); } 公共类ViewHolder扩展了RecyclerView.ViewHolder{ 公众观点; 公共视图持有者(@NonNull View itemView){ 超级(项目视图); imageView=itemView.findViewById(R.id.imageView); } } }

由于您提供的路径,您无法从Firebase实时数据库获得任何响应

dbReference.child("LoqCOxqzhpN3puCWwhYDtHJVXqg2").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {
            String imageUrl= (String) postsnapshot.child("ImageUrl").getValue();
            Uploads.add(imageUrl);
        }
        uploadAdapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Toast.makeText(UsersActivity.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();

    }
});

您的
orderByChild()
在用户下查找id。

请发布您的数据库结构,您的youtube教程链接为invalid@Ashish我发布了我的数据库结构,我修复了链接,我刚刚修复了它,但现在我的应用程序崩溃了,我没有收到任何错误。我调试了应用程序,它显示com.google.firebase.database.DatabaseException:在运行应用程序之前,无法将java.lang.String类型的对象转换为com.myapp.squirreforbusiness.uploadmodel类型,我在列表中收到错误消息,说明无法应用于(java.lang.String)导致问题的行?这一个上载.add(imageUrl);更改其声明:
私有列表上传在每个位置