android - 如何从 kotlin 的 Serializable 类中获取值?
问题描述
我有一个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
}
}
发送片段.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
本身不是可序列化的,则不能对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 Extensions”(此处的文档:https ://kotlinlang.org/docs/tutorials/android-plugin.html )来使用 Bundles。
推荐阅读
- python - 如果不存在,django manage.py migrate 命令是否创建数据库/模式?
- javascript - 前缀和语言 Discord JS 命令
- ios - 表单中的 SwiftUI Picker 不显示复选标记
- ios - Swift 内存管理:以正确的方式创建视图并避免内存泄漏
- angular - Jasmine 测试错误:超时 - 5000 毫秒内未调用异步回调(由 jasmine.DEFAULT_TIMEOUT_INTERVAL 设置)
- c# - 如何根据用户输入创建数组长度
- git - 在 'git push origin' 之后,'origin/master' 没有得到更新(使用脚本时)
- visual-studio - AzureServiceTokenProvider().GettokenAsync() 为不再登录的帐户获取令牌
- python - 如何将 IP 和 PORT 过滤为两个变量
- javascript - 发送帖子数据并重定向到没有 AJAX 的另一个页面