Как сериализовать мои объекты класса, используя kotlin? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть фрагмент, и мне нужно передать конструктор значений в методы OncretaeView (), чтобы я получил значения в конструкторе и tr, чтобы преобразовать мои объекты в сериализованный, но он не конвертируется.Вот мой кодПожалуйста, объясните мне, как сериализовать и десериализовать мои объекты.Заранее спасибо

import java.io.Serializable

class SendingFragment: Fragment(),Serializable {
companion object {
        /**
         * new instance pattern for fragment
         */
        @JvmStatic
        fun newInstance(myObject: List<TransactionEntity>?, cc: Context, appDatabase: AppDatabase, networkDefinitionProvider: NetworkDefinitionProvider, incoming: TransactionAdapterDirection): SendingFragment {

            val gson = Gson()
            val gson1 = GsonBuilder().create()
            val model = myObject as List<TransactionEntity>
            val IT = gson.toJson(model)
            System.out.println("json representation :" + IT)

            val bo = ByteArrayOutputStream()
            val so = ObjectOutputStream(bo)
            so.writeObject(appDatabase)
            so.flush()
            val serializedObject = String(Base64.encode(bo.toByteArray()))

            val bundle = Bundle()
            bundle.putString("bundleValue", IT)
            bundle.putSerializable("serializedObject",serializedObject)
            val sendFragament: SendingFragment = SendingFragment()
            sendFragament.setArguments(bundle)
            return sendFragament
        }
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        val mFragserializedObject = arguments!!.getSerializable("serializedObject")
        System.out.println( "json serializedObject" + mFragserializedObject)
    }
}

Appdatabase.kt

@Database(entities = {AddressBookEntry.class, Token.class, Balance.class, TransactionEntity.class}, version = 1)
@TypeConverters({RoomTypeConverters.class})
public abstract class AppDatabase extends RoomDatabase {

    public abstract AddressBookDAO getAddressBook();

    public abstract TokenDAO getTokens();

    public abstract TransactionDAO getTransactions();

    public abstract BalanceDAO getBalances();
}

ОБНОВЛЕНИЕ

class BeanDemo : Serializable {

    var MyAppDatabase: AppDatabase ? = null

    constructor() {

    }

    //secoutry constructor

    constructor(appDatabase: AppDatabase){
        this. MyAppDatabase =  appDatabase
        Log.d("appDatabase : Bean", "appDatabase$appDatabase")
    }

    //getter/setter methods

    fun getName(): AppDatabase? {
        Log.d("appDatabase : getName", "appDatabase$MyAppDatabase")
        return MyAppDatabase
    }

    fun setName(NEWAPPDB: AppDatabase) {
        Log.d("appDatabase : NEWAPPDB", "appDatabase$NEWAPPDB")
        MyAppDatabase = NEWAPPDB
    }
}

**myfragent.kt**



 fun newInstance(myObject: List<TransactionEntity>?, cc: Context, appDatabase: AppDatabase, networkDefinitionProvider: NetworkDefinitionProvider, incoming: TransactionAdapterDirection): SendingFragment {

                val gson = Gson()
                val gson1 = GsonBuilder().create()
                val model = myObject as List<TransactionEntity>
                val IT = gson.toJson(model)
    //             Here
                val sampleVar = BeanDemo(appDatabase)
                sampleVar.setName(appDatabase)
 val bundle = Bundle()
            bundle.putString("bundleValue", IT)
            bundle.putSerializable("serializedObject",sampleVar)
            val sendFragament: SendingFragment = SendingFragment()
            sendFragament.setArguments(bundle)
            return sendFragament

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {



        val bundle = arguments
        val obj = bundle!!.getSerializable("serializedObject") as BeanDemo
        val name = obj.getName()

        }

Но val obj = имеет значение null, в методе установки он содержит значение, но не возвращает его.

1 Ответ

0 голосов
/ 15 октября 2018

Когда вы создаете класс Model/POJO, тогда extend class с Serializable.

Пример -

class JsonData : Serializable {

    @SerializedName("hasPreviousData")
    var hasPreviousData: Boolean = false

    @SerializedName("dataList")
    var dataList: ArrayList<DataList>? = null

    inner class DataList : Serializable {
        @SerializedName("id")
        var id: String? = null
        @SerializedName("createdAt")
        var createdAt: String? = null
        @SerializedName("name")
        var name: String? = null
    }
}
...