Firebase Realtime Не найдены свойства для сериализации в классе java .lang.CharSequence - PullRequest
0 голосов
/ 21 января 2020

В настоящее время я использую адаптер переработчика 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;
    }

}

1 Ответ

0 голосов
/ 21 января 2020

Вы должны использовать Percable, потому что

Сериализуемый

Сериализуемый является стандартным Java интерфейсом. Вы можете просто реализовать интерфейс Serializable и добавить методы переопределения. Проблема этого подхода заключается в том, что используется рефлексия, и это медленный процесс. Этот метод создает много временных объектов и вызывает довольно много мусора. Однако интерфейс Serializable проще в реализации.

Parcelable

Процесс 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 массив может передаваться через Intent в android.

...