java.lang.NullPointerException - Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference

26 views
Skip to first unread message

Tomáš Válek

unread,
Dec 26, 2025, 5:19:26 AM12/26/25
to Android CameraX Discussion Group
Hello,

I see in Crashlytics on device: 
Allwinner K2401/K2401P/k2401M
Android 10
camerax version: 1.6.0-alpha02

FloatingDecimal.readJavaFormatString
java.lang.NullPointerException - Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object referenc

 Fatal Exception: androidx.camera.core.InitializationException: java.lang.IllegalStateException: Failed to load metadata for CameraId-2!
       at androidx.camera.core.InitializationException.<init>(InitializationException.java:36)
       at androidx.camera.core.CameraX.lambda$initAndRetryRecursively$2(CameraX.java:518)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at androidx.camera.core.CameraExecutor$1.lambda$newThread$0(CameraExecutor.java:76)
       at java.lang.Thread.run(Thread.java:919) 


          Caused by java.lang.IllegalStateException: Failed to load metadata for CameraId-2!
       at androidx.camera.camera2.pipe.compat.Camera2MetadataCache.createCameraMetadata-0r8Bogc(Camera2MetadataCache.kt:209)
       at androidx.camera.camera2.pipe.compat.Camera2MetadataCache.access$createCameraMetadata-0r8Bogc(Camera2MetadataCache.kt:51)
       at androidx.camera.camera2.pipe.compat.Camera2MetadataCache.awaitCameraMetadata-EfqyGwQ(Camera2MetadataCache.kt:106)
       at androidx.camera.camera2.pipe.compat.Camera2Backend.awaitCameraMetadata-EfqyGwQ(Camera2Backend.java:80)
       at androidx.camera.camera2.pipe.internal.CameraDevicesImpl.awaitCameraMetadata-FpsL5FU(CameraDevicesImpl.kt:117)
       at androidx.camera.camera2.pipe.CameraDevices.awaitCameraMetadata-FpsL5FU$default(CameraDevices.java:83)
       at androidx.camera.camera2.internal.CameraCompatibilityFilter.isBackwardCompatible(CameraCompatibilityFilter.kt:71)
       at androidx.camera.camera2.internal.CameraCompatibilityFilter.getBackwardCompatibleCameraIds(CameraCompatibilityFilter.kt:47)
       at androidx.camera.camera2.adapter.CameraFactoryAdapter.calculateAvailableCameraIds(CameraFactoryAdapter.kt:146)
       at androidx.camera.camera2.adapter.CameraFactoryAdapter.onCameraIdsUpdated(CameraFactoryAdapter.kt:110)
       at androidx.camera.camera2.adapter.CameraFactoryAdapter.<init>(CameraFactoryAdapter.kt:102)
       at androidx.camera.camera2.adapter.CameraFactoryProvider.newInstance(CameraFactoryProvider.kt:71)
       at androidx.camera.core.CameraX.lambda$initAndRetryRecursively$2(CameraX.java:423)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at androidx.camera.core.CameraExecutor$1.lambda$newThread$0(CameraExecutor.java:76)
       at java.lang.Thread.run(Thread.java:919)
        


          Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
       at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838)
       at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
       at java.lang.Float.parseFloat(Float.java:451)
       at android.hardware.Camera$Parameters.getFocalLength(Camera.java:3816)
       at android.hardware.camera2.legacy.LegacyMetadataMapper.mapLens(LegacyMetadataMapper.java:713)
       at android.hardware.camera2.legacy.LegacyMetadataMapper.mapCharacteristicsFromParameters(LegacyMetadataMapper.java:207)
       at android.hardware.camera2.legacy.LegacyMetadataMapper.createCharacteristics(LegacyMetadataMapper.java:157)
       at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:312)
       at androidx.camera.camera2.pipe.compat.Camera2MetadataCache.createCameraMetadata-0r8Bogc(Camera2MetadataCache.kt:157)
       at androidx.camera.camera2.pipe.compat.Camera2MetadataCache.access$createCameraMetadata-0r8Bogc(Camera2MetadataCache.kt:51)
       at androidx.camera.camera2.pipe.compat.Camera2MetadataCache.awaitCameraMetadata-EfqyGwQ(Camera2MetadataCache.kt:106)
       at androidx.camera.camera2.pipe.compat.Camera2Backend.awaitCameraMetadata-EfqyGwQ(Camera2Backend.java:80)
       at androidx.camera.camera2.pipe.internal.CameraDevicesImpl.awaitCameraMetadata-FpsL5FU(CameraDevicesImpl.kt:117)
       at androidx.camera.camera2.pipe.CameraDevices.awaitCameraMetadata-FpsL5FU$default(CameraDevices.java:83)
       at androidx.camera.camera2.internal.CameraCompatibilityFilter.isBackwardCompatible(CameraCompatibilityFilter.kt:71)
       at androidx.camera.camera2.internal.CameraCompatibilityFilter.getBackwardCompatibleCameraIds(CameraCompatibilityFilter.kt:47)
       at androidx.camera.camera2.adapter.CameraFactoryAdapter.calculateAvailableCameraIds(CameraFactoryAdapter.kt:146)
       at androidx.camera.camera2.adapter.CameraFactoryAdapter.onCameraIdsUpdated(CameraFactoryAdapter.kt:110)
       at androidx.camera.camera2.adapter.CameraFactoryAdapter.<init>(CameraFactoryAdapter.kt:102)
       at androidx.camera.camera2.adapter.CameraFactoryProvider.newInstance(CameraFactoryProvider.kt:71)
       at androidx.camera.core.CameraX.lambda$initAndRetryRecursively$2(CameraX.java:423)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at androidx.camera.core.CameraExecutor$1.lambda$newThread$0(CameraExecutor.java:76)
       at java.lang.Thread.run(Thread.java:919)
       

Scott Nien

unread,
Dec 29, 2025, 2:38:17 AM12/29/25
to Tomáš Válek, Android CameraX Discussion Group
It looks like Allwinner doesn't handle camera2 apps well. 

The Allwinner firmware is returning null for the focal-length key in its Camera1 parameters. Float.parseFloat(null) eventually calls FloatingDecimal.readJavaFormatString(null), which attempts to call .trim() on the null string, resulting in the NullPointerException.

And unfortunately the crash is thrown in the camera framework layer when getting the CameraCharacteristics,  so there is nothing we can do about it. 

Maybe try other cameras?  Since camera id "2" causes the problem, other "0" and "1" might work. What's your CameraSelector configuration?



--
You received this message because you are subscribed to the Google Groups "Android CameraX Discussion Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to camerax-develop...@android.com.
To view this discussion visit https://groups.google.com/a/android.com/d/msgid/camerax-developers/ff1aee04-9ebf-4cc5-b197-35da78abd94bn%40android.com.
Reply all
Reply to author
Forward
0 new messages