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}.
Я надеюсь, что это решит мою проблему!