Android clipboard.getText() 已弃用;那么如何获取其中的文本项?
Android clipboard.getText() is deprecated; how then to get the text item that's in it?
这很好用,向我准确显示了放入 Android 剪贴板的最后一个字符串是什么,恰好是 euswcnmst
.
Log.w("clip", clipboard.getText().toString());
但是 getText
已弃用 clipboard
个对象。
与此同时,如果我这样做 Log.w("clip", clipboard.getPrimaryClip().toString());
,我就会得到这个,如图所示
ClipData { text/plain "label" {T:euswcnmst} }
我明白了,假设这种格式总是用于字符串剪贴板项目,我可以使用 String
函数(找到 :
和随后的 }
并执行 substring
) 来提取 euswcnmst
,但这是一个技巧。
我应该怎么做?
编辑
根据 Commonsware 的回答,这里是我应该做的事情:
ClipData clip = clipboard.getPrimaryClip();
if(clip == null || clip.getItemCount() == 0)
return; // ... whatever; just don't go to next line
String t = clip.getItemAt(0).getText().toString();
编辑 2
如果剪贴板中的最后一个项目不是文本,上面的代码会给出这个错误:
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference
修复方法如下(我在下面添加了第三行):
if( clip == null
|| clip.getItemCount() == 0
|| clip.getItemCount() > 0 && clip.getItemAt(0).getText() == null
)
return; // ... whatever; just don't go to next line
请理解剪贴板并非纯粹用于文本。复杂的构造可以放在剪贴板上,形式为 ClipData
对象内的 1 到 N ClipData.Item
个对象,您从 getPrimaryClip()
.
获得
根据您的 ClipData
,调用 getItemCount()
来确定项目数。对于您想尝试使用的任何项目,请在 ClipData
上调用 getItemAt()
以获取相应的 ClipData.Item
。在该项目上,您可以调用 getText()
或 coerceToText()
来尝试获取该项目的文本表示。
使用下面的代码
String copyString = clipboard.getPrimaryClip().getItemAt(0).getText()
这很好用,向我准确显示了放入 Android 剪贴板的最后一个字符串是什么,恰好是 euswcnmst
.
Log.w("clip", clipboard.getText().toString());
但是 getText
已弃用 clipboard
个对象。
与此同时,如果我这样做 Log.w("clip", clipboard.getPrimaryClip().toString());
,我就会得到这个,如图所示
ClipData { text/plain "label" {T:euswcnmst} }
我明白了,假设这种格式总是用于字符串剪贴板项目,我可以使用 String
函数(找到 :
和随后的 }
并执行 substring
) 来提取 euswcnmst
,但这是一个技巧。
我应该怎么做?
编辑
根据 Commonsware 的回答,这里是我应该做的事情:
ClipData clip = clipboard.getPrimaryClip();
if(clip == null || clip.getItemCount() == 0)
return; // ... whatever; just don't go to next line
String t = clip.getItemAt(0).getText().toString();
编辑 2
如果剪贴板中的最后一个项目不是文本,上面的代码会给出这个错误:
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference
修复方法如下(我在下面添加了第三行):
if( clip == null
|| clip.getItemCount() == 0
|| clip.getItemCount() > 0 && clip.getItemAt(0).getText() == null
)
return; // ... whatever; just don't go to next line
请理解剪贴板并非纯粹用于文本。复杂的构造可以放在剪贴板上,形式为 ClipData
对象内的 1 到 N ClipData.Item
个对象,您从 getPrimaryClip()
.
根据您的 ClipData
,调用 getItemCount()
来确定项目数。对于您想尝试使用的任何项目,请在 ClipData
上调用 getItemAt()
以获取相应的 ClipData.Item
。在该项目上,您可以调用 getText()
或 coerceToText()
来尝试获取该项目的文本表示。
使用下面的代码
String copyString = clipboard.getPrimaryClip().getItemAt(0).getText()