Android – IllegalStateException: cursor.getString (idx) no debe ser nulo

He seguido todas las cosas aquí, pero ¿Por qué cursor.getString(idx) dice que no debe ser null ? Suministro todos los parameters necesarios …

aquí está mi getfilepath :

 fun getFilePathFromUri(context: Context, imageURI: Uri): String? { var cursor : Cursor? = null var result: String try { val projection = arrayOf(MediaStore.Images.Media.DATA) cursor = context.contentResolver.query(imageURI, projection, null, null, null) if (cursor == null) { result = imageURI.path } else { Log.d(AppConstants.TAG, "Path_img = " + imageURI) Log.d(AppConstants.TAG, "Path_pth = " + imageURI.path) Log.d(AppConstants.TAG, "Path_cursor = " + cursor) cursor.moveToFirst() val idx = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA) result = cursor.getString(idx) } return result } finally { cursor!!.close() } } 

aquí está el error:

 12-04 14:34:44.971 2008-2008/com.xxx.project k E/AndroidRuntime: FATAL EXCEPTION: main Process: com.xxx.proj, PID: 2008 java.lang.IllegalStateException: cursor.getString(idx) must not be null at com.xxx.proj.utils.ImageUtils$Companion.getFilePathFromUri(ImageUtils.kt:78) at com.xxx.proj.api.Layer.createNewLayer(Layer.java:84) at com.xxx.proj.dialog.EventMapCreationDialog.registerNewMap(EventMapCreationDialog.kt:266) at com.xxx.proj.dialog.EventMapCreationDialog.onClick(EventMapCreationDialog.kt:82) at android.view.View.performClick(View.java:5204) at android.view.View$PerformClick.run(View.java:21153) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Según la documentation de cursor.getString ():

Devuelve el valor de la columna solicitada como una cadena.

El resultado y si este método arroja una exception cuando el valor de la columna es nulo o el tipo de columna no es un tipo de cadena está definido por la implementación.

IllegalStateException una IllegalStateException . Aunque es amplio, esto generalmente significa que se ha invocado un método en un momento incorrecto / ilegal. Es decir, la aplicación o el entorno no está en el estado adecuado para este método. Esto podría significar que el parámetro, cursor o valor es nulo.

Verifique el tipo de devolución de la columna antes de llamar al método:

 if (cursor.getType(idx) == FIELD_TYPE_STRING) { result = cursor.getString(idx); } 
  • ¿Podemos usar infix methods generics en Kotlin?
  • Kotlin no puede usar 'esto' en init
  • ¿Cómo puedo declarar un parámetro de function que puede ser una cadena o una function en Kotlin?
  • ¿Funciones de extensión Kotlin contra funciones miembro?
  • Cómo recuperar datos de una tabla personalizada en Corda
  • Error de Android Studio 3.0: el server devolvió el código de respuesta HTTP: 403 para la URL: https://services.gradle.org/distributions/gradle-4.1-all.zip
  • Parsing xml kotlin android
  • AAR / JAR no se genera con Android Studio 3.0 Canary 7
  • Gradle Project Sync falló, Kotlin
  • ¿Cómo pasar el tipo anulable a la function que toma un tipo no nulo?
  • No se ha podido cargar el error de class 'kotlin.collections.CollectionsKT' al intentar sincronizar gradle