2016-12-04 3 views
2

Good Evening.Заполнение RecyclerView с использованием базы данных Firebase

У меня есть тестовый код, в котором я хочу заполнить RecycleView с ImageView. ImageView будет заполнен изображением JPG из URL-адреса в базе данных Firebase.

Проблема в том, что я не получаю, как извлекать данные и заполнять recycleview Я читал FirebaseUI на Github, но искренне считаю, что это как-то сложно, потому что я один в этом приложении.

Это код MainActivity:

public class MainActivity extends AppCompatActivity{ 


    DatabaseReference mReference; 
    DatabaseReference mURLReference; 

    public FirebaseRecyclerAdapter<Pictures, PicturesHolder> mRecyclerViewAdapter; 
    //UI 
    RecyclerView mImagesRV; 
    LinearLayoutManager mManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 


     mReference = FirebaseDatabase.getInstance().getReference(); 
     mURLReference= mReference.child("Pictures Data"); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 

     mImagesRV=(RecyclerView)findViewById(R.id.recyclerView); 

     mManager=new LinearLayoutManager(this); 
     mManager.setReverseLayout(false); 

     mImagesRV.setHasFixedSize(false); 
     mImagesRV.setLayoutManager(mManager); 

    } 

    public void onAttachRecyclerView() 
    { 

     Query lastHundred = mURLReference.limitToLast(100); 
     mRecyclerViewAdapter = new FirebaseRecyclerAdapter<Pictures, PicturesHolder>(
       Pictures.class,R.layout.content_main,PicturesHolder.class, lastHundred 
     ) { 
      @Override 
      protected void populateViewHolder(PicturesHolder pictureView, Pictures pictures, int position) { 


      } 
     }; 
    } 
} 

Это объект, который я использую для вставки данных в FirebaseDatabase (я просто хочу URL):

public class Pictures { 


    String pictureID; 
    String downloadURL; 
    double latitude; 
    double longitude; 

    public Pictures() { 

    } 

    public void setPictureID(String pictureID) { 
     this.pictureID = pictureID; 
    } 

    public void setDownloadURL(String downloadURL) { 
     this.downloadURL = downloadURL; 
    } 

    public void setLatitude(double latitude) { 
     this.latitude = latitude; 
    } 

    public void setLongitude(double longitude) { 
     this.longitude = longitude; 
    } 

    public String getPictureID() { 
     return pictureID; 
    } 

    public String getDownloadURL() { 
     return downloadURL; 
    } 

    public double getLatitude() { 
     return latitude; 
    } 

    public double getLongitude() { 
     return longitude; 
    } 
} 

И это ViewHolder, Я не знаю, нормально ли это.

public class PicturesHolder extends RecyclerView.ViewHolder { 

    ImageView imageView; 

    public PicturesHolder(View itemView) 
    { 
     super(itemView); 
     imageView = (ImageView) itemView.findViewById(R.id.picture_view); 

    } 

    public void setImageView(ImageView imageView) { 
     this.imageView = imageView; 
    } 
} 

Было бы неплохо получить от вас хорошие советы! Большое вам спасибо.

+0

Ну, я никогда не использовал базу данных firebase, но что вы используете для работы в сети? Потому что я не вижу ничего. –

+0

Во-первых, вам необходимо предоставить реализацию populateViewHolder для копирования данных из изображения в представления PictureHolder. Во-вторых, вы, вероятно, не хотите, чтобы метод устанавливал представления в PictureHolder. ViewHolders только когда-либо извлекают ссылки на представления, найденные в переданном элементе itemView. Вместо этого вы, вероятно, захотите взять URL-адрес загрузки и использовать что-то вроде Glide, чтобы загрузить изображение и поместить его в ImageView. Наконец, если вы не знакомы с тем, как работает RecyclerView, сначала вы можете сделать простой пример без Firebase. –

ответ

1

Я использую Glide для заполнения изображений в моем RecyclerView. Учитывая строку, которая является URL-адресом HTTP, Glide решит строку и отобразит изображение, проживающее на этом HTTP-адресе в вашем ImageView.

Вот ссылка на Скольжение: https://github.com/bumptech/glide

Вам нужно включить Скольжение в вашем build.gradle:

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

В ViewHolder создать метод setImage(), который использует Glide для установки изображения:

public static class PicturesHolder extends RecyclerView.ViewHolder { 
    Context ctx; 
    ImageView image; 

    public PicturesHolder(View v) { 
     super(v); 
     this.ctx = v.getContext(); 
     this.image = (ImageView) v.findViewById(R.id.myImageView); 
    } 

    public void setImage(String url) { 
     Glide.with(ctx) 
       .load(url) 
       .into(image); 
    } 
} 

Тогда в populateViewHolder вы вызываете метод setImage() из вашего viewholder и передать в качестве аргумента возвращаемого значения getDownloadURL() фр om your Pictures модель:

@Override 
    protected void populateViewHolder(PicturesHolder viewHolder, Pictures model, int position) { 
     viewHolder.setImage(model.getDownloadURL()); 
} 
+0

Это сработало, ты ангел! Спасибо Спасибо спасибо! –

Смежные вопросы