![](/img/trans.png)
[英]Deserialize a class containing java.lang.CharSequence member variable
[英]Firebase Realtime No properties to serialize found on class java.lang.CharSequence
我目前正在使用 firebase 回收器适配器并遇到此错误
“com.google.firebase.database.DatabaseException:在类 java.lang.CharSequence 上找不到要序列化的属性”。
我目前正在使用字符序列从按钮中检索文本。
//Class for storing creating litter sightings
public class Item implements Serializable
{
//class variables
public CharSequence user;
public String brief;
//constructor
public Item(CharSequence user, String brief)
{
this.user=user;
this.brief=brief;
}
public Item()
{
}
//getters
public String getBrief() {
return brief;
}
public void setBrief(String myBrief) {
this.brief = myBrief;
}
public String getUser() {
return user;
}
}
你必须使用 Percable 因为
可序列化
Serializable 是一个标准的 Java 接口。 您可以只实现 Serializable 接口并添加覆盖方法。 这种方法的问题在于使用了反射,而且这是一个缓慢的过程。 此方法会创建大量临时对象并导致相当多的垃圾收集。 但是,Serializable 接口更容易实现。
可包裹
Parcelable 过程比 Serializable 快得多。 造成这种情况的原因之一是我们明确说明了序列化过程,而不是使用反射来推断它。 代码已经为此目的进行了大量优化也是理所当然的。
看下面的例子(Parcelable):
// MyObjects Parcelable class
import java.util.ArrayList;
import android.os.Parcel;
import android.os.Parcelable;
public class MyObjects implements Parcelable {
private int age;
private String name;
private ArrayList<String> address;
public MyObjects(String name, int age, ArrayList<String> address) {
this.name = name;
this.age = age;
this.address = address;
}
public MyObjects(Parcel source) {
age = source.readInt();
name = source.readString();
address = source.createStringArrayList();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(age);
dest.writeString(name);
dest.writeStringList(address);
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public ArrayList<String> getAddress() {
if (!(address == null))
return address;
else
return new ArrayList<String>();
}
public static final Creator<MyObjects> CREATOR = new Creator<MyObjects>() {
@Override
public MyObjects[] newArray(int size) {
return new MyObjects[size];
}
@Override
public MyObjects createFromParcel(Parcel source) {
return new MyObjects(source);
}
};
}
// MyObjects instance
MyObjects mObjects = new MyObjects("name", "age", "Address array here");
// Passing MyOjects instance
Intent mIntent = new Intent(FromActivity.this, ToActivity.class);
mIntent.putExtra("UniqueKey", mObjects);
startActivity(mIntent);
结论
Parcelable 比 Serializable 接口更快 Parcelable 接口比 Serializable 接口需要更多时间实现 Serializable 接口更容易实现 Serializable 接口创建大量临时对象并导致相当多的垃圾收集 Parcelable 数组可以通过 android 中的 Intent 传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.