Я пытаюсь получить изображение от пользователя, а затем отправить его на наш сервер.Я предоставляю два варианта: выбрать из галереи или сделать новый снимок, используя камеру по умолчанию в своих телефонах.
Галерея работает правильно, я могу получить выбранное фото и без проблем отправить его.Но в режиме камеры камера открывается, делает снимок, сохраняет его на SD-карте с указанным местоположением, без проблем, но когда он возвращается обратно в мое приложение, я всегда получаю исключение NullPointerException, и мое приложение принудительно закрывается.Вот что я делаю:
private String tempFilePath = "";
...
public void addPhotoUsingCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
tempFilePath = getOutputMediaFilePath(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(tempFilePath)));
startActivityForResult(intent, CAMERA_ACTIVITY_CODE);
}
И затем я использую следующее, чтобы сделать фотографию:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
...
case CAMERA_ACTIVITY_CODE:
if (resultCode == Activity.RESULT_OK) {
picture = new File(tempFilePath);
}
break;
...
}
}
Я также попробовал
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ImageView image = (ImageView) findViewById(R.id.photoTaken);
image.setImageBitmap(thumbnail);
внутри case CAMERA_ACTIVITY_CODE:
но независимо от того, что я пытаюсь, я всегда получаю исключение NullPointerException в этой части кода.
Есть информация logcat, где строка 202 соответствует case CAMERA_ACTIVITY_CODE:
части.
01-31 23:40:13.154: ERROR/AndroidRuntime(8009): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=101, result=-1, data=null} to activity {com.ollaa.android/com.ollaa.android.share.ShareFinalScreen}: java.lang.NullPointerException
01-31 23:40:13.154: ERROR/AndroidRuntime(8009): Caused by: java.lang.NullPointerException
01-31 23:40:13.154: ERROR/AndroidRuntime(8009): at com.ollaa.android.share.ShareFinalScreen.onActivityResult(ShareFinalScreen.java:202)
Любая помощьс благодарностью.
Примечание: Я объявил все необходимые разрешения в AndroidManifest, относящиеся к камере и SD-карте.
РЕДАКТИРОВАТЬ: Я понял, чтоtempFilePath не продолжается до тех пор, пока активность камеры не вернется в мое приложение.Я поместил инициализацию для tempFilePath в свой метод onCreate
, но это время не устанавливается, когда я пытаюсь получить его из внешней функции, отличной от onActivityResult
.Мне кажется, что я вообще не знаю Java, когда мы меняем переменную класса внутри функции, измененное значение должно быть видно из всех функций этого класса, верно ??