使用GenericTypeIndicator <map <string,string =“”>&gt;(){}从Firebase检索图像列表

时间:2017-05-02 15:55:28

标签: firebase firebase-realtime-database android-recyclerview

我需要这方面的帮助,我一直试图将图像列表显示在回收者视图中,但严重的是我不能。

This is my database in firebase, shows the images from different events with randoms ids

这是我的班级:

public class Imagenes {
    GenericTypeIndicator<Map<String,String>> images = new GenericTypeIndicator<Map<String, String>>(){};

    public Imagenes(GenericTypeIndicator<Map<String, String>> images) {
        this.images = images;
    }

    public GenericTypeIndicator<Map<String, String>> getImages() {
        return images;
    }

    public void setImages(GenericTypeIndicator<Map<String, String>> images) {
        this.images = images;
    }
}

是的,它似乎非常糟糕,但我不知道该怎么做,因为它不像普通班级

  • 名称
  • 电话
  • 图像

我的意思是我不知道他们的名字,它只是随机的。我一直在读,我必须使用这种地图,但我不知道如何在课堂上使用它

这是我在EventSingle中的代码:

    public class EventoSingleActivity extends AppCompatActivity {

    DatabaseReference mDatabaseEvento;
    TextView TituloEvento;

    RecyclerView mListaImagenes;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_evento_single);

        mListaImagenes = (RecyclerView) findViewById(R.id.listaImagenes);

        mListaImagenes.setHasFixedSize(true);
        mListaImagenes.setLayoutManager(new LinearLayoutManager(this));




        String Evento_key = getIntent().getExtras().getString("Evento_id");

        Toast.makeText(this, Evento_key, Toast.LENGTH_SHORT).show();

        mDatabaseEvento = FirebaseDatabase.getInstance().getReference().child("Evento").child(Evento_key).child("Imagenes");
        System.out.println(mDatabaseEvento);
        TituloEvento = (TextView) findViewById(R.id.tituloEventoField);

        mDatabaseEvento.keepSynced(true);
    }

    @Override
    protected void onStart() {
        super.onStart();




        FirebaseRecyclerAdapter<Imagenes, ImagenesEventoViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Imagenes, ImagenesEventoViewHolder>(
                Imagenes.class,
                R.layout.cardview_imagen,
                ImagenesEventoViewHolder.class,
                mDatabaseEvento
        ) {

            @Override
            protected void populateViewHolder(final ImagenesEventoViewHolder viewHolder, Imagenes model, int position) {





                mDatabaseEvento.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        System.out.println("Estoy entrando aqui");
                        Log.i("gguwu", "Ayudaaaa");

                        GenericTypeIndicator<Map<String,String>> ImagenesType = new GenericTypeIndicator<Map<String, String>>() { };

                        Map<String,String> Imagenes =  dataSnapshot.getValue(ImagenesType);

                        if (Imagenes!=null ) {
                            for (String imagen: Imagenes.values()) {
                                System.out.println(imagen);
                                viewHolder.setImagen(getApplicationContext(), imagen);
                            }
                        }








                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });




            }


        };
        mListaImagenes.setAdapter(firebaseRecyclerAdapter);


    }

    public static class ImagenesEventoViewHolder extends RecyclerView.ViewHolder{
        View view;
        public ImagenesEventoViewHolder(View itemView) {
            super(itemView);
            view = itemView;
        }

        public void setImagen(Context ctx, String imagen){
            ImageView imagencita = (ImageView) view.findViewById(R.id.imagen_item);
            Picasso.with(ctx).load(imagen).into(imagencita);

        }
    }


}

我不知道如何使这项工作。 我尝试了一切,但我只是不能。请帮帮我。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用ChildEventLister类完成此任务。

 mDatabaseEvento = 

 mDatabaseEvento.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        System.out.println("Estoy entrando aqui");
                        Log.i("gguwu", "Ayudaaaa");

                        GenericTypeIndicator<Map<String,String>> ImagenesType = new GenericTypeIndicator<Map<String, String>>() { };

                        Map<String,String> Imagenes =  dataSnapshot.getValue(ImagenesType);

                        if (Imagenes!=null ) {
                            for (String imagen: Imagenes.values()) {
                                System.out.println(imagen);
                                viewHolder.setImagen(getApplicationContext(), imagen);
                            }
                        }
                    }
                   @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) 
                    }