2016-12-04 4 views
2

Guten Abend.Befüllen RecyclerView mit Firebase-Datenbank

Ich habe einen Testcode, in dem ich ein RecycleView auffüllen möchte, das ein ImageView hat. Die ImageView wird mit einem JPG-Bild aus einer URL in der Firebase-Datenbank gefüllt.

Das Problem ist, dass ich nicht bekomme, wie Daten abrufen und Recycleview befüllen Ich las FirebaseUI auf Github, aber aufrichtig finde ich es irgendwie schwierig, weil ich allein in dieser Anwendung bin.

Dies ist der MainActivity Code:

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) { 


      } 
     }; 
    } 
} 

Dies ist das Objekt, das ich verwende, um Daten in FirebaseDatabase einzufügen (Ich möchte nur die 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; 
    } 
} 

Und das ist der ViewHolder, Ich weiß nicht, ob es in Ordnung ist.

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; 
    } 
} 

Es wäre schön, einen guten Rat von euch zu erhalten! Vielen Dank.

+0

Nun, ich habe nie Firebase-Datenbank verwendet, aber was verwenden Sie für die Vernetzung? Weil ich keine sehen kann. –

+0

Zunächst müssen Sie eine Implementierung von populateViewHolder bereitstellen, um Daten aus den Picture- in die PictureHolder-Ansichten zu kopieren. Zweitens möchten Sie wahrscheinlich keine Methode zum Festlegen von Ansichten in PictureHolder. ViewHolder extrahieren nur Referenzen auf Ansichten, die in der übergebenen ItemView gefunden wurden. Stattdessen möchten Sie wahrscheinlich die Download-URL verwenden und etwas wie Glide verwenden, um das Bild herunterzuladen und es in ImageView zu platzieren. Wenn Sie mit der Funktionsweise von RecyclerView nicht vertraut sind, möchten Sie vielleicht zunächst ein einfaches Beispiel ohne Firebase ausführen. –

Antwort

1

Ich verwende Glide, um Bilder in meinem RecyclerView zu füllen. Bei einer Zeichenfolge, die eine HTTP-URL ist, löst Glide die Zeichenfolge auf und zeigt das Bild an, das sich an dieser HTTP-Adresse in Ihrem ImageView befindet.

Hier ist ein Link Glide: https://github.com/bumptech/glide

Sie benötigen build.gradle enthalten Glide in:

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

Im ViewHolder ein Verfahren setImage create(), die Glide verwendet das Bild zu setzen:

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); 
    } 
} 

Dann in populateViewHolder Sie die setImage() -Methode von Ihrem viewholder und übergeben Sie rufen werden als Argument fr den Rückgabewert von getDownloadURL() om your Pictures model:

+0

Es hat funktioniert, du bist ein Engel! Danke danke danke! –