繁体   English   中英

Firebase Realtime 在类 java.lang.CharSequence 上找不到要序列化的属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM