2016-04-19 9 views
0

Ich versuche, Bilder in listview mit Firebase-Liste-Adapter abrufen.Ich verwende POJO-Klasse zum Speichern und Abrufen von Bildern von Firebase.Wie Bilder aus firebase in listview abgerufen werden

Unten ist meine POJO Klasse: Data.java

public class Data { 

String imag; 

public Data(){ 

} 

public Data(String imag){ 

    this.imag = imag; 
} 

public String getImag() { 
    return imag; 
} 

public void setImag(String imag) { 
    this.imag = imag; 
    } 
} 

-Code zum Speichern von Bildern:

Firebase ref = new Firebase("https://imaglist.firebaseio.com"); 

Bitmap bm = BitmapFactory.decodeFile(imgDecodableString); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bm.compress(Bitmap.CompressFormat.JPEG,100,baos); 
byte[] byteArray = baos.toByteArray(); 
encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT); 

      Data d = new Data(); 

      d.setImag(encodedImage); 

ref.child("Photo").push().setValue(d, new Firebase.CompletionListener() { 

    @Override 
    public void onComplete(FirebaseError firebaseError, Firebase firebase) {  
if(firebaseError != null){ 
            Toast.makeText(getApplicationContext(),firebaseError.getMessage(),Toast.LENGTH_SHORT).show(); 
           } 
           else{ 
            Toast.makeText(getApplicationContext(),"Image Saved",Toast.LENGTH_SHORT).show(); 
           } 
          } 
         }); 

-Code für retriving Bilder:

list = (ListView)findViewById(R.id.list); 
img = (ImageView)findViewById(R.id.img); 

FirebaseListAdapter<Data> ad = new FirebaseListAdapter<Data>(MainActivity.this,Data.class,R.layout.row,ref) { 
     @Override 
     protected void populateView(View view, Data data, int i) { 

      Data d = new Data(); 

      byte[] dec = Base64.decode(encodedImage,Base64.DEFAULT); 
      Bitmap decodeByte = BitmapFactory.decodeByteArray(dec, 0, dec.length); 
      img.setImageBitmap(decodeByte); 

     } 
    }; 
       list.setAdapter(ad); 

wie Getter in Feuerbasis setzen Liste Adapter zum Abrufen von Bildern.

+0

empfehle ich Ihnen Bilder als String (url) zu verwenden, und dann verwenden ** ** Glide Rahmen um ihnen zu zeigen;) –

+0

Wie kann ich es mit Getter-Methode in meinem obigen Code tun, wie ich Bilder in Base64-String konvertiert habe. –

+0

Konnten Sie einen Code zur Verfügung stellen, wie man Bilder vom Firebase unter Verwendung des Gleitens holt. –

Antwort

3

Sie könnten eine JSON auf Firebase gespeichert verwenden, URL-Bilder zu speichern (die sich zum Beispiel auf Imgur) und dann Glide verwenden für ohne jede Art von Komplikation als Bild Abrufen futurestud.io Webseite zB:

ImageView targetImageView = (ImageView) findViewById(R.id.imageView); 
String internetUrl = "http://i.imgur.com/DvpvklR.png"; 

Glide 
    .with(context) 
    .load(internetUrl) 
    .into(targetImageView); 

Vertrauen Sie mir, es ist sehr einfach mit Firebase

+0

Aber wie kann ich all diese Bilder von Benutzern erhalten und speichern Sie sie imgur, bevor ich sie von Firebase in meine App bekommen. –

+0

http://stackoverflow.com/questions/26292969/can-i-store-image-files-in-firebase-using-java-api ist es wonach Sie suchen? –

+0

Ich habe dies versucht, aber es zeigt Ausnahme in Zeilen: 'FirebaseListAdapter ad = neue FirebaseListAdapter (MainActivity.this, Data.class, R.layout.row, ref) und img.setImageBitmap (decodeByte)' Ich habe Probleme beim Abrufen von Bildern. –

0

erstellen Sie eine andere xML-Datei mit dem Namen listset:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="1"> 

<LinearLayout 
    android:id="@+id/linear1" 
     android:layout_width="382dp" 
     android:layout_height="match_parent" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="@dimen/pad_10dp" 

     android:gravity="center_vertical" 
     android:orientation="vertical" 
     android:paddingBottom="@dimen/pad_5dp" 
     android:paddingLeft="@dimen/pad_15dp" 
     android:paddingRight="@dimen/pad_chat_item" 
     android:paddingTop="@dimen/pad_5dp" 
     android:weightSum="1"> 


ImageView 
     android:layout_width="366dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/image1" 
     android:layout_gravity="center_horizontal" 
     android:layout_weight="0.06" /> 


</LinearLayout> 

Sie einen Fehler in der Feuerbasis Liste Adapter gemacht! nun als Vorlage für Ihre Feuerbasis Liste Adapter verwenden listset, diesen Code verwenden:

FirebaseListAdapter<Data> ad = new FirebaseListAdapter<Data>(MainActivity.this,Data.class,R.layout.listset,ref) { 
    @Override 
    protected void populateView(View view, Data data, int i) { 



     byte[] dec = Base64.decode(data.getImag,Base64.DEFAULT); 
     Bitmap decodeByte = BitmapFactory.decodeByteArray(dec, 0, dec.length); 
     img.setImageBitmap(decodeByte); 

    } 
}; 
Verwandte Themen