Закрывается приложение, когда я использую камеру фотографий в fragment

Я пробую делать мой первый app для android (достаточно начинающий) и у меня есть проблема и уже я не вижу свет ни из-за какого сайта:

Я делаю приложение, в котором я хочу захватить изображение с камерой и поместить ее в один ImageView в одном Fragment. В методе. fragment загружается правильно, камера открывается, но приняв изображение, закрывается приложение.

В методе onCreate главного activity я называю другой activity (также с OnActivityResult) что входит в систему.

Код, чтобы открывать камеру в fragment:

 img = (ImageView)viewPrincipal.findViewById(R.id.imgView);
     Button btn_hacerfoto = (Button) viewPrincipal.findViewById(R.id.botonCamara);
    //Añadimos el Listener Boton
    btn_hacerfoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           Intent intent =  new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            int code = HACER_FOTO;
            nombreFoto = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/test.jpg";
                intent.putExtra("ventana","foto");
                Uri output = Uri.fromFile(new File(nombreFoto));
                intent.putExtra(MediaStore.ACTION_IMAGE_CAPTURE, output);
                startActivityForResult(intent, code);
        }
    });

В fragment метод OnActivityResult:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
//    protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    /**
     * Se revisa si la imagen viene de la c‡mara (TAKE_PICTURE) 
     */

    if (requestCode == HACER_FOTO) {
            /**
             * A partir del nombre del archivo ya definido lo buscamos y creamos el bitmap
             * para el ImageView
             */
            ImageView iv = (ImageView)viewPrincipal.findViewById(R.id.imgView);
            iv.setImageBitmap(BitmapFactory.decodeFile(nombreFoto));
            /**
             * Para guardar la imagen en la galer’a, utilizamos una conexi—n a un MediaScanner
             */
            new MediaScannerConnection.MediaScannerConnectionClient() {
                private MediaScannerConnection msc = null; {
                    msc = new MediaScannerConnection(viewPrincipal.getContext(), this);
                    msc.connect();
                }
                public void onMediaScannerConnected() {
                    msc.scanFile(nombreFoto, null);
                }
                public void onScanCompleted(String path, Uri uri) {
                    msc.disconnect();
                }
            };
        } 
    }

В главном Activity, так функционирует правильно приложение, без login:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
}

Но если я помещаю что-то в метод, как это, чтобы знать, откуда приходит вызов, автоматически закрывается приложение, когда ты закрываешь окно камеры фотографий:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

            //aqui falla la aplicacion
    String ventana= data.getStringExtra("ventana");
    if(!ventana.equals(null)) {
        if (ventana.equals("login")
                    {
                    //blablalba
                    }
                }
            }

И ошибка, которую я получаю:

ФАТАЛЬНЫЙ EXCEPTION: main Process: com.j2app.pruebafragments, PID: 27116 java.lang. RuntimeException: Failure delivering result ResultInfo { who=null, request=65546, result =-1, data=Intent { он act=inline-восходит (-дополнительные) } } to activity { com.j2app.pruebafragments/com.j2app.pruebafragments. MainActivity }: java.lang. NullPointerException: Виртуальный Attempt to invoke method 'boolean java.lang. String.equals (java.lang. Object)' on в null object reference at android.app. ActivityThread.deliverResults (ActivityThread.java:3699) at android.app. ActivityThread.handleSendResult (ActivityThread.java:3742) at android.app. ActivityThread.-wrap16 (ActivityThread.java) at android.app. ActivityThread $H.handleMessage (ActivityThread.java:1393) at android.os. Handler.dispatchMessage (Handler.java:102) at android.os. Looper.loop (Looper.java:148) at android.app. ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect. Method.invoke (Нативе Метод) at com.android.internal.os. ZygoteInit $MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os. ZygoteInit.main (ZygoteInit.java:616) Caused by: java.lang. NullPointerException: Виртуальный Attempt to invoke method 'boolean java.lang. String.equals (java.lang. Object)' on в null object reference at com.j2app.pruebafragments. MainActivity.onActivityResult (MainActivity.java:93) at android.app. Activity.dispatchActivityResult (Activity.java:6428) at android.app. ActivityThread.deliverResults (ActivityThread.java:3695) at android.app. ActivityThread.handleSendResult (ActivityThread.java:3742) at android.app. ActivityThread.-wrap16 (ActivityThread.java) at android.app. ActivityThread $H.handleMessage (ActivityThread.java:1393) at android.os. Handler.dispatchMessage (Handler.java:102) at android.os. Looper.loop (Looper.java:148) at android.app. ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect. Method.invoke (Нативе Метод) at com.android.internal.os. ZygoteInit $MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os. ZygoteInit.main (ZygoteInit.java:616)

К кому мне обратиться?

Файл manifest он:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.j2app.pruebafragments">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Modal1Activity"></activity>
</application>

</manifest>
2
задан 29.05.2017, 15:19
2 ответа

Твоя программа ищет способа очень extraña существование "окна":

String ventana = data.getStringExtra("ventana");
if (!ventana.equals(null)) {
  /* ... */

В ningún момент ты подтверждаешь, существует ли цепь "окно", из-за которого этот так называемый недостаток возвращая null, но comprobaci¦n, который снопы подтверждает контент цепи (которой null) с цепью, что estÃ: поселенная в null (немного запутанных).

Deber¦-Схвати использовать Intent.hasExtra():

if (data.hasExtra("ventana")) {
  String ventana = data.getStringExtra("ventana");
  /* ... */
}

Этот comprobaci¦n уже не ты producirÃ: ошибка, которую ты переносишь.

1
ответ дан 24.11.2019, 08:46
  • 1
    Спасибо за ответ. Я это протестировал и оно не функционирует, có говорит cá толпа функционирует правильно, как эта в aplicació n без fragments, если я это использую в главном activity. – Juanjo 29.05.2017, 13:44
  • 2
    Извинение, я ушел из-за другого места. Подтверди мой edició n, чтобы видеть, решает ли он твою проблему. – OscarGarcia 29.05.2017, 15:14
  • 3
    Большое спасибо, сейчас функционируй, я провожу почти неделю, потерянную if – Juanjo 29.05.2017, 15:30
  • 4
    Удовольствие, в mí со мной прошли вещи по стилю, как который он перемещал информацию в " A" и потом leí в " B" así что как только я увидел có я говорю я encendió bombillita ;) не забывай пометить ответ как правильная, если ты solucionó проблема. – OscarGarcia 29.05.2017, 15:35

Спасибо за interés.

Файл manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.j2app.pruebafragments">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Modal1Activity"></activity>
</application>

</manifest>

, Но не функционировал правильно cÃ: толпа (писать в SD) до тех пор, пока не añadà - método:

public void compruebaPermisoSD(Activity activity ) {
             // Check if we have write permission
             int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

             if (permission != PackageManager.PERMISSION_GRANTED) {
                 // We don't have permission so prompt the user
                 ActivityCompat.requestPermissions(
                         activity,
                         PERMISSIONS_STORAGE,
                         REQUEST_EXTERNAL_STORAGE
                 );

             }
         }

Спасибо

0
ответ дан 24.11.2019, 08:46
  • 1
    Пожалуйста, издай твой вопрос, чтобы добавлять эту informació n, не añ adas как ответ. Спасибо. – OscarGarcia 29.05.2017, 14:55