我有一个具有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。
答案 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!帮助你!