在Android上从FirebaseDatabase获取位图时出错

时间:2017-08-28 03:09:27

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

我有一个具有Bitmap对象的类,当我将setValue(MyClass.class)设置为FirebaseDatabase时,我发现这是可能的!并且RealtimeDatabase保存了Bitmap图像的属性。当我读取值时发生问题,发生以下错误:

com.google.firebase.database.DatabaseException: Class android.graphics.Bitmap is missing a constructor with no arguments

但我无法覆盖Bitmap图像的构造函数。我怎样才能解决这种情况?

ref.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Iterator<DataSnapshot> iterator = dataSnapshot.getChildren().iterator();
                log("Init ValueEventListener onDataChange()");

                while( iterator.hasNext() ) {
                    DataSnapshot data = iterator.next();
                    log("Data : " + data.getKey());
                    Treino t = data.getValue(Treino.class);
                }
            }
}

public class Treino implements Serializable{

    String nome;
    List<Exercicio> listaExercicios;
    List<Integer> listaDiasSemana;
    String hora; // hh:mm

    public Treino(String nome, List<Exercicio> listaExercicios, List<Integer> listaDiasSemana, String hora) {
        this.nome = nome;
        this.listaExercicios = listaExercicios;
        this.listaDiasSemana = listaDiasSemana;
        this.hora = hora;
    }

public class Exercicio implements Serializable {

    String nome, tipo, nomeImagem;
    Bitmap imagem;

    public Exercicio() {
    }

    public Exercicio(String nome, Bitmap imagem, String nomeImagem) {
        this.nome = nome;
        this.imagem = imagem;
        this.nomeImagem = nomeImagem;
    }

我省略了getter和setter。

1 个答案:

答案 0 :(得分:1)

您必须将Bitmap转换为String

这是代码

  public String BitMapToString(Bitmap bitmap){
        ByteArrayOutputStream ByteStream=new  ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG,100, ByteStream);
        byte [] b=ByteStream.toByteArray();
        String temp=Base64.encodeToString(b, Base64.DEFAULT);
        return temp;
  }

Exercicio.class

public class Exercicio implements Serializable {

String nome, tipo, nomeImagem;
String bitmapImageString;

public Exercicio() {
}

public Exercicio(String nome, String imagem, String nomeImagem) {
    this.nome = nome;
    this.bitmapImageString = imagem;
    this.nomeImagem = nomeImagem;
}
}

从服务器获取String时。您必须将String转换为Bitmap

public Bitmap StringToBitMap(String encodedString){
 try{
   byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT);
   Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
   return bitmap;
 }catch(Exception e){
   e.getMessage();
   return null;
 }
}

HOPE!帮助你!