Java.lang.illegalargumentException: неизвестный контент URL: //com.android.globaldataservice.data.provider/globaldataappAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Java.lang.illegalargumentException: неизвестный контент URL: //com.android.globaldataservice.data.provider/globaldataapp

Сообщение Anonymous »

У меня есть автомобильное информационно -развлекательное приложение, которое поддерживает несколько профилей пользователей. Тем не менее, наше требование состоит в том, чтобы сохранить одни и те же данные во всех профилях пользователей, что делает их специфичными для транспортного средства. Выбранное значение должно быть сохранено в ContentProvider . Операции как сохранения, так и извлечение должны быть обработаны через ContentProvider . ContentProvider .
Пример сценарий:
userprofile1:
Пользователь выбирает опцию через радио -группу (например, значение = 3).
Это значение (3) должно быть сохранено в ContentProvider. < /P>
userprofile2: < /strong> < /p>
После перехода на другой профиль приложение должно получить ранее сохраненное значение из ContentProvider.
ожидаемое значение: 3 (то же самое, что и то, что было сохранено в UserProfile1).
Однако проблема, с которой я сталкиваюсь, заключается в том, что значение не устанавливается правильно, даже для userprofile1.

Код: Выделить всё

FATAL EXCEPTION: DefaultDispatcher-worker-3 (Ask Gemini)
Process: com.android.globaldataapp, PID: 6914
java.lang.IllegalArgumentException: Unknown URL content://com.android.globaldataservice.data.provider/globaldataapp
at android.content.ContentResolver.insert(ContentResolver.java:2189)
at android.content.ContentResolver.insert(ContentResolver.java:2155)
at com.android.globaldataservice.data.provider.AppDataProviderWrapper.setValue(AppDataProviderWrapper.kt:23)
at com.android.globaldataservice.data.repository.api.can.ApiRepository.saveData(ApiRepository.kt:691)
at com.android.globaldataservice.data.repository.api.can.ApiRepository$initializeBootUpValues$1.invokeSuspend(ApiRepository.kt:1791)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@2fbca59, Dispatchers.Default]

< /code>
Мой код будет похож на следующее: < /p>
Aappglobaldatacontentprovider.kt
class AppGlobalDataContentProvider : ContentProvider() {

private val sUriMatcher = UriMatcher(UriMatcher.NO_MATCH).apply {
addURI("com.android.globaldataservice.data.provider", "globaldataapp", 1)

}

companion object {
const val AUTHORITY =
"com.android.globaldataservice.data.provider"
val CONTENT_URI: Uri = Uri.parse("content://$AUTHORITY/globaldataapp")
}

private lateinit var sharedPreferences: SharedPreferences

override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int {
sharedPreferences.edit().remove(KEY_VALUE).apply()
context?.contentResolver?.notifyChange(uri, null)
return 1
}

override fun getType(uri: Uri): String? {
return null
}

override fun insert(uri: Uri, values: ContentValues?): Uri? {

when (sUriMatcher.match(uri)) {
1 -> {
val value = values?.getAsString(KEY_VALUE) ?: return null
sharedPreferences.edit().putString(KEY_VALUE, value).apply()
context?.contentResolver?.notifyChange(uri, null)
return uri
}
else ->  throw IllegalArgumentException("Unknown URI: $uri")
}
}

override fun onCreate(): Boolean {
val context = context?.createDeviceProtectedStorageContext()
?: throw IllegalStateException("Device-Protected storage context not available")
sharedPreferences = context.getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE)
return true
}

override fun query(
uri: Uri, projection: Array?, selection: String?,
selectionArgs: Array?, sortOrder: String?
): Cursor? {
val value = sharedPreferences.getString(KEY_VALUE, null) ?: return null
val cursor = MatrixCursor(arrayOf(KEY_VALUE))
cursor.addRow(arrayOf(value))
return cursor
}

override fun update(
uri: Uri, values: ContentValues?, selection: String?,
selectionArgs: Array?
): Int {
val value = values?.getAsString(KEY_VALUE) ?: return 0
sharedPreferences.edit().putString(KEY_VALUE, value).apply()
context?.contentResolver?.notifyChange(uri, null)
return 1
}

< /code>
Aappdataproviderwrapper.kt
@Singleton
class AppDataProviderWrapper @Inject constructor(@ApplicationContext private val context: Context) {

private val mContentUri: Uri = Uri.parse("content://$AUTHORITY/globaldataapp")

fun saveData(data: Int) {
val contentResolver = context.contentResolver
val contentValues = ContentValues().apply {
put(KEY_VALUE, data)
}
contentResolver.insert(mContentUri, contentValues)
}

fun getdata(): Int? {
val sharedPreferences = context.createDeviceProtectedStorageContext()
?.getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE)
return sharedPreferences?.getInt(KEY_VALUE, 0)
}
}
< /code>
android manifest.xml

            android:name=".data.provider.AppGlobalDataContentProvider"
android:authorities="com.android.globaldataservice.data.provider"
android:enabled="true"
android:exported="false"
android:grantUriPermissions="true"
android:singleUser="true" />
< /code>
apirepository.kt
appDataProviderWrapper.saveData(chargingType)
Итак, здесь, когда я пытался сохранить приложение данных, сбивается.

Подробнее здесь: https://stackoverflow.com/questions/794 ... globaldata
Ответить

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

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

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

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

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