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

标签 java android clipboardmanager

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

@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:尝试在空对象引用上调用接口(interface)方法“java.lang.String java.lang.CharSequence.toString()”

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

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

最佳答案

首先,无法保证剪贴板中确实任何数据——例如,当您第一次打开手机时,您会认为剪贴板是空的。其次,如果有数据,你需要检查它的格式是否正确。尝试将图像粘贴到文本框中没有任何意义。

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

Android developer docs显示一个简短的示例,有点像这样:

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
        }
    }
}

关于java - getPrimaryClip() 返回 ClipData { text/plain {NULL} },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31610165/

相关文章:

java - 编译并执行主类,引用jar中的类文件

Android系统日志文件位置

android - ClipBoardManager.OnPrimaryClipChangedListener 不工作

java - getSystemService() 不适用于适配器类

android - Android中ClipData中的 "label"参数到底是什么?

java - RegEx 仅匹配不以单引号开头或结尾的数字

java - Spring Boot 管理页面

java - 如何使用 Apache POI 读取具有日期的 Excel 单元格?

java - TextView中的长文本使布局得到 'Out of Scope'

android-layout - Button + Spinner onItemSelectedListener 不起作用