首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新手安卓错误: java.lang.NoClassDefFoundError: android.content.ClipboardManager

新手安卓错误: java.lang.NoClassDefFoundError: android.content.ClipboardManager
EN

Stack Overflow用户
提问于 2015-09-24 21:22:46
回答 1查看 129关注 0票数 2

在我的安卓应用程序中,我碰巧使用下面的代码从TextView中复制文本。

代码语言:javascript
复制
buttonCopy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String copyText;
copyText = textBox2.getText().toString();
myClip = ClipData.newPlainText("text", copyText);
myClipboard.setPrimaryClip(myClip);
Toast.makeText(getApplicationContext(), "Copied",     Toast.LENGTH_SHORT).show();
}
});

我为我的应用程序设置的最低API级别是API级别10。

代码语言:javascript
复制
myClip = ClipData.newPlainText("text", copyText);
myClipboard.setPrimaryClip(myClip);

需要最低API级别11。

果然,我的应用程序用户正在发送以下报告

代码语言:javascript
复制
java.lang.NoClassDefFoundError: android.content.ClipboardManager
at com.nepali_unicode.nepalityping.MainActivity.onCreate(Unknown Source)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)

我想用API级别10支持旧设备。那么,我的问题是如何为这些旧设备启用“复制”按钮?

  • 我是否需要使用完全不同但支持我想要的API级别的单一代码?
  • 或者,我可以做些什么,以便使用API 10的设备使用不同的代码复制文本?

我会感谢你的帮助。我是个新手。我的PHP编程背景鼓励我学习Android。我参加了Udacity的课程。我在通过做来学习。哦,我碰巧用的是安卓工作室。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-24 21:27:21

我是否需要使用完全不同但支持我想要的API级别的单一代码?

您可以使用更简单的android.text.ClipboardManager API,它应该适用于所有API级别。在您的例子中,这只是调用setText()将文本放在剪贴板上。

或者,我可以做些什么,以便使用API 10的设备使用不同的代码复制文本?

您可以使用Build.VERSION.SDK_INT查看您使用的是哪个版本的Android,并执行不同的操作:

代码语言:javascript
复制
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
  // do the newer API
}
else {
  // do the older API
}

在这里的具体例子中,由于您的新代码似乎只做了setText()会做的事情,所以只使用setText()就更简单了。但是,如果您正在利用较新的剪贴板API提供的更详细的功能(例如,提供不同MIME类型的内容的变化,如HTML和纯文本),那么使用上面的if测试可以让您在较新的设备上做一些很酷的事情,并在旧设备上优雅地降级。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32771146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档