ClassCastException: приведение строки к списку массивов вызывает исключение

#android #classcastexception

#Android #classcastexception

Вопрос:

У меня есть следующая функция в MainActivity:

 private void exportToMail(String[] tos)
{
    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(Intent.EXTRA_EMAIL, tos);
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "gradius data ver: "   getAppVersion());
    emailIntent.putExtra(Intent.EXTRA_TEXT, getFormattedData());

    ArrayList<Uri> uris = new ArrayList<>();
    for (File fileIn : new File(getExportFolder(this)).listFiles())
    {
        uris.add(FileProvider.getUriForFile(MainActivity.this, getString(R.string.file_provider_authority),fileIn));
    }

    if(!uris.isEmpty())
        emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

    //This is where the error occurs according to the Logcat.
    startActivity(Intent.createChooser(emailIntent, "Pick an Email provider")); 
}
  

Когда я пытаюсь запустить этот код, у меня появляется прикрепленное сообщение в Logcat.

 2019-04-02 14:05:58.566 10783-10783/com.crowdx.gradius.testapp W/Bundle: Key android.intent.extra.TEXT expected ArrayList<CharSequence> but value was a java.lang.String.  The default value <null> was returned.
2019-04-02 14:05:58.567 10783-10783/com.crowdx.gradius.testapp W/Bundle: Attempt to cast generated internal exception:
    java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList
        at android.os.BaseBundle.getCharSequenceArrayList(BaseBundle.java:1302)
        at android.os.Bundle.getCharSequenceArrayList(Bundle.java:1076)
        at android.content.Intent.getCharSequenceArrayListExtra(Intent.java:8227)
        at android.content.Intent.migrateExtraStreamToClipData(Intent.java:11093)
        at android.content.Intent.migrateExtraStreamToClipData(Intent.java:11056)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1666)
        at android.app.Activity.startActivityForResult(Activity.java:4688)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
        at android.app.Activity.startActivityForResult(Activity.java:4646)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
        at android.app.Activity.startActivity(Activity.java:5007)
        at android.app.Activity.startActivity(Activity.java:4975)
        at com.crowdx.gradius_sdk.testApp.ui.activities.MainActivity.exportToMail(MainActivity.java:523)
        at com.crowdx.gradius_sdk.testApp.ui.activities.MainActivity.selectedStrings(MainActivity.java:485)
        at com.crowdx.gradius_sdk.testApp.ui.components.MultiSelectionSpinner$1.onClick(MultiSelectionSpinner.java:74)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:184)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:6981)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
  

Я не понимаю, что не так с этим кодом, потому что putExtra() в качестве параметра может быть String array, так что здесь не так?

Редактировать:

// Именно здесь возникает ошибка в соответствии с Logcat.

  startActivity(Intent.createChooser(emailIntent, "Pick an Email provider")); 
  

Комментарии:

1. Можете ли вы указать, какая строка метода выдает это? Похоже на EXTRA_TEXT один, и в этом случае, пожалуйста, добавьте код для getFormattedData метода.

2. Да, я действительно поместил комментарий над ним во фрагменте кода, но я отредактирую свой вопрос, чтобы он был намного понятнее

3. Ах, я пропустил этот комментарий. Мой плохой

4. У меня такая же проблема, какое-либо решение?

5. У меня такая же проблема. Он определенно жалуется на то, что параметр EXTRA_TEXT не является ‘ArrayList<CharSequence>’. Я передаю как строку, и она работает нормально, но генерирует эту ошибку. Если вместо этого я передаю ArrayList<CharSequence> в EXTRA_TEXT, текст не отображается. Я думаю, мы просто живем с ошибкой.

Ответ №1:

Если не важно отправлять ваш текст и данные вместе, и если вы хотите поместить что-то во вложение, вы можете удалить в этой строке:emailIntent.putExtra(намерение.EXTRA_TEXT, getFormattedData()); Я не нашел метода для разных типов данных, текста. Это старый вопрос, но, возможно, это кому-то поможет

у меня это сработало