不确定我是否正确使用了这个随播对象。
数据类:
data class AppModel(
val name: String,
val items: List<ItemModel>,
)
设置数据:
open class PathManager() {
companion object {
var shared = PathManager() // SHARED OBJECT IN QUESTION
}
var app: AppModel? = null
fun setUp() {
// Show loading...
// Parse the JSON
val gson = GsonBuilder().create()
val text = mainActivity.resources.openRawResource(R.raw.jsonFile)
.bufferedReader().use { it.readText() }
val appModel = gson.fromJson(text, AppModel::class.java)
app = appModel
performInitialPath()
}
private fun performInitialPath() {
val app = app?.let { it } ?: error("Attempted to start without an App Config.")
this.app = app // DEBUGGER SHOWS CORRECT VALUES HERE
// Removed irrelevant code for readability, builds 'initialFoo' here
this.mainActivity.addFragment(initialFoo)
}
}
Fragment Builder类(在此处查找路径管理器伴随对象):
class Frag : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
var itemModels: List<ItemModel>? = null
if(PathManager.shared.app?.items != null) { // NULL - WHY?
itemModels = PathManager.shared.app?.items
}
}
}
总结发生的情况:
AppModel是在PathManager()中正确构建的。数据在那里(可以 参见调试器)
路径管理器启动'Frag()'类
Frag()类引用回到在其中创建的伴随对象 PathManager(),尝试在其中查找数据 “ PathManager.shared.app?.items”,但其中的数据为空 应该没有。随播对象与静态对象不同吗? 变量?
我确定我正在丢失某些东西,只是在寻求建议。我是否正确调用了同伴对象?我不能从这样的新类中引用它吗?有什么作用?
答案 0 :(得分:2)
PathManager.shared.app?.items
始终为null,因为您从未将AppModel
分配给伴随对象。 var app: AppModel? = null
类中的PathManager
实例和PathManager.shared.app
是两个不同的对象。
要存储静态数据,您可以执行以下操作:
open class PathManager() {
companion object {
//Here Don't create object is you dont need it
//var shared = PathManager() // SHARED OBJECT IN QUESTION
//Create AppModel instance.
var mAppModel: AppModel? = null
}
//Comment this as will manage companion object.
//var app: AppModel? = null
fun setUp() {
// Show loading...
// Parse the JSON
val gson = GsonBuilder().create()
val text = mainActivity.resources.openRawResource(R.raw.jsonFile)
.bufferedReader().use { it.readText() }
val appModel = gson.fromJson(text, AppModel::class.java)
mAppModel = appModel
performInitialPath()
}
private fun performInitialPath() {
val app = app?.let { it } ?: error("Attempted to start without an App Config.")
mAppModel = app // DEBUGGER SHOWS CORRECT VALUES HERE
// Removed irrelevant code for readability, builds 'initialFoo' here
this.mainActivity.addFragment(initialFoo)
}
}
并在其他课程中使用它
class Frag : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
var itemModels: List<ItemModel>? = null
//Retrive the list from shared object.
if(PathManager.mAppModel?.items != null) { // NULL - WHY?
itemModels = PathManager.mAppModel?.items
}
}
}