Android:为什么在尝试分配给变量时不运行Transformation.map?

efoc

我正在尝试在项目中使用Firebase API,但视图模型中Transformations.map的变量authenticationState无法运行。在这里一直在关注Google的教程(链接转到该项目的ViewModel)。

我希望以后可以将Transformations.map代码添加FirebaseUserLiveData文件中,但似乎无法弄清楚为什么它无法运行。

FirebaseUserLiveData

class FirebaseUserLiveData: LiveData<FirebaseUser?>() {

    private val firebaseAuth = FirebaseAuth.getInstance()
    private val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
        value = firebaseAuth.currentUser
    }


    override fun onActive() {
        firebaseAuth.addAuthStateListener { authStateListener }
    }

    override fun onInactive() {
        firebaseAuth.removeAuthStateListener(authStateListener)
    }
}

SearchMovieFragmentViewModel

class SearchMovieFragmentViewModel : ViewModel() {

    enum class AuthenticationState {
        AUTHENTICATED, UNAUTHENTICATED, INVALID_AUTHENTICATION
    }

    var authenticationState = Transformations.map(FirebaseUserLiveData()) { user ->
        Log.d("TEST", "in the state function")
        if (user != null) {
            AuthenticationState.AUTHENTICATED
        } else {
            AuthenticationState.UNAUTHENTICATED
        }
    }

SearchMovieFragment

class SearchMovieFragment : Fragment(), MovieSearchItemViewModel {

    companion object {
        fun newInstance() = SearchMovieFragment()
    }

    private lateinit var searchMovieFragmentViewModel: SearchMovieFragmentViewModel
    private lateinit var binding: SearchMovieFragmentBinding
    private lateinit var movieRecyclerView: RecyclerView

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

        binding = DataBindingUtil.inflate(inflater, R.layout.search_movie_fragment, container, false)
        searchMovieFragmentViewModel = ViewModelProvider(this).get(SearchMovieFragmentViewModel::class.java)
        binding.lifecycleOwner = this
        binding.viewmodel = searchMovieFragmentViewModel

        binding.signOutButton.setOnClickListener {
            AuthUI.getInstance().signOut(requireContext())
        }

        searchMovieFragmentViewModel.authenticationState.observe(viewLifecycleOwner, Observer { state ->
            when (state) {
                AUTHENTICATED -> searchMovieFragmentViewModel.signedIn = View.VISIBLE
                UNAUTHENTICATED -> searchMovieFragmentViewModel.signedIn = View.GONE
            }
        })
        return binding.root
    }
}
IR42

应该.addAuthStateListener(authStateListener)代替{ authStateListener }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Typescript将动态变量分配给Map对象

Flutter - 不能将“List<Map<String, Object>>”类型的值分配给“List<Classes>”类型的变量

如何使用 map() 将数组元素分配给不同的变量?

使用 map 将此转换的结果分配给具有自动转换的变量

在dart中,如何将const Map中的值分配给const变量?

不能将“Set<String?>”类型的值分配给“Map<String, String>”类型的变量

颤振错误:“对象?”类型的值 不能分配给类型为“Map<dynamic, dynamic>”的变量

“List<Map<String, dynamic>>”类型的值不能分配给“List<ProjectBoxes>”类型的变量

使用 map 并将元素分配给新值时的 Eslint(no-unused-vars) 警告

Flutter 将 QuerySnapshot 分配给 Map<dynamic, dynamic>

将Map <String,List <String >>输入分配给Map <String,List <String >>输出

参数类型 'Map<String, dynamic> Function()' 不能分配给参数类型 'Map<String, dynamic>'

参数类型 'Map<dynamic, dynamic>' 不能分配给参数类型 'Map<String, dynamic>'

将invalidValue分配给Enum变量(为什么不抛出异常?)

为什么在尝试将图像分配给GridView时出现此NullPointerException?

为什么mutable.Map不扩展immutable.Map?

为什么requirejs尝试加载.map?

尝试将变量的地址分配给声明为指向其他类型的变量的指针时,为什么会收到警告?

尝试调用分配给功能的变量时出现错误

尝试将IntVar()分配给变量时获取AttributeError

在Ruby中,如果将函数分配给变量,为什么它会自动运行?

使用for循环创建[] map [string] interface {}时出错->恐慌:在nil映射中分配给条目

为什么map和map_err捕获相同的变量?

将指针分配给多维数组时,为什么会出现“不兼容的指针类型”

为什么Map不扩展Collection接口

为什么不Map#removeAll(Collection <?>)?

Java Map为什么不扩展Collection?

为什么.map()不返回任何内容?

将串联字符串分配给python中的变量时,为什么这么慢?