Как успешно сохранить данные в другом столбце базы данных в PostgreSQL с помощью JetPack Compose?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как успешно сохранить данные в другом столбце базы данных в PostgreSQL с помощью JetPack Compose?

Сообщение Anonymous »

Я выполнил каждый шаг по добавлению нового столбца базы данных в postgresql, однако, когда я нажимаю кнопку, чтобы сохранить информацию в базе данных postgresql после заполнения выделенного текстового поля, ничего не происходит. Информация не сохраняется. Я пытаюсь понять, почему, но на данный момент безуспешно. Есть идеи, почему это не работает? Как обычно, признательны за отзывы.
Внешний интерфейс: Jetpack Compose
Внешний интерфейс: приложение Flask
База данных: Postgresql
ОБС! Если потребуется какая-либо дополнительная информация, дайте мне знать, и я обновлю код!
RelationshipModel:
@Keep
@Entity(tableName = "UserRelationDB", indices = [Index(value = ["id"], unique = true)])
@Serializable
data class UserRelationshipModel(
@PrimaryKey
val id: Int? = null,
val relationship: String? = null,
)

Модель отношений с пользователем:
@Serializable
class UserRelationModel (
val users:List

)

Interface UserService (Содержит все методы публикации и получения пользовательских данных из всех трех других столбцов базы данных. Это связано с AppModule!):
@POST("relationshipData")
suspend fun postUserRelationshipData(@Body data: UserRelationshipModel): Response


class:
class UserApi @Inject constructor(
private val userService: UserService,
private val webSocketManager: WebSocketManager
) {
suspend fun postRelationshipsData(data: UserRelationshipModel): Response {
return userService.postRelationshipsData(data)
}
}

пользовательский репо:
class Repo @Inject constructor(private val userApi: UserApi) {

suspend fun postRelationshipsData(data: UserRelationshipModel): Response {
return userApi.postRelationshipsData(data)
}
}

Интерфейс Дао:
@Dao
interface UserRelationshipDataModelDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertUserRelationship(user: UserRelationshipModel)

@Update
suspend fun updateUserRelationship(user: UserRelationshipModel)

@Query("SELECT * FROM UserRelationDB WHERE id = :userId")
suspend fun getUserById(userId: Int): UserRelationshipModel?

@Query("SELECT * FROM UserRelationDB LIMIT 1")
suspend fun getLoggedInUser(): UserRelationshipModel?

@Query("DELETE FROM UserRelationDB")
suspend fun deleteAllUsers()
}

userrelationshiplayoutscreen:
var relationship by remember { mutableStateOf("") }
......

item {
UserInfo(
initialUserData = relationship,
label = "Relationship",
onValueChange = { relationship = it }
)
}
....

Button OnClick:

onClick = {
scope.launch {
val userData = UserRelationshipModel(
relationships = relationship
)

userCredentialsRelationshipViewModel.postUserRelationshipData(context, userData) { result ->

when (result) {
NetworkResult.Loading -> {
showLoadingAnim = true
}

is NetworkResult.Error -> {
showLoadingAnim = false
}

is NetworkResult.Success -> {

showLoadingAnim = false
userRelationshipHiltViewModel.insertUserRelationship(userData)

// Navigate the user forward
navController.navigate("${NavigationItem.UserDetails.route}/${selectedGender}")
}
}

}
Log.d("relationship model clicked", userData.toString())
}
},


usercredentialsrelationshipviewmodel:
@HiltViewModel
class UserCredentialsRelationshipViewModel@Inject constructor(private val repo: Repo) : ViewModel() {

fun postUserRelationshipData(
context: Context, userData: UserRelationshipModel,
handleResult: (NetworkResult) -> Unit
) {
viewModelScope.launch {
try {
handleResult(NetworkResult.Loading)

val result = repo.postRelationshipsData(data = userData)

if (result.isSuccessful) {
handleResult(NetworkResult.Success("User relationship added successfully"))
Toast.makeText(context, "User relationship added successfully", Toast.LENGTH_SHORT)
.show()

} else {

handleResult(NetworkResult.Error("Something went wrong"))

}

} catch (e: Exception) {

handleResult(NetworkResult.Error("Something went wrong"))

Toast.makeText(context, e.message.toString(), Toast.LENGTH_LONG).show()

Log.d("postDataError", e.message.toString())

e.printStackTrace()

}
}
}
}

userrelationshiletviewmodel:
@HiltViewModel
class UserRelationshipHiltViewModel @Inject constructor(private val userRelationshipDataModelDao: UserRelationshipDataModelDao)

: ViewModel() {
private val _loggedInUser = MutableLiveData()
val loggedInUser: LiveData get() = _loggedInUser

fun insertUserRelationship(user: UserRelationshipModel) {
viewModelScope.launch {
try {
userRelationshipDataModelDao.insertUserRelationship(user)
} catch (e: Exception) {
e.printStackTrace()
}
}
}

fun deleteUser() {
viewModelScope.launch {
try {
userRelationshipDataModelDao.deleteAllUsers()
} catch (e: Exception) {
e.printStackTrace()
}
}
}

// Update an existing user
fun updateUser(user: UserRelationshipModel) {
viewModelScope.launch {
_loggedInUser.postValue(user)
userRelationshipDataModelDao.updateUserRelationship(user)
}
}

// Get a user by their ID
fun getUserById(userId: Int) {
viewModelScope.launch {
val user = userRelationshipDataModelDao.getUserById(userId)
}
}

fun getLoggedInUser() {
viewModelScope.launch {
try {
val user = userRelationshipDataModelDao.getLoggedInUser()
_loggedInUser.postValue(user)
} catch (e: Exception) {
_loggedInUser.postValue(null) // or handle the exception as needed
}
}
}

}

База данных UserInfo:
@Database(entities = [UserDataModel::class,UserMatchEntity::class, UserRelationshipModel::class,],version =6,exportSchema = true)
@TypeConverters(Converters::class)
abstract class UserInfoDatabase:RoomDatabase() {
abstract fun userDataModelDao():UserDataModelDao
abstract fun userMatch():UserMatchDao

abstract fun userRelationshipDataModelDao(): UserRelationshipDataModelDao

}


AppModule:
@Singleton
@Provides
fun provideRelationshipDao(userInfoDatabase: UserInfoDatabase): UserRelationshipDataModelDao{
return userInfoDatabase.userRelationshipDataModelDao()
}



Подробнее здесь: https://stackoverflow.com/questions/793 ... -using-jet
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»