gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:53 24 4
gpt4 key购买 nike

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

@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com