如何修复kotlin Lateinit属性绑定未初始化

问题描述 投票:0回答:1

我收到此错误并需要尽快获得帮助

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bugunneyesem/com.example.bugunneyesem.TariflerPageUser}: kotlin.UninitializedPropertyAccessException: lateinit property binding has not been initialized

我的活动

package com.example.bugunneyesem

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.example.bugunneyesem.databinding.ActivityTariflerPageUserBinding
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener

class TariflerPageUser : AppCompatActivity() {
    lateinit var binding: ActivityTariflerPageUserBinding
    private lateinit var firebaseAuth: FirebaseAuth

    private lateinit var kategoriArrayList: ArrayList<ModelKategori>
    private lateinit var viewPagerAdapter: ViewPagerAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        firebaseAuth = FirebaseAuth.getInstance()

        binding = ActivityTariflerPageUserBinding.inflate(layoutInflater)

        setupWithViewPagerAdapter(binding.viewPager)
        binding.tabLayout.setupWithViewPager(binding.viewPager)

        binding.backBtn.setOnClickListener{
            startActivity(Intent(this,ManiAnasayfa::class.java))
        }
        binding.fabBtn.setOnClickListener{
            startActivity(Intent(this,TarifEkleAdmin::class.java))
        }
    }

    private fun setupWithViewPagerAdapter(viewPager: ViewPager){
        viewPagerAdapter = ViewPagerAdapter(supportFragmentManager,
            FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, this)

        kategoriArrayList = ArrayList()

        //veri tabanından kategorileri yükleme
        val ref = FirebaseDatabase.getInstance().getReference("Kategoriler")
        ref.addListenerForSingleValueEvent(object : ValueEventListener{
            override fun onDataChange(snapshot: DataSnapshot) {
                kategoriArrayList.clear()

                val modelAll = ModelKategori("01", "Hepsi", 1, "")
                val modelMostViewed = ModelKategori("01", "En Çok Görüntülenen", 1, "")

                kategoriArrayList.add(modelAll)
                kategoriArrayList.add(modelMostViewed)
                //viewPagerAdapter'a ekleme yeni kategori eklerken burayada eklenmeli
                viewPagerAdapter.addFragment(
                    FoodsUserFragment.newInstance(
                        "${modelAll.id}",
                        "${modelAll.kategori}",
                        "${modelAll.uid}"
                    ), modelAll.kategori
                )
                viewPagerAdapter.addFragment(
                    FoodsUserFragment.newInstance(
                        "${modelMostViewed.id}",
                        "${modelMostViewed.kategori}",
                        "${modelMostViewed.uid}"
                    ), modelMostViewed.kategori
                )

                //refresh list
                viewPagerAdapter.notifyDataSetChanged()

                //firebase db den load diğer kategoriler için
                for(ds in snapshot.children){
                    //get data
                    val model = ds.getValue(ModelKategori::class.java)
                    kategoriArrayList.add(model!!)
                    //viewPagerAdapter a ekleme
                    viewPagerAdapter.addFragment(
                        FoodsUserFragment.newInstance(
                            "${model.id}",
                            "${model.kategori}",
                            "${model.uid}"
                        ), model.kategori
                    )

                    viewPagerAdapter.notifyDataSetChanged()
                }
            }

            override fun onCancelled(error: DatabaseError) {
                Toast.makeText(applicationContext,"SetupWithPageAdapter hata", Toast.LENGTH_LONG).show()
            }

        })

        //setup adapter to viewpager
        viewPager.adapter = viewPagerAdapter
    }

    class ViewPagerAdapter(fm: FragmentManager, behavior: Int, context: Context): FragmentPagerAdapter(fm, behavior){
        private val fragmentsList: ArrayList<FoodsUserFragment> = ArrayList()
        //kategori başlıklarının listesi for tab
        private val fragmentTitleList: ArrayList<String> = ArrayList()

        private val context: Context

        init {
            this.context = context
        }

        override fun getCount(): Int {
            return fragmentsList.size
        }

        override fun getItem(position: Int): Fragment {
            return fragmentsList[position]
        }

        override fun getPageTitle(position: Int): CharSequence {
            return fragmentTitleList[position]
        }

        public fun addFragment(fragment: FoodsUserFragment, title: String){
            fragmentsList.add(fragment)
            fragmentTitleList.add(title)
        }

    }
}

build.gradle(应用程序)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'




android {
    namespace 'com.example.bugunneyesem'
    compileSdk 34


    defaultConfig {
        applicationId "com.example.bugunneyesem"
        minSdk 23
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8

    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures{
        viewBinding true
    }

}
def lottieVersion = '6.2.0'
dependencies {

    implementation 'androidx.core:core-ktx:1.12.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.11.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4' //2.1.4
    implementation 'androidx.navigation:navigation-fragment-ktx:2.7.5'
    implementation 'androidx.navigation:navigation-ui-ktx:2.7.5'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.2'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2'
    implementation 'com.google.firebase:firebase-storage:20.3.0'
    
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
    implementation "com.airbnb.android:lottie:$lottieVersion"
    
    implementation 'com.google.firebase:firebase-firestore:24.10.0'
    implementation 'com.google.firebase:firebase-database:20.3.0'
    implementation 'com.google.firebase:firebase-core:21.1.1'
    implementation 'com.google.firebase:firebase-auth:20.0.0'
    
    implementation 'androidx.work:work-runtime-ktx:2.9.0' //2.7.1
   
    implementation 'com.squareup.picasso:picasso:2.8'








}

我尝试在我的应用程序上添加“过滤类别”页面,我的代码中没有错误,但是当我尝试运行我的应用程序时,我遇到了该错误,我需要尽快帮助

android firebase kotlin firebase-realtime-database
1个回答
0
投票

使用前需要先给绑定器充气。

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Instanciating the binding first
        binding = ActivityTariflerPageUserBinding.inflate(layoutInflater)
        // Use it on the content view
        setContentView(binding.root)
        firebaseAuth = FirebaseAuth.getInstance()

        setupWithViewPagerAdapter(binding.viewPager)
        binding.tabLayout.setupWithViewPager(binding.viewPager)

        binding.backBtn.setOnClickListener{
            startActivity(Intent(this,ManiAnasayfa::class.java))
        }
        binding.fabBtn.setOnClickListener{
            startActivity(Intent(this,TarifEkleAdmin::class.java))
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.