2017-08-28 5 views
0

私はBitmapオブジェクトを持つクラスを持っています。そして、私がFirebaseDatabaseにsetValue(MyClass.class)を設定すると、これが可能です。 RealtimeDatabaseはビットマップイメージのプロパティを保存します。私は値を読んだときに問題が発生し、次のエラーが起こった:AndroidのFirebaseDatabaseからBitmapを取得する際のエラー

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

が、私は、ビットマップ画像のコンストラクタをオーバーライドすることはできません。このような状況を回避するにはどうすればよいですか?

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

私はゲッタとセッタを省略しました。

答えて

1

あなたは文字列

にビットマップを変換する必要があり、サーバから文字列を取得するとこれは、コード

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

です。文字列をビットマップに変換する必要があります

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!助けます!

+0

はい、動作します。 – Augusto

関連する問題