我目前正在使用 firebase 回收器适配器并遇到此错误
"com.google.firebase.database.DatabaseException: no properties to 序列化在类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,因为
序列 化
可序列化是一个标准的 Java 接口。您可以只实现可序列化接口并添加覆盖方法。这种方法的问题在于使用了反射,这是一个缓慢的过程。此方法会创建大量临时对象,并导致相当多的垃圾回收。但是,可序列化接口更容易实现。
可包裹
可分包过程比可序列化快得多。其中一个原因是我们对序列化过程是明确的,而不是使用反射来推断它。代码为此目的进行了大量优化也是有道理的。
请看下面的示例(可包裹(:
// 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);
结论
包裹比可序列化接口更快 与可序列化接口相比,可分包接口需要更多时间来实现 可序列化接口更容易实现 可序列化接口创建大量临时对象并导致相当多的垃圾回收 可包裹数组可以通过 android 中的 Intent 传递。