My app is crashing when using expo-image-picker on android device to take pictures with camera config set to 3:4 50MP. Sometimes the app simply restarts when I press OK after taking a picture.
It happened in one of my production apps so I thought it might have been something to do with my code, but I created a new expo app with only one button to open the camera and it also crashes as soon as a hit the OK button
It doesn't happen every time, but I couldn't find a pattern. The console shows no logs or messages either
I tried many different things: taking a picture with many colors and information, taking a picture of a black screen, white screen, etc still happens randomly but only when 50MP is set
My App.js and package.json are as follows
package.json
{
"name": "camera-test",
"version": "1.0.0",
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web"
},
"dependencies": {
"expo": "~49.0.10",
"expo-status-bar": "~1.6.0",
"react": "18.2.0",
"react-native": "0.72.4",
"expo-image-picker": "~14.3.2",
"expo-updates": "~0.18.12"
},
"devDependencies": {
"@babel/core": "^7.20.0"
},
"private": true
}
App.js
import * as ImagePicker from 'expo-image-picker';
import React, { useState } from 'react';
import { Button, View } from 'react-native';
export default function App() {
const [image, setImage] = useState(null);
const takePicture = async () => {
const c = await ImagePicker.requestCameraPermissionsAsync();
if (c.status === "granted") {
let result = await ImagePicker.launchCameraAsync({
aspect: [4, 3],
quality: 0.1,
});
}
};
return (
<View style={ { flex: 1, alignItems: 'center', justifyContent: 'center' } }>
<Button title="Take a picture " onPress={ takePicture } />
</View>
);
}
Android studio log
FATAL EXCEPTION: main Process: com.my.package, PID: 27880 java.lang.RuntimeException: Unable to resume activity {com.my.package/com.my.package.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=219778226, result=-1, data=null} to activity {com.my.package/com.my.package.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.react.ReactDelegate.onActivityResult(int, int, android.content.Intent, boolean)' on a null object reference
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5378)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:5444)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=219778226, result=-1, data=null} to activity {com.my.package/com.my.package.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.react.ReactDelegate.onActivityResult(int, int, android.content.Intent, boolean)' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:5994)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5348)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:5444)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.react.ReactDelegate.onActivityResult(int, int, android.content.Intent, boolean)' on a null object reference
at com.facebook.react.ReactActivityDelegate.onActivityResult(ReactActivityDelegate.java:133)
at com.facebook.react.ReactActivity.onActivityResult(ReactActivity.java:70)
at android.app.Activity.dispatchActivityResult(Activity.java:8951)
at android.app.ActivityThread.deliverResults(ActivityThread.java:5987)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5348)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:5444)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
2023-09-29 14:24:21.064 27880-27880 DevLauncher com.my.package E DevLauncher tries to handle uncaught exception.
java.lang.RuntimeException: Unable to resume activity {com.my.package/com.my.package.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=219778226, result=-1, data=null} to activity {com.my.package/com.my.package.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.react.ReactDelegate.onActivityResult(int, int, android.content.Intent, boolean)' on a null object reference
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5378)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:5444)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=219778226, result=-1, data=null} to activity {com.my.package/com.my.package.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.react.ReactDelegate.onActivityResult(int, int, android.content.Intent, boolean)' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:5994)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5348)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:5444)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.react.ReactDelegate.onActivityResult(int, int, android.content.Intent, boolean)' on a null object reference
at com.facebook.react.ReactActivityDelegate.onActivityResult(ReactActivityDelegate.java:133)
at com.facebook.react.ReactActivity.onActivityResult(ReactActivity.java:70)
at android.app.Activity.dispatchActivityResult(Activity.java:8951)
at android.app.ActivityThread.deliverResults(ActivityThread.java:5987)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5348)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:5444)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
There is an error in your code:
in the line
console.log(result);the variableresultis undefined. You have to move it up like this: