效果很好,向我确切地显示了放入Android剪贴板的最后一个字符串是euswcnmst.
Log.w(“ clip”,剪贴板.getText().toString());
但是不赞成将getText用于剪贴板对象.
同时,如果我执行Log.w(“ clip”,剪贴板.getPrimaryClip().toString());,则得到的结果与显示的完全一样
ClipData {文本/纯文本“标签” {T:euswcnmst}}
我看到了我想要的,并且假设此格式始终用于字符串剪贴板项目,我可以使用String函数(find:和后续的}并执行子字符串)来提取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
如果剪贴板中的最后一个ITEM不是文本,则上面的代码将给出此错误:
java.lang.NullPointerException:尝试在空对象引用上调用接口方法’java.lang.String java.lang.CharSequence.toString()’
解决方法如下(我在下面添加了第三行):
if( clip == null
|| clip.getItemCount() == 0
|| clip.getItemCount() > 0 && clip.getItemAt(0).getText() == null
)
return; // ... whatever; just don't go to next line
解决方法:
请理解剪贴板不仅仅用于文本.复杂的构造可以以1到N个从getPrimaryClip()获取的ClipData对象中的ClipData.Item对象的形式放置在剪贴板上.
给定您的ClipData,调用getItemCount()确定项目数.对于您希望尝试使用的任何项目,请在ClipData上调用getItemAt()以获取相应的ClipData.Item.在该项目上,您可以调用getText()或coerceToText()尝试获取该项目的文本表示形式.