Не могу вставить данные в базу данных номеров. ⇐ Android
-
Anonymous
Не могу вставить данные в базу данных номеров.
Привет, ребята, у меня проблема с вставкой данных в базу данных с помощью Room. я много чего перепробовал, но ничего не получается, может быть, вы поможете мне решить эту проблему
проблема в том, что я хочу вставить данные, когда нажимаю кнопку FAB с помощью setOnClickListener
binding.favoriteButton.setOnClickListener { val userId = элемент если (userId!= ноль) { viewModel.viewModelScope.launch { если (viewModel.isFavorite.value == true) { viewModel.delete(userId) Log.d("DetailUserActivity", "Идентификатор пользователя с $userId в избранном.") } еще { viewModel.insert(userId) Log.d("DetailUserActivity", "Идентификатор пользователя с $userId будет избранным.") } } } } внутри setOnClickListener я проверяю идентификатор пользователя, если идентификатора нет в БД, я отправлю данные с помощью функции вставки, если данные находятся в БД, я удалю данные с помощью функции удаления, но дело в данных невозможно вставить или удалить из БД, я проверил инспектор приложений, но данные не отображаются, в Log Cat есть ошибка, и я не понимаю, что это значит, вот ошибка: E Не удалось открыть канал QEMU «qemud:network»: неверный аргумент. E RemoteConnection не удалось инициализировать: RemoteConnection не удалось открыть канал E Не удалось загрузить модуль memtrack. примечание: с моим соединением все в порядке, поэтому я не думаю, что ошибка связана с моим соединением
вот мой код:
// DetailUserActivit.kt
Пакет
com.example.projectone.userdetail импортировать androidx.appcompat.app.AppCompatActivity импортировать android.os.Bundle импортировать android.util.Log импортировать android.view.MenuItem импортировать android.widget.Toast импортировать androidx.activity.viewModels импортировать androidx.core.content.ContextCompat импортировать androidx.core.view.isVisible импортировать androidx.fragment.app.Fragment импортировать androidx.lifecycle.viewModelScope импортировать катушку.загрузку импортировать катушку.transform.CircleCropTransformation импортировать com.example.project_one.R импортировать com.example.project_one.databinding.ActivityDetailUserBinding импортировать com.example.projectone.data.model.ResponseDetailUserGithub импортировать com.example.projectone.data.model.ResponseUserGithub импортировать com.example.projectone.userdetail.fragment.UserFollower импортировать com.example.projectone.utils.ResultViewModel импортировать com.google.android.material.tabs.TabLayout импортировать com.google.android.material.tabs.TabLayoutMediator импортировать kotlinx.coroutines.Dispatchers импортировать kotlinx.coroutines.launch импортировать kotlinx.coroutines.withContext класс DetailUserActivity : AppCompatActivity() { частная привязка lateinit var: ActivityDetailUserBinding частный val viewModel от viewModels{ DetailViewModelFactory (приложение) } частный вар isFavorite = false переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) привязка = ActivityDetailUserBinding.inflate(layoutInflater) setContentView(binding.root) supportActionBar?.setDisplayHomeAsUpEnabled(истина) val item = Intent.getParcelableExtra("userItems") val username = item?.login ?: «Пользователь не найден» viewModel.resultDetailUser.observe(this) { когда это) { это ResultViewModel.Success -> { val user = it.data как ResponseDetailUserGithub привязка.imageUser.load(user.avatar_url) { преобразования (CircleCropTransformation()) } привязка.полныеИмена.текст = имя пользователя.имя привязка.имя_пользователя.текст = пользователь.логин привязка.followerCount.text = user.followers.toString() привязка.followingCount.text = user.following.toString() привязка.repositoryCount.text = user.public_repos.toString() } это ResultViewModel.Error -> { Toast.makeText(this, it.Exception.message.toString(), Toast.LENGTH_SHORT).show() } это ResultViewModel.Loading -> { привязка.progressBar.isVisible = it.isLoading } } } viewModel.getUser(имя пользователя) val фрагменты = mutableListOf( UserFollower.newInstance(UserFollower.FOLLOWERS), UserFollower.newInstance(UserFollower.FOLLOWING) ) val titleTabFragments = mutableListOf( getString(R.string.follower_tab), getString(R.string.following_tab) ) val адаптер = DetailUserAdapter (это, фрагменты) привязка.viewPager.adapter = адаптер TabLayoutMediator(binding.tabLayout,binding.viewPager) {tab, позиция -> tab.text = titleTabFragments[позиция] }.прикреплять() привязка.tabLayout.addOnTabSelectedListener(объект: TabLayout.OnTabSelectedListener { переопределить fun onTabSelected(tab: TabLayout.Tab?) { если (tab?.position == 0) { viewModel.getFollowerUser(имя пользователя) } еще { viewModel.getFollowingUser(имя пользователя) } } переопределить fun onTabUnselected(tab: TabLayout.Tab?) { } переопределить fun onTabReselected(tab: TabLayout.Tab?) { } }) viewModel.getFollowerUser(имя пользователя) viewModel.resultFavoriteAdd.observe(this) { updateFavoriteButtonColor (истина) } viewModel.resultFavoriteDelete.observe(this) { updateFavoriteButtonColor (ложь) } viewModel.isFavorite.observe(this) { isFavoriteValue -> updateFavoriteButtonColor (isFavoriteValue) } привязка.favoriteButton.setOnClickListener { val userId = элемент если (userId!= ноль) { viewModel.viewModelScope.launch { // Статус проверки: Любимый статус berdasarkan saat ini если (isFavorite) { // Jika sebelumnya adalah Favorite, база данных hapus dari viewModel.delete(userId) // Статус пользователя: «Избранное» и «Избранное» isFavorite = ложь updateFavoriteButtonColor (ложь) Log.d("DetailUserActivity", "Идентификатор пользователя с $userId в избранном.") } еще { // Если вы хотите выбрать избранное, выберите базу данных viewModel.insert(userId) // Статус пользователя: «Избранное» и «Избранное» isFavorite = правда updateFavoriteButtonColor (истина) Log.d("DetailUserActivity", "Идентификатор пользователя с $userId может быть избранным.") } } } } } частное развлечение updateFavoriteButtonColor(isFavorite: Boolean) { val colorRes = if (isFavorite) R.color.lavender else android.R.color.white val color = ContextCompat.getColor(this, colorRes) привязка.favoriteButton.setColorFilter(цвет) } переопределить удовольствие onOptionsItemSelected(item: MenuItem): Boolean { когда (item.itemId) { android.R.id.home -> { заканчивать() } } вернуть super.onOptionsItemSelected(пункт) } } // DetailViewModel.kt
импортировать android.app.Application импортировать android.util.Log импортировать androidx.lifecycle.LiveData импортировать androidx.lifecycle.MutableLiveData импортировать androidx.lifecycle.ViewModel импортировать androidx.lifecycle.ViewModelProvider импортировать androidx.lifecycle.viewModelScope импортировать com.example.projectone.data.db.FavDao импортировать com.example.projectone.data.model.ResponseUserGithub импортировать com.example.projectone.data.repo.FavoriteRepository импортировать com.example.projectone.data.service.ApiClient импортировать com.example.projectone.utils.ResultViewModel импортировать kotlinx.coroutines.Dispatchers импортировать kotlinx.coroutines.flow.catch импортировать kotlinx.coroutines.flow.flow импортировать kotlinx.coroutines.flow.onCompletion импортировать kotlinx.coroutines.flow.onStart импортировать kotlinx.coroutines.launch класс DetailUserViewModel (приложение: Приложение): ViewModel() { val resultDetailUser = MutableLiveData() val resultFollowersUser = MutableLiveData() val resultFollowingUser = MutableLiveData() val resultFavoriteAdd = MutableLiveData() val resultFavoriteDelete = MutableLiveData() val resultFavoriteCheck = MutableLiveData() val myGithubDetail = MutableLiveData() val myFollowerUser = MutableLiveData() val myFollowingUser = MutableLiveData() частный val mFavRepo: FavoriteRepository = FavoriteRepository(приложение) частный val _isFavorite = MutableLiveData() val isFavorite: LiveData = _isИзбранное приостановить забавную вставку (избранное: ResponseUserGithub.Item) { если (_isFavorite.value! = ноль) { если (_isFavorite.value == true) { mFavRepo.insert(избранное) resultFavoriteAdd.value = ResultViewModel.Success(true) } } _isFavorite.value = _isFavorite.value != true } приостановить веселье delete(fav: ResponseUserGithub.Item) { если (_isFavorite.value! = ноль) { если (_isFavorite.value == true) { mFavRepo.delete(избранное) resultFavoriteDelete.value = ResultViewModel.Success(true) } } _isFavorite.value = _isFavorite.value != true } весело findById(id: Int) { viewModelScope.launch { val isFavoriteValue = mFavRepo.findById(id)!= null _isFavorite.postValue(isFavoriteValue) } } весело getUser (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getDetailUserFromGithub(имя пользователя) излучать (ответ) } .onStart { resultDetailUser.value = ResultViewModel.Loading(true) } .по окончании { resultDetailUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() resultDetailUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value resultDetailUser.value = ResultViewModel.Success(it) } } } весело getFollowerUser (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getFollowerUserFromGithub(имя пользователя) излучать (ответ) } .onStart { resultFollowersUser.value = ResultViewModel.Loading(true) } .по окончании { resultFollowersUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() resultFollowersUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value resultFollowersUser.value = ResultViewModel.Success(it) } } } весело getFollowingUser (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getFollowingUserFromGithub(имя пользователя) излучать (ответ) } .onStart { resultFollowingUser.value = ResultViewModel.Loading(true) } .по окончании { resultFollowingUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() resultFollowingUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value resultFollowingUser.value = ResultViewModel.Success(it) } } } весело getMyGithub (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getMyGithub(имя пользователя) излучать (ответ) } .onStart { myGithubDetail.value = ResultViewModel.Loading(true) } .по окончании { myGithubDetail.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() myGithubDetail.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value myGithubDetail.value = ResultViewModel.Success(it) } } } весело getMyFollower(имя пользователя: Нить) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getMyFollowerGithub(имя пользователя) излучать (ответ) } .onStart { myFollowerUser.value = ResultViewModel.Loading(true) } .по окончании { myFollowerUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() myFollowerUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value myFollowerUser.value = ResultViewModel.Success(it) } } } весело getMyFollowing (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getMyFollowingGithub(имя пользователя) излучать (ответ) } .onStart { myFollowingUser.value = ResultViewModel.Loading(true) } .по окончании { myFollowingUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() myFollowingUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value myFollowingUser.value = ResultViewModel.Success(it) } } } } класс DetailViewModelFactory (частное приложение val: Приложение): ViewModelProvider.NewInstanceFactory() { переопределить fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(DetailUserViewModel::class.java)) { @Suppress("UNCHECKED_CAST") вернуть DetailUserViewModel (приложение) как T } throw IllegalAccessException("Unkwon ViewModel:" + modelClass.name) } }
// FavoriteRepository.kt
импортировать android.app.Application импортировать androidx.lifecycle.LiveData импортировать com.example.projectone.data.db.FavDao импортировать com.example.projectone.data.db.FavDb импортировать com.example.projectone.data.model.ResponseUserGithub импортировать kotlinx.coroutines.Dispatchers импортировать kotlinx.coroutines.withContext импортировать java.util.concurrent.ExecutorService импортировать java.util.concurrent.Executors класс FavoriteRepository (приложение: Приложение) { частный вал mFavDao: FavDao частный val executorService: ExecutorService = Executors.newFixedThreadPool(4) в этом { val db = FavDb.getDatabase (приложение) mFavDao = db.FavDao() } весело getAllFavUser(): LiveData = mFavDao.loadAll() забавная вставка (избранное: ResponseUserGithub.Item) { executorService.execute { mFavDao.insertFav(fav) } } весело удалить (избранное: ResponseUserGithub.Item) { executorService.execute { mFavDao.deleteFav(fav) } } весело findById(id: Int): LiveData { вернуть mFavDao.findByid(id) } } // FavDao.kt
import androidx.lifecycle.LiveData импортировать androidx.room.Dao импортировать androidx.room.Delete импортировать androidx.room.Insert импортировать androidx.room.OnConflictStrategy импортировать androidx.room.Query импортировать com.example.projectone.data.model.ResponseUserGithub @Дао интерфейс FavDao { @Insert(onConflict = OnConflictStrategy.REPLACE) забавная вставкаFav (пользователь: ResponseUserGithub.Item) @Query("ВЫБРАТЬ * ОТ пользователя") весело loadAll(): LiveData @Query("SELECT * FROM user WHERE id LIKE:id LIMIT 1") весело findByid(id: Int): LiveData @Удалить весело deleteFav (пользователь: ResponseUserGithub.Item) = } // FavDb.kt
импортировать android.content.Context импортировать android.provider.ContactsContract импортировать androidx.room.Database импортировать androidx.room.Room импортировать androidx.room.RoomDatabase импортировать com.example.projectone.data.model.ResponseUserGithub @Database(entities = [ResponseUserGithub.Item::class], версия = 1) абстрактный класс FavDb : RoomDatabase() { абстрактное развлечение FavDao(): FavDao сопутствующий объект { @Неустойчивый частная переменная INSTANCE: FavDb? = ноль @JvmStatic весело getDatabase (контекст: Контекст): FavDb { если (ЭКЗЕМПЛЯР == ноль) { синхронизировано (FavDb::class.java) { ЭКЗЕМПЛЯР = Room.databaseBuilder(context.applicationContext, FavDb::class.java, "fav_database") .строить() } } вернуть INSTANCE как FavDb } } } // ResponseUseGithub.kt
импортировать android.os.Parcelable импортировать androidx.room.ColumnInfo импортировать androidx.room.Entity импортировать androidx.room.PrimaryKey импортировать kotlinx.parcelize.Parcelize класс данных ResponseUserGithub( val incomplete_results: логическое значение, val элементы: List, значение total_count: Int ) { @Parcelize @Entity(tableName = "пользователь") класс данных Item( @ColumnInfo(name = "avatar_url") val avatar_url: Строка, @Основной ключ действительный идентификатор: Int, @ColumnInfo(имя = «логин») val логин: строка ) : Посылки } Может быть, вы сможете мне помочь и научить, как решить эту проблему
Привет, ребята, у меня проблема с вставкой данных в базу данных с помощью Room. я много чего перепробовал, но ничего не получается, может быть, вы поможете мне решить эту проблему
проблема в том, что я хочу вставить данные, когда нажимаю кнопку FAB с помощью setOnClickListener
binding.favoriteButton.setOnClickListener { val userId = элемент если (userId!= ноль) { viewModel.viewModelScope.launch { если (viewModel.isFavorite.value == true) { viewModel.delete(userId) Log.d("DetailUserActivity", "Идентификатор пользователя с $userId в избранном.") } еще { viewModel.insert(userId) Log.d("DetailUserActivity", "Идентификатор пользователя с $userId будет избранным.") } } } } внутри setOnClickListener я проверяю идентификатор пользователя, если идентификатора нет в БД, я отправлю данные с помощью функции вставки, если данные находятся в БД, я удалю данные с помощью функции удаления, но дело в данных невозможно вставить или удалить из БД, я проверил инспектор приложений, но данные не отображаются, в Log Cat есть ошибка, и я не понимаю, что это значит, вот ошибка: E Не удалось открыть канал QEMU «qemud:network»: неверный аргумент. E RemoteConnection не удалось инициализировать: RemoteConnection не удалось открыть канал E Не удалось загрузить модуль memtrack. примечание: с моим соединением все в порядке, поэтому я не думаю, что ошибка связана с моим соединением
вот мой код:
// DetailUserActivit.kt
Пакет
com.example.projectone.userdetail импортировать androidx.appcompat.app.AppCompatActivity импортировать android.os.Bundle импортировать android.util.Log импортировать android.view.MenuItem импортировать android.widget.Toast импортировать androidx.activity.viewModels импортировать androidx.core.content.ContextCompat импортировать androidx.core.view.isVisible импортировать androidx.fragment.app.Fragment импортировать androidx.lifecycle.viewModelScope импортировать катушку.загрузку импортировать катушку.transform.CircleCropTransformation импортировать com.example.project_one.R импортировать com.example.project_one.databinding.ActivityDetailUserBinding импортировать com.example.projectone.data.model.ResponseDetailUserGithub импортировать com.example.projectone.data.model.ResponseUserGithub импортировать com.example.projectone.userdetail.fragment.UserFollower импортировать com.example.projectone.utils.ResultViewModel импортировать com.google.android.material.tabs.TabLayout импортировать com.google.android.material.tabs.TabLayoutMediator импортировать kotlinx.coroutines.Dispatchers импортировать kotlinx.coroutines.launch импортировать kotlinx.coroutines.withContext класс DetailUserActivity : AppCompatActivity() { частная привязка lateinit var: ActivityDetailUserBinding частный val viewModel от viewModels{ DetailViewModelFactory (приложение) } частный вар isFavorite = false переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) привязка = ActivityDetailUserBinding.inflate(layoutInflater) setContentView(binding.root) supportActionBar?.setDisplayHomeAsUpEnabled(истина) val item = Intent.getParcelableExtra("userItems") val username = item?.login ?: «Пользователь не найден» viewModel.resultDetailUser.observe(this) { когда это) { это ResultViewModel.Success -> { val user = it.data как ResponseDetailUserGithub привязка.imageUser.load(user.avatar_url) { преобразования (CircleCropTransformation()) } привязка.полныеИмена.текст = имя пользователя.имя привязка.имя_пользователя.текст = пользователь.логин привязка.followerCount.text = user.followers.toString() привязка.followingCount.text = user.following.toString() привязка.repositoryCount.text = user.public_repos.toString() } это ResultViewModel.Error -> { Toast.makeText(this, it.Exception.message.toString(), Toast.LENGTH_SHORT).show() } это ResultViewModel.Loading -> { привязка.progressBar.isVisible = it.isLoading } } } viewModel.getUser(имя пользователя) val фрагменты = mutableListOf( UserFollower.newInstance(UserFollower.FOLLOWERS), UserFollower.newInstance(UserFollower.FOLLOWING) ) val titleTabFragments = mutableListOf( getString(R.string.follower_tab), getString(R.string.following_tab) ) val адаптер = DetailUserAdapter (это, фрагменты) привязка.viewPager.adapter = адаптер TabLayoutMediator(binding.tabLayout,binding.viewPager) {tab, позиция -> tab.text = titleTabFragments[позиция] }.прикреплять() привязка.tabLayout.addOnTabSelectedListener(объект: TabLayout.OnTabSelectedListener { переопределить fun onTabSelected(tab: TabLayout.Tab?) { если (tab?.position == 0) { viewModel.getFollowerUser(имя пользователя) } еще { viewModel.getFollowingUser(имя пользователя) } } переопределить fun onTabUnselected(tab: TabLayout.Tab?) { } переопределить fun onTabReselected(tab: TabLayout.Tab?) { } }) viewModel.getFollowerUser(имя пользователя) viewModel.resultFavoriteAdd.observe(this) { updateFavoriteButtonColor (истина) } viewModel.resultFavoriteDelete.observe(this) { updateFavoriteButtonColor (ложь) } viewModel.isFavorite.observe(this) { isFavoriteValue -> updateFavoriteButtonColor (isFavoriteValue) } привязка.favoriteButton.setOnClickListener { val userId = элемент если (userId!= ноль) { viewModel.viewModelScope.launch { // Статус проверки: Любимый статус berdasarkan saat ini если (isFavorite) { // Jika sebelumnya adalah Favorite, база данных hapus dari viewModel.delete(userId) // Статус пользователя: «Избранное» и «Избранное» isFavorite = ложь updateFavoriteButtonColor (ложь) Log.d("DetailUserActivity", "Идентификатор пользователя с $userId в избранном.") } еще { // Если вы хотите выбрать избранное, выберите базу данных viewModel.insert(userId) // Статус пользователя: «Избранное» и «Избранное» isFavorite = правда updateFavoriteButtonColor (истина) Log.d("DetailUserActivity", "Идентификатор пользователя с $userId может быть избранным.") } } } } } частное развлечение updateFavoriteButtonColor(isFavorite: Boolean) { val colorRes = if (isFavorite) R.color.lavender else android.R.color.white val color = ContextCompat.getColor(this, colorRes) привязка.favoriteButton.setColorFilter(цвет) } переопределить удовольствие onOptionsItemSelected(item: MenuItem): Boolean { когда (item.itemId) { android.R.id.home -> { заканчивать() } } вернуть super.onOptionsItemSelected(пункт) } } // DetailViewModel.kt
импортировать android.app.Application импортировать android.util.Log импортировать androidx.lifecycle.LiveData импортировать androidx.lifecycle.MutableLiveData импортировать androidx.lifecycle.ViewModel импортировать androidx.lifecycle.ViewModelProvider импортировать androidx.lifecycle.viewModelScope импортировать com.example.projectone.data.db.FavDao импортировать com.example.projectone.data.model.ResponseUserGithub импортировать com.example.projectone.data.repo.FavoriteRepository импортировать com.example.projectone.data.service.ApiClient импортировать com.example.projectone.utils.ResultViewModel импортировать kotlinx.coroutines.Dispatchers импортировать kotlinx.coroutines.flow.catch импортировать kotlinx.coroutines.flow.flow импортировать kotlinx.coroutines.flow.onCompletion импортировать kotlinx.coroutines.flow.onStart импортировать kotlinx.coroutines.launch класс DetailUserViewModel (приложение: Приложение): ViewModel() { val resultDetailUser = MutableLiveData() val resultFollowersUser = MutableLiveData() val resultFollowingUser = MutableLiveData() val resultFavoriteAdd = MutableLiveData() val resultFavoriteDelete = MutableLiveData() val resultFavoriteCheck = MutableLiveData() val myGithubDetail = MutableLiveData() val myFollowerUser = MutableLiveData() val myFollowingUser = MutableLiveData() частный val mFavRepo: FavoriteRepository = FavoriteRepository(приложение) частный val _isFavorite = MutableLiveData() val isFavorite: LiveData = _isИзбранное приостановить забавную вставку (избранное: ResponseUserGithub.Item) { если (_isFavorite.value! = ноль) { если (_isFavorite.value == true) { mFavRepo.insert(избранное) resultFavoriteAdd.value = ResultViewModel.Success(true) } } _isFavorite.value = _isFavorite.value != true } приостановить веселье delete(fav: ResponseUserGithub.Item) { если (_isFavorite.value! = ноль) { если (_isFavorite.value == true) { mFavRepo.delete(избранное) resultFavoriteDelete.value = ResultViewModel.Success(true) } } _isFavorite.value = _isFavorite.value != true } весело findById(id: Int) { viewModelScope.launch { val isFavoriteValue = mFavRepo.findById(id)!= null _isFavorite.postValue(isFavoriteValue) } } весело getUser (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getDetailUserFromGithub(имя пользователя) излучать (ответ) } .onStart { resultDetailUser.value = ResultViewModel.Loading(true) } .по окончании { resultDetailUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() resultDetailUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value resultDetailUser.value = ResultViewModel.Success(it) } } } весело getFollowerUser (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getFollowerUserFromGithub(имя пользователя) излучать (ответ) } .onStart { resultFollowersUser.value = ResultViewModel.Loading(true) } .по окончании { resultFollowersUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() resultFollowersUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value resultFollowersUser.value = ResultViewModel.Success(it) } } } весело getFollowingUser (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getFollowingUserFromGithub(имя пользователя) излучать (ответ) } .onStart { resultFollowingUser.value = ResultViewModel.Loading(true) } .по окончании { resultFollowingUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() resultFollowingUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value resultFollowingUser.value = ResultViewModel.Success(it) } } } весело getMyGithub (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getMyGithub(имя пользователя) излучать (ответ) } .onStart { myGithubDetail.value = ResultViewModel.Loading(true) } .по окончании { myGithubDetail.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() myGithubDetail.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value myGithubDetail.value = ResultViewModel.Success(it) } } } весело getMyFollower(имя пользователя: Нить) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getMyFollowerGithub(имя пользователя) излучать (ответ) } .onStart { myFollowerUser.value = ResultViewModel.Loading(true) } .по окончании { myFollowerUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() myFollowerUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value myFollowerUser.value = ResultViewModel.Success(it) } } } весело getMyFollowing (имя пользователя: String) { viewModelScope.launch { поток { val ответ = ApiClient .githubService .getMyFollowingGithub(имя пользователя) излучать (ответ) } .onStart { myFollowingUser.value = ResultViewModel.Loading(true) } .по окончании { myFollowingUser.value = ResultViewModel.Loading(false) } .ловить { Log.e("Ошибка", it.message.toString()) it.printStackTrace() myFollowingUser.value = ResultViewModel.Error(it) } .собирать { // Тип данных yang dikirimkan ke resultSuccess.value myFollowingUser.value = ResultViewModel.Success(it) } } } } класс DetailViewModelFactory (частное приложение val: Приложение): ViewModelProvider.NewInstanceFactory() { переопределить fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(DetailUserViewModel::class.java)) { @Suppress("UNCHECKED_CAST") вернуть DetailUserViewModel (приложение) как T } throw IllegalAccessException("Unkwon ViewModel:" + modelClass.name) } }
// FavoriteRepository.kt
импортировать android.app.Application импортировать androidx.lifecycle.LiveData импортировать com.example.projectone.data.db.FavDao импортировать com.example.projectone.data.db.FavDb импортировать com.example.projectone.data.model.ResponseUserGithub импортировать kotlinx.coroutines.Dispatchers импортировать kotlinx.coroutines.withContext импортировать java.util.concurrent.ExecutorService импортировать java.util.concurrent.Executors класс FavoriteRepository (приложение: Приложение) { частный вал mFavDao: FavDao частный val executorService: ExecutorService = Executors.newFixedThreadPool(4) в этом { val db = FavDb.getDatabase (приложение) mFavDao = db.FavDao() } весело getAllFavUser(): LiveData = mFavDao.loadAll() забавная вставка (избранное: ResponseUserGithub.Item) { executorService.execute { mFavDao.insertFav(fav) } } весело удалить (избранное: ResponseUserGithub.Item) { executorService.execute { mFavDao.deleteFav(fav) } } весело findById(id: Int): LiveData { вернуть mFavDao.findByid(id) } } // FavDao.kt
import androidx.lifecycle.LiveData импортировать androidx.room.Dao импортировать androidx.room.Delete импортировать androidx.room.Insert импортировать androidx.room.OnConflictStrategy импортировать androidx.room.Query импортировать com.example.projectone.data.model.ResponseUserGithub @Дао интерфейс FavDao { @Insert(onConflict = OnConflictStrategy.REPLACE) забавная вставкаFav (пользователь: ResponseUserGithub.Item) @Query("ВЫБРАТЬ * ОТ пользователя") весело loadAll(): LiveData @Query("SELECT * FROM user WHERE id LIKE:id LIMIT 1") весело findByid(id: Int): LiveData @Удалить весело deleteFav (пользователь: ResponseUserGithub.Item) = } // FavDb.kt
импортировать android.content.Context импортировать android.provider.ContactsContract импортировать androidx.room.Database импортировать androidx.room.Room импортировать androidx.room.RoomDatabase импортировать com.example.projectone.data.model.ResponseUserGithub @Database(entities = [ResponseUserGithub.Item::class], версия = 1) абстрактный класс FavDb : RoomDatabase() { абстрактное развлечение FavDao(): FavDao сопутствующий объект { @Неустойчивый частная переменная INSTANCE: FavDb? = ноль @JvmStatic весело getDatabase (контекст: Контекст): FavDb { если (ЭКЗЕМПЛЯР == ноль) { синхронизировано (FavDb::class.java) { ЭКЗЕМПЛЯР = Room.databaseBuilder(context.applicationContext, FavDb::class.java, "fav_database") .строить() } } вернуть INSTANCE как FavDb } } } // ResponseUseGithub.kt
импортировать android.os.Parcelable импортировать androidx.room.ColumnInfo импортировать androidx.room.Entity импортировать androidx.room.PrimaryKey импортировать kotlinx.parcelize.Parcelize класс данных ResponseUserGithub( val incomplete_results: логическое значение, val элементы: List, значение total_count: Int ) { @Parcelize @Entity(tableName = "пользователь") класс данных Item( @ColumnInfo(name = "avatar_url") val avatar_url: Строка, @Основной ключ действительный идентификатор: Int, @ColumnInfo(имя = «логин») val логин: строка ) : Посылки } Может быть, вы сможете мне помочь и научить, как решить эту проблему
Мобильная версия