这很好用,向我展示了放入 Android 剪贴板的最后一个字符串是什么,恰好是euswcnmst.
Log.w("clip", clipboard.getText().toString());
但getText不推荐用于clipboard对象。
同时,如果我这样做 Log.w("clip", clipboard.getPrimaryClip().toString());,我会得到这个,完全如图所示
ClipData { text/plain "label" {T:euswcnmst} }
我知道我想要什么,并且假设这种格式总是用于字符串剪贴板项目,我可以使用String函数( find:和后续}和 do 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();
Run Code Online (Sandbox Code Playgroud)
编辑 2
如果剪贴板中的最后一个 ITEM 不是文本,则上面的代码会出现以下错误:
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
Run Code Online (Sandbox Code Playgroud)
请理解剪贴板并非纯粹用于文本。复杂的结构可以以 1 到 N 个ClipData.Item对象的形式放置在剪贴板上ClipData您从中获取的getPrimaryClip()。
给定您的ClipData, 调用getItemCount()以确定项目数。对于任何一个项目(S)你想尝试使用,通话getItemAt()就ClipData得到相应的ClipData.Item。在该项目上,您可以调用getText()或coerceToText()尝试获取该项目的文本表示。
使用下面的代码
String copyString = clipboard.getPrimaryClip().getItemAt(0).getText()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2249 次 |
| 最近记录: |