Как я могу отображать изображения с помощью реселлера - PullRequest
0 голосов
/ 05 марта 2020

Я следую этому руководству о том, как получить загруженные изображения из хранилища Firebase, чтобы показать их в обзоре переработчика. Но когда я запускаю свое приложение, я не вижу загруженных изображений, вместо этого мое приложение вылетает, и ошибка продолжает указывать на эту строку, которая содержит этот код ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);, но на самом деле не объясняет, почему это ошибка. Я не уверен, что происходит, может кто-то, пожалуйста ... довольно, пожалуйста, помогите мне, я искал ответы в течение всей этой недели и не получил ни одного. Спасибо заранее

Ошибки:

FATAL EXCEPTION: main
Process: com.myapp.Gogo, PID: 22974
com.google.firebase.database.DatabaseException: Found two getters or fields 
with conflicting case sensitivity for property: imageurl

2020-03-05 11:06:36.238 22974-22974/com.myapp.Gogo
E/RecyclerView: No adapter attached; skipping layout

Класс адаптера:

public class AdapterOne extends RecyclerView.Adapter<AdapterOne.ViewHolder> {
    Context context;
    List <ImageUploadInfo> ImageUploadInfoList;

    public AdapterOne(Context c, List<ImageUploadInfo> TempList){
        this.ImageUploadInfoList=TempList;
        this.context=c;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        ImageUploadInfo imageUploadInfo=ImageUploadInfoList.get(position);

        //loading image with glide libary
        Glide.with(context).load(imageUploadInfo.getImageUrl()).into(holder.imageView);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        public ImageView imageView;

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

            imageView=(ImageView) itemView.findViewById(R.id.imageview);
        }
    }
}

ImageUpload.class:

public class ImageUploadInfo {
    public String imageURL;

    public ImageUploadInfo( String url) {
        //this.imageName = name;
        this.imageURL= url;
    }

    public String getImageUrl() {
        return null;
    }
}

Это главная страница :

    if(firebaseUser!=null) {
        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference("Users");
        DatabaseReference uidRef = rootRef.child("images").child(uid);

        uidRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);
                    list.add(imageUploadInfo);
                }

                adapter1 = new AdapterOne(getApplicationContext(), list);
                recyclerView.setAdapter(adapter1);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        });
    }

1 Ответ

0 голосов
/ 05 марта 2020

Измените свой класс модели следующим образом и посмотрите, сработает ли это для вас. Пометив его как частное, Firebase находит только метод получения / установки и пытается придерживаться соглашения Java camelCase во время именования.

public class ImageUploadInfo {

    private String imageUrl; // main change is this should be private

    private ImageUploadInfo() {} // default constructor that takes no arguments

    public ImageUploadInfo(String imageUrl) {
        this.imageUrl= imageUrl;
    }

    public String getImageUrl() {
        return imageUrl;  // and why are you returning null here
    }
}

Для проблемы с адаптером. Вам нужно установить его из MainThread так, переместите строки из вашего onDataChange метода

adapter1 = new AdapterOne(getApplicationContext(), list);
recyclerView.setAdapter(adapter1);
adapter1.notifyDataSetChanged;

в onCreate() метод вашей деятельности и в onDataChange после добавления в список, инициализированный list = new ArrayList<>(); используйте только

adapter1.notifyDataSetChanged

Дайте мне знать, если это удалось решить вашу проблему.

...