【问题标题】:How to get the value from Serializable class in kotlin?如何从 kotlin 的 Serializable 类中获取值?
【发布时间】:2018-10-15 11:42:57
【问题描述】:

我有一个fragment,它正在处理objects。所以我需要将值 Instance 发送到 OnCreateview() 所以我想转换我的可序列化表单,所以我用 getter/setter 创建这些类

BeanDemo.kt

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
    }
}

SendingFragment.kt

class SendingFragment: Fragment(),Serializable
{

    private var linearLayoutManager: LinearLayoutManager? = null

    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 sampleVar = BeanDemo(appDatabase)
            sampleVar.setName(appDatabase)

            val bundle = Bundle()
            bundle.putSerializable("serializedObject",sampleVar)
            val sendFragament = SendingFragment()
            sendFragament.arguments = bundle
            return sendFragament
        }
    }


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

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

        // Inflate the layout for this fragment
        val rootView = inflater.inflate(R.layout.send_fragment, container, false)
        val recyclerView = rootView.findViewById<RecyclerView>(R.id.transaction_recycler_out) as RecyclerView
        linearLayoutManager = LinearLayoutManager(activity, LinearLayout.VERTICAL, false)
        recyclerView.layoutManager = linearLayoutManager
        //recyclerView.adapter = DuplicateTransactionRecyclerAdapter(NewIT,NewAPPDB,NewINCOMTYPE,NewNETWORKPROVSTR)
        recyclerView.setHasFixedSize(true)
        return rootView
    }
}

问题我可以在片段中的类的实例中设置值,但我无法在 OnCretaview() 中获取数据。返回空值。请指导我犯了什么错误。提前考虑

更新

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

    public abstract AddressBookDAO getAddressBook();

    public abstract TokenDAO getTokens();

    public abstract TransactionDAO getTransactions();

    public abstract BalanceDAO getBalances();
}

【问题讨论】:

  • AppDatabase 是RoomDatabase 的实例吗? AppDatabase 可以序列化吗?
  • Appdatabase 不再可序列化,这就是我创建“BeanDemo”类的原因
  • 其他人可以帮忙解决这个问题吗??
  • 第一件事你真的需要把 BeanDemo 对象捆绑,而不是你可以在 onCreateView() 方法上创建它
  • 好的,但是如何在 OnCreateView() 方法中获取 newInstance 参数???是否可以不使用捆绑发送数据?我不认为这是可能的。如果我错了,请指导我

标签: android kotlin getter-setter


【解决方案1】:

如果类AppDatabase 本身不是可序列化的,则不能对BeanDemo 进行序列化。

还要考虑到在 kotlin 中使用类似 Bean 的对象时,您可以使用数据类 (https://kotlinlang.org/docs/reference/data-classes.html) 来避免编写如此多的样板文件。通过这样做:

data class BeanDemo(var MyAppDatabase: AppDatabase? = null) : Serializable()

除其他外,您还可以获得:setter、getter、equals()、hashCode() 和 toString() 明智的实现。

此外,如果您使用的是 Android,请考虑使用 Parcelable 和“Kotlin Android 扩展”(此处的文档:https://kotlinlang.org/docs/tutorials/android-plugin.html)来处理 Bundle。

【讨论】:

  • 好的,请参考链接。如果我将我的 Appdatabase 类变成可序列化的类,如何传递值????
  • 如果 Appdatabase 及其所有成员都是 Serializable 据我所知,您上面的代码应该可以工作。
  • 好的,我用 Appdatabase 更新我的问题,请检查一下
  • 在AppDatabase文件中只包含接口那么如何实现可序列化??
猜你喜欢
  • 1970-01-01
  • 2019-05-21
  • 2021-03-16
  • 1970-01-01
  • 2019-10-24
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
相关资源
最近更新 更多