getPrimaryClip()返回ClipData {text / plain {NULL}}

请帮我解决这个问题。 这是我的代码

@Override public int onStartCommand(Intent intent, int flags, int startId) { clipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); clipboard.addPrimaryClipChangedListener(this); return START_STICKY; } @Override public void onPrimaryClipChanged() { Log.d("log",clipboard.getPrimaryClip()+""); ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0); String clipText = item.getText().toString(); Log.d("log",clipText); new SendClipBoardData().execute(postClipDataUrl,clipText); } 

有时我在ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);

错误: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference

clipboard.getPrimaryClip()返回ClipData { text/plain {NULL} } ,但是当我在我的笔记中粘贴相同的复制文本时,我可以看到文本,我无法检测到问题,有时甚至无法工作。

还有一个问题,当复制工作正常,我得到复制文本结果两三次,但我的事件正在工作一次,它可以是什么? 提前致谢。

Solutions Collecting From Web of "getPrimaryClip()返回ClipData {text / plain {NULL}}"

首先,不能保证剪贴板实际上任何数据 – 例如,当你第一次打开你的手机,你会期望剪贴板是空的。 其次,如果有数据,则需要检查格式是否正确。 尝试将图像粘贴到文本框中是没有意义的。

如果没有内容,则clipboard.getPrimaryClip()将返回null。 如果存在内容,但不是文本(例如,对URL的处理与文本不同),则item.getText()将返回null。 这会导致代码中出现exception,因为您正在对空引用调用toString()

Android开发人员文档显示了一个简短的示例,有点像这样:

 if (clipboard.hasPrimaryClip() && clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN)) { // Put your paste code here } 

但正如我所提到的那样,某些东西,比如URL,即使可以安全地转换为文本,也不会匹配这种模式。 要处理所有这些事情,你可以试试这个:

 if (clipboard.hasPrimaryClip()) { ClipData data = clipboard.getPrimaryClip(); if (data.getItemCount() > 0) { CharSequence text = data.getItemAt(0).coerceToText(this); if (text != null) { // Put your paste-handling code here } } }