Приложение для Android показывает черный экран после съемки, но работает при подключении к отладчику
Я борюсь с этой проблемой уже несколько дней и, похоже, не могу ее преодолеть. В основном у меня есть действие, которое имеет 3 вида изображений с кнопкой, которая запускает намерение камеры
Проблема в том, что пока я разрабатываю и запускаю отладчик, все работает отлично, но не тогда, когда я запускаю приложение в одиночку (без отладчика, только по телефону) после принятия предварительного просмотра изображения он просто показывает черный экран и ничего не делает после этого.
Все, что нужно для отображения изображения в представлениях изображений и сохранения в галерее, он делает все это в режиме отладки, но не тогда, когда мне нужно запустить приложение самостоятельно.
Я совершенно растерян с этой проблемой - пожалуйста, может ли кто-нибудь / кто-нибудь помочь мне.
Я думаю, что это может быть асинхронная проблема, но я очень новичок в android и не знаю, как это реализовать, в моей голове и через учебники, которые я читал / смотрел - это должен быть простой процесс, однако я не могу заставить его работать
Вот мой код на макете для этого действия:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".PhotoActivity"> <ImageView android:id="@+id/imgPhoto1" android:layout_width="236dp" android:layout_height="136dp" android:layout_marginTop="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/dds_logo" /> <ImageView android:id="@+id/imgPhoto2" android:layout_width="236dp" android:layout_height="136dp" android:layout_marginTop="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imgPhoto1" app:srcCompat="@drawable/dds_logo" /> <ImageView android:id="@+id/imgPhoto3" android:layout_width="236dp" android:layout_height="136dp" android:layout_marginTop="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imgPhoto2" app:srcCompat="@drawable/dds_logo" /> <Button android:id="@+id/btnTakePhoto" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="52dp" android:text="Take Photo" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imgPhoto3" app:layout_constraintVertical_bias="1.0" /> </android.support.constraint.ConstraintLayout>
Вот код для события onClick:
public void onClick(View v) { try { //respond to clicks if (v.getId() == R.id.btnTakePhoto) { captureImage(); } } catch(Exception ex) { ex.printStackTrace(); } }
Вот призыв к намерению:
private void captureImage() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(takePictureIntent, CAPTURE_IMAGE_REQUEST); }
Вот результат onActivtyResult:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { try{ if (!Debug.isDebuggerConnected()){ Debug.waitForDebugger(); Log.d("debug", "started"); // Insert a breakpoint at this line!! } if(numPhotos < 2) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); String savedImageURL = MediaStore.Images.Media.insertImage( getContentResolver(), imageBitmap, "Serial", "Refresh Verification photo" ); switch (numPhotos) { case 0: imgPhoto1.setImageBitmap(imageBitmap); break; case 1: imgPhoto2.setImageBitmap(imageBitmap); break; case 2: imgPhoto3.setImageBitmap(imageBitmap); break; } numPhotos++; } else { numPhotos = 0; Toast.makeText(PhotoActivity.this, "Max # of ohotos reached", Toast.LENGTH_LONG).show(); Intent i = new Intent(getApplicationContext(), MenuActivity.class); startActivity(i); finish(); } } catch(Exception ex) { ex.printStackTrace(); } }
Что я уже пробовал:
Я пытался только сохранить изображение и не отображать его в imageview, но все равно безуспешно. Он по-прежнему работает только при подключении к IDE в режиме отладки, а не при развертывании на устройстве.
David Crow
Итак, поскольку вы не можете установить точки останова и пошагово пройти через код, как насчет добавления ListView
управление макетом и отправка в него отладочного текста. Таким образом, вы можете знать значения переменных на этом пути и где происходит (не) выполнение кода?
SheldonShane
Спасибо за предложение Дэвид, однако даже listview не обновляется - это почти так же, как если бы приложение застряло и не обрабатывалось дальше. Я попытался создать новый поток в OnActivityResult - теперь я возвращаюсь к исходному экрану, но listview и imageviews все еще не обновляются
Pratishkumar Kushwaha
Вы можете отправить ссылку на приложение, я могу ее проверить.
SheldonShane
Привет, Пратишкумар, спасибо за предложение помощи - я очень открыт для обмена приложением с вами, как я могу связаться с вами?
Pratishkumar Kushwaha
Спасибо что запросили мой электронный идентификатор pratishbloge@gmail.com
вы можете отправить заявку по этому идентификатору электронной почты,я могу вам помочь.
SheldonShane
Привет Пратишкумар, больше не нужно делиться приложением, с вашим советом мне удалось решить эту проблему, пожалуйста, смотрите ниже для полного решения.
[no name]
1