Я использую этот код для создания простых приложений для камер. Я могу сделать снимок. Тем не менее, кража приложения после съемки.Сбой приложения после снятия фото
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File imageFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "abc.jpg");
Uri store= Uri.fromFile(imageFile);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, store);
intent.putExtra(android.provider.MediaStore.EXTRA_VIDEO_QUALITY, 0);
startActivityForResult(intent, 0);
}
/*************************************** onActivityResult ** ***************************************/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
switch (resultCode) {
case Activity.RESULT_OK:
if (imageFile.exists())
{
Toast.makeText(this, "The file was saved at " + imageFile.getAbsolutePath(), Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "Error saving the file ", Toast.LENGTH_LONG).show();
}
break;
case Activity.RESULT_CANCELED:
break;
default:
break;
}
}
}
Ниже приводится логарифм.
java.lang.RuntimeException: Ошибка доставки результат ResultInfo {кто = NULL, запрос = 0, результат = -1, данных = NULL} в деятельности {com.camera/com.camera.MainActivity}: Java. lang.NullPointerException: Попытка вызвать виртуальный метод 'булевы java.io.File.exists()' на нулевой ссылки
объекта на android.app.ActivityThread.deliverResults (ActivityThread.java:3758)
на android.app.ActivityThread.handleSendResult (ActivityThread.java:3801)
at android.app.ActivityThread .access $ 1400 (ActivityThread.java:157)
в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1405) в android.os.Handler.dispatchMessage (Handler.java:102) на андроид .os.Looper.loop (Looper.java:148)
на android.app.ActivityThread.main (ActivityThread.java:5551) на java.lang.reflect.Method.invoke (Родной метод)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:620)
Вызвано: java.lang.NullPointerException: попытка вызвать виртуальный метод 'boolean java.io.File.exists()' на нулевой ссылки на объект
в com.camera.MainActivity.onActivityResult (MainActivity.java:43)
в android.app.Activity.dispatchActivityResult (Activity.java:6463)
на андроид. app.ActivityThread.deliverResults (ActivityThread.java:3754)
в android.app.ActivityThread.handleSendResult (ActivityThread.java:3801)
в android.app.ActivityThread.access $ 1400 (ActivityThread.java:157)
в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1405)
на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148)
на андроид. app.ActivityThread.main (ActivityThread.java:5551) at jav a.lang.reflect.Method.invoke (собственный метод)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:730)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:620)
Я не могу понять, почему это происходит. Кто-нибудь знает, как мне исправить ошибку? Благодаря!
Я только начал программировать на Android и не совсем уверен, как использовать функции, представленные в вашем решении, в моем приложении. Как написать код, который вы предложили? Благодаря! – user292965
В принципе, когда вы переходите от Activity, активность может быть уничтожена. И затем, когда вы переходите к нему, он воссоздается. Теперь, что происходит в вашем вопросе, заключается в том, что ваш объект «Файл» сбрасывается при восстановлении Activity. Таким образом, чтобы восстановить прежнее состояние, вы сохраняете идентифицированный файл (то есть путь к файлу) в 'Bundle', переопределяя' onSaveInstanceState() ', а затем создаете новый экземпляр' File' путем переопределения 'onRestoreInstanceState()'. Объект 'Bundle' имеет такие методы, как' putString', 'putInt' и т. Д. – Daksh