Не удалось выполнить метод для Android: onClick при попытке отправить изображение по электронной почте - PullRequest
0 голосов
/ 02 мая 2019

Я пишу приложение, которое отправляет изображения по электронной почте, но почему-то я получаю эту ошибку.Может кто-нибудь подскажет, что я не так сделал?

Я получил все разрешения (камера, запись на внешнее хранилище) и тоже отправил действие.Я установил file_path xml и в манифесте провайдера также.Если я попробую только с миниатюрой, то это сработает, а с целым файлом - нет.Вот мой метод onClick, файл манифеста и файл path.xml

Метод onClick

public void onCameraButtonClick(View view) {
    if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
        Toast.makeText(this, "External storage nicht vefrügbar",Toast.LENGTH_LONG).show();
        return;
    }
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if(takePictureIntent.resolveActivity(getPackageManager()) != null) {
        File imageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File imageFile = new File(imageDir, "picture.jpg");
        Log.d(getClass().getSimpleName(), "Dateipfad = " + imageFile.getAbsolutePath());

        Uri imageUri = FileProvider.getUriForFile(this, "implizitintents.fileprovider", imageFile);

        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } else {
        Toast.makeText(this, "Keine passende Anwendung installiert", Toast.LENGTH_LONG).show();
    }

}

Файл манифеста

<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">
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="implizitintents.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths">
            </meta-data>
        </provider>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.SEND"/>

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

path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="my_images"
        path="Android/data/com.example.implizitintents/files/Pictures/picture.jpg"/>

</paths>

Файл макета:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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"
    android:fillViewport="true"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Implizite Intents!" />

        <EditText
            android:id="@+id/telNr"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="phone"
            android:textSize="10dp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="onButtonCallClick"
                android:src="@android:drawable/ic_menu_call" />

            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="onCameraButtonClick"
                android:src="@android:drawable/ic_menu_camera" />


        </LinearLayout>

        <ImageView
            android:id="@+id/imageView_thumbnail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Email  Adresse:" />

        <EditText
            android:id="@+id/emailAdresseText"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:inputType="textEmailAddress" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Subject:" />

        <EditText
            android:id="@+id/mailSubject"
            android:layout_width="match_parent"
            android:layout_height="45dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Inhalt: " />

        <EditText
            android:id="@+id/mailInhalt"
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:background="@drawable/mailborder"
            android:scrollbars="vertical"
            android:inputType="textMultiLine"
            android:gravity="top|left"
            android:paddingLeft="2dp"/>

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onMailButtonClick"
            android:src="@android:drawable/ic_dialog_email" />


    </LinearLayout>


</ScrollView>

и вот сообщение об ошибке:

2019-05-02 10:49:26.765 11166-11166/com.example.implizitintents E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.implizitintents, PID: 11166
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24701)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
     Caused by: java.lang.StringIndexOutOfBoundsException: length=87; index=88
        at java.lang.String.substring(String.java:1939)
        at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:748)
        at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:418)
        at com.example.implizitintents.MainActivity.onCameraButtonClick(MainActivity.java:66)
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541)

1 Ответ

0 голосов
/ 02 мая 2019

Я попробовал ваш код в моем примере и обнаружил фактическую проблему.

При попытке получить путь из файла `file-path.xml 'существует некоторая проблема с индексом проблемы.

Вот причина, по которой он бросает java.lang.StringIndexOutOfBoundsException.Вы можете решить свою проблему, просто добавив одну точку (.) в свой параметр пути в file_path.xml.Это необязательный параметр.

Пожалуйста, попробуйте следующий код:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="my_images"
        path="." />
</paths>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...