Я хочу распечатать пользователей, которых я хранил в комнате DB в моем проекте. Я использую представление переработчика для этого. Но я хочу поместить кнопку «Добавить нового пользователя» на одну страницу, чтобы добавить пользователей. Но независимо от того, что я делаю, мое приложение сбоя.
< /code>
И он должен выглядеть так, как это введите описание изображения здесь < /p>
Но он сбои, когда я открываю эту страницу. < /p>
Ошибки: < /p>
2025-02-05 03:44:31.152 24645-24645 AndroidRuntime com.talhakasikci.mylittlelibrary E FATAL EXCEPTION: main
Process: com.talhakasikci.mylittlelibrary, PID: 24645
kotlin.UninitializedPropertyAccessException: lateinit property adapter has not been initialized
at com.talhakasikci.mylittlelibrary.view.MembersListFragment.onViewCreated$lambda$0(MembersListFragment.kt:52)
at com.talhakasikci.mylittlelibrary.view.MembersListFragment.$r8$lambda$sTuiqA9XHSIlUYSztqmtb3yO0Bs(Unknown Source:0)
at com.talhakasikci.mylittlelibrary.view.MembersListFragment$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
at com.talhakasikci.mylittlelibrary.view.MembersListFragment$sam$androidx_lifecycle_Observer$0.onChanged(Unknown Source:2)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
at androidx.lifecycle.LiveData$1.run(LiveData.java:93)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
2025-02-05 03:44:31.225 32339-32452 OneSearchS...stProvider com...le.android.apps.nexuslauncher E Failed to fetch suggestions from AppSearch, fallback to AGA
java.util.concurrent.CompletionException: java.util.NoSuchElementException: No value present
at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:308)
at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:323)
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:684)
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:486)
at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2138)
at com.google.android.apps.nexuslauncher.allapps.H0.onResult(Unknown Source:59)
at android.app.appsearch.SearchSessionUtil$1.lambda$onResult$0(SearchSessionUtil.java:129)
at android.app.appsearch.SearchSessionUtil$1.$r8$lambda$_nlk9WiPjSfaAsqKYmp0aPvSRC0(SearchSessionUtil.java:1)
at android.app.appsearch.SearchSessionUtil$1$$ExternalSyntheticLambda0.run(R8$$SyntheticClass:13)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:144)
at com.google.android.apps.nexuslauncher.allapps.H0.onResult(Unknown Source:16)
at android.app.appsearch.SearchSessionUtil$1.lambda$onResult$0(SearchSessionUtil.java:129)
at android.app.appsearch.SearchSessionUtil$1.$r8$lambda$_nlk9WiPjSfaAsqKYmp0aPvSRC0(SearchSessionUtil.java:1)
at android.app.appsearch.SearchSessionUtil$1$$ExternalSyntheticLambda0.run(R8$$SyntheticClass:13)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.os.HandlerThread.run(HandlerThread.java:67)
< /code>
Также мой код фрагмента: < /p>
package com.talhakasikci.mylittlelibrary.view
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
import com.talhakasikci.mylittlelibrary.R
import com.talhakasikci.mylittlelibrary.adapter.MyMembersRecyclerViewAdapter
import com.talhakasikci.mylittlelibrary.databinding.FragmentMembersListBinding
import com.talhakasikci.mylittlelibrary.view.placeholder.PlaceholderContent
import com.talhakasikci.mylittlelibrary.viewModel.MembersViewModel
/**
* A fragment representing a list of Items.
*/
class MembersListFragment : Fragment() {
private lateinit var viewModel: MembersViewModel
private lateinit var adapter: MyMembersRecyclerViewAdapter
private lateinit var binding:FragmentMembersListBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentMembersListBinding.inflate(inflater,container,false)
val view = inflater.inflate(R.layout.fragment_members_list_list, container, false)
if (view is RecyclerView) {
view.layoutManager = LinearLayoutManager(context)
adapter = MyMembersRecyclerViewAdapter(emptyList())
view.adapter = adapter
}
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProvider(this).get(MembersViewModel::class.java)
viewModel.allMembers.observe(viewLifecycleOwner) { members ->
adapter.updateData(members)
}
binding.DeleteIcon.setOnClickListener {
}
}
}
< /code>
держатель размещения: < /p>
package com.talhakasikci.mylittlelibrary.view.placeholder
import java.util.ArrayList
import java.util.HashMap
/**
* Helper class for providing sample content for user interfaces created by
* Android template wizards.
*/
object PlaceholderContent {
/**
* An array of sample (placeholder) items.
*/
val ITEMS: MutableList
= ArrayList()
/**
* A map of sample (placeholder) items, by ID.
*/
val ITEM_MAP: MutableMap = HashMap()
private const val COUNT = 25
init {
// Add some sample items.
for (i in 1..COUNT) {
addItem(createPlaceholderItem(i))
}
}
private fun addItem(item: PlaceholderItem) {
ITEMS.add(item)
ITEM_MAP[item.id] = item
}
private fun createPlaceholderItem(position: Int): PlaceholderItem {
return PlaceholderItem(
id = position.toString(),
nameView = "Name $position",
surnameView = "Surname $position",
memberIDView = position.toLong()
)
}
/**
* A placeholder item representing a piece of content.
*/
data class PlaceholderItem(
val id: String,
val nameView: String,
val surnameView: String,
val memberIDView: Long
) {
override fun toString(): String {
return "ID: $id\nName: $nameView\nSurname: $surnameView\nMember ID: $memberIDView"
}
}
}
< /code>
Адаптер: < /p>
package com.talhakasikci.mylittlelibrary.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
import com.talhakasikci.mylittlelibrary.view.placeholder.PlaceholderContent.PlaceholderItem
import com.talhakasikci.mylittlelibrary.databinding.FragmentMembersListBinding
import com.talhakasikci.mylittlelibrary.model.Members
/**
* [RecyclerView.Adapter] that can display a [PlaceholderItem].
* TODO: Replace the implementation with code for your data type.
*/
class MyMembersRecyclerViewAdapter(
private var members: List
) : RecyclerView.Adapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
FragmentMembersListBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val member = members[position]
holder.idView.text = member.id.toString()
holder.NameView.text = member.First_Name
holder.SurnameView.text = member.Last_Name
holder.MemberID.text = member.MemberID.toString()
}
override fun getItemCount(): Int = members.size
fun updateData(newMembers: List) {
members = newMembers
notifyDataSetChanged()
}
inner class ViewHolder(binding: FragmentMembersListBinding) :
RecyclerView.ViewHolder(binding.root) {
val idView: TextView = binding.itemNumber
val NameView: TextView = binding.Name
val SurnameView: TextView = binding.Surname
val MemberID: TextView = binding.MemberID
}
}
< /code>
viewmodel: < /p>
package com.talhakasikci.mylittlelibrary.viewModel
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.viewModelScope
import com.talhakasikci.mylittlelibrary.model.Members
import com.talhakasikci.mylittlelibrary.roomdb.BooksDB
import com.talhakasikci.mylittlelibrary.roomdb.MembersDao
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class MembersViewModel(application: Application) : AndroidViewModel(application) {
private val membersDao: MembersDao = BooksDB.getDatabase(application).MembersDao()
val allMembers: LiveData = membersDao.getAll()
fun insert(member: Members) {
viewModelScope.launch(Dispatchers.IO) {
membersDao.MemberInsert(member)
}
}
fun delete(member: Members) {
viewModelScope.launch(Dispatchers.IO) {
membersDao.MemberDelete(member)
}
}
}
< /code>
Примечание: у моего DB не проблема. Я могу распечатать пользователей, когда я просто использую просмотр переработки.
Подробнее здесь: https://stackoverflow.com/questions/794 ... ml-android
Как добавить кнопку конец переработки в XML/Android ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение