【问题标题】:How to retrieve Images from firebase in listview如何在listview中从firebase中检索图像
【发布时间】:2016-04-19 23:42:41
【问题描述】:

我尝试使用 Firebase 列表适配器在列表视图中检索图像。我正在使用 POJO 类从 firebase 保存和检索图像。

下面是我的 POJO 类: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;
  }
}

图片存储代码:

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

检索图像的代码:

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

如何在 firebase 列表适配器中设置 getter 以获取图像。

【问题讨论】:

  • 我推荐你使用图片作为String(url),然后使用Glide框架来展示它们;)
  • 我如何在上面的代码中使用 getter 方法来做到这一点,因为我已经在 Base64 字符串中转换了图像。
  • 您能否提供一个代码如何使用 glide 从 firebase 检索图像。
  • Firebase 刚刚发布了一项名为 Firebase Storage 的新功能。这允许您将图像和其他非 JSON 数据上传到专用存储服务。我们强烈建议您使用它来存储图像,而不是将它们作为 base64 编码数据存储在 JSON 数据库中。 Android 文档还包含如何使用 Glide 显示这些图像的示例。

标签: android firebase


【解决方案1】:

您可以使用存储在 Firebase 上的 JSON,保存 url-images(例如位于 Imgur 上),然后使用 Glide 作为图像检索而没有任何复杂性,futurestud.io 网站,例如:

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

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

相信我,使用 Firebase 非常简单

【讨论】:

  • 但是我怎样才能从用户那里获取所有这些图像并将它们保存到 imgur,然后再将它们从 firebase 导入我的应用程序。
  • 我已经尝试过了,但它在行中显示异常:FirebaseListAdapter&lt;Data&gt; ad = new FirebaseListAdapter&lt;Data&gt;(MainActivity.this,Data.class,R.layout.row,ref) and img.setImageBitmap(decodeByte) 我在检索图像时遇到问题。
  • 我知道 firebase 只需要默认构造函数,可以吗?
【解决方案2】:

创建另一个名为 listset 的 xml 文件:

 <?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>

您在 Firebase 列表适配器中犯了一个错误! 现在使用 listset 作为您的 firebase 列表适配器的模板,使用此代码:

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

    }
};

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2020-10-23
    • 2020-11-25
    • 2021-09-25
    相关资源
    最近更新 更多