После того, как я сделаю снимок и нажму кнопку checkmark
на интерфейсе камеры, я получу следующее исключение, которое приводит к падению приложения:
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter data
Это исключение возникает, только если я пытаюсь сделать снимок, а не когда я выбираю изображение из галереи.
В качестве исключения указывается, что параметр data
передается как null
, тогда как он должен быть non-null
и указывает на функцию файла kotlin. После изучения этой проблемы я узнал, что мне нужно передать ?
указанному параметру. (Источник: это и это ), но теперь я получаю
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Intent?
У меня нет опыта работы с Kotlin, поэтому я не уверен, что это было правильным решением в моем случае. Я хотел бы знать, как решить эту проблему, если кто-нибудь сталкивался с таким исключением.
Код ниже:
void _checkCameraPermission() {
PermissionHandler()
.checkPermissionStatus(PermissionGroup.camera)
.then((status) {
if (status == PermissionStatus.granted) {
getImage(ImageSource.camera);
} else {
_askCameraPermission();
}
});
}
void _askCameraPermission() {
PermissionHandler()
.requestPermissions([PermissionGroup.camera]).then(_onStatusRequested);
}
void _onStatusRequested(Map<PermissionGroup, PermissionStatus> value) {
final status = value[PermissionGroup.camera];
if (status == PermissionStatus.granted) {
getImage(ImageSource.camera);
}
}
Future uploadFile(imageFile) async {
// String fileName = DateTime.now().millisecondsSinceEpoch.toString();
String fileName = "images/" + new Uuid().v4() + ".jpg";
StorageReference reference = FirebaseStorage.instance.ref().child(fileName);
StorageUploadTask uploadTask = reference.putFile(imageFile);
await uploadTask.onComplete.then((value) {
reference.getDownloadURL().then((result) {
// result is the file URL
if (result != null) {
setState(() {
isLoading = false;
});
onSendMessage(result, 2);
}
});
});
}
Журнал исключений:
E/AndroidRuntime( 8402): FATAL EXCEPTION: main
E/AndroidRuntime( 8402): Process: com.quickcarl.qcflutterpro, PID: 8402
E/AndroidRuntime( 8402): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2343, result=-1, data=null} to activity {com.quickcarl.qcflutterpro/com.quickcarl.qcflutterpro.MainActivity}: **java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter data**
E/AndroidRuntime( 8402): at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)
E/AndroidRuntime( 8402): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
E/AndroidRuntime( 8402): at android.app.ActivityThread.-wrap16(ActivityThread.java)
E/AndroidRuntime( 8402): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
E/AndroidRuntime( 8402): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 8402): at android.os.Looper.loop(Looper.java:148)
E/AndroidRuntime( 8402): at android.app.ActivityThread.main(ActivityThread.java:5417)
E/AndroidRuntime( 8402): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 8402): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
E/AndroidRuntime( 8402): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
E/AndroidRuntime( 8402): Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter data
E/AndroidRuntime( 8402): at com.quickcarl.qcflutterpro.MainActivity.onActivityResult(MainActivity.kt)
E/AndroidRuntime( 8402): at android.app.Activity.dispatchActivityResult(Activity.java:6428)
E/AndroidRuntime( 8402): at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)
E/AndroidRuntime( 8402): ... 9 more
MainActivity код:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == VIDEO_SCREEN_REQUEST_CODE) {
if(resultCode == Activity.RESULT_OK) {
sendStringMessageToFlutter(data.getStringExtra("roomName"), "completeRoom")
}
}
}