ClipData иногда равен нулю в Android

Я столкнулся со странной "проблемой" или, возможно, "ошибкой" в Android. Я использую ClipboardManager для своего приложения довольно часто. Но если я использую его в течение нескольких секунд дважды, я всегда получаю исключение NullPointerException. Я думаю, что буфер обмена еще не заполнен, когда я к нему обращаюсь, но это, кажется, очень глупая идея... Кто-нибудь сталкивался с такой же проблемой, или я что-то делаю не так? Я получаю сообщение об ошибке в строке String text = item.getText(). ToString();

Сообщение об ошибке:

java.lang.NullPointerException: попытка вызвать метод интерфейса 'java.lang.String java.lang.CharSequence.toString()' для нулевой ссылки на объект в at.co.netconsulting.leotranslater.SettingsActivity$1$3.onPrimaryClipChanged

Спасибо за каждую подсказку или помощь заранее!

Вот часть моего кода:

final ClipboardManager myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
                    myClipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
                        @Override
                        public void onPrimaryClipChanged() {
                            ClipData cp = myClipboard.getPrimaryClip();
                            if(cp.getItemCount()>0) {
                                ClipData.Item item = cp.getItemAt(0);
                                if (item == null) {
                                    Toast.makeText(getApplicationContext(), "Item is null", Toast.LENGTH_LONG).show();
                                } else {
                                    if(item!=null) {
                                        String text = item.getText().toString();
                                        Toast.makeText(getApplicationContext(), "Sie suchen nach dem Wort: " + text, Toast.LENGTH_LONG).show();
                                        Intent msgIntent = new Intent(SettingsActivity.this, ServiceTranslator.class);
                                        msgIntent.putExtra("ClipBoardData", text);
                                        startService(msgIntent);
                                    }
                                }
                            }
                        }
                    });
                }

1 ответ

Я думаю, что это может быть решением.

String text = item.coerceToText(getBaseContext()).toString();

Что касается документации, то сказано, что если вам нужно только текстовое представление обрезанных данных, вы можете * использовать удобный метод {@link Item#coerceToText Item.coerceToText}.

Я надеюсь, что это решит мою проблему!

Другие вопросы по тегам