【问题标题】:Android - How to use methods from another Java projectAndroid - 如何使用来自另一个 Java 项目的方法
【发布时间】:2011-12-08 00:14:03
【问题描述】:

我正在开发一个 Android 应用程序,它基于以前的 Java 程序中的类。但是每当我尝试从 Java 项目调用方法时,我都会在 Android 模拟器上收到错误消息:“不幸的是,MyApp 已停止。”

一个例子:

Toast.makeText(getBaseContext(), User.dummyString(), Toast.LENGTH_SHORT).show();

导致此错误,其中 User 类的定义如下:

public class User {

    public static String dummyString(){
        return "Hello hello";
    }

}

我已将 Java 项目添加到 Android 项目的构建路径中,并且我在 Java 项目的构建路径中的 Order and Export 选项卡中勾选了 src 文件夹。我该如何解决这个问题?

【问题讨论】:

  • 你能打印出错误的实际堆栈跟踪的 Logcat 吗? “不幸的是,MyApp 已停止。”是最终用户消息。
  • 啊,找到了! Logcat 到处乱扔东西,所以我以前一定错过了它。这似乎是相关的:java.lang.NoClassDefFoundError: com.GC01.Coursework.User 仍然不清楚为什么它找不到类定义......
  • 我在下面发布了一个答案。请记住,Logcat 是您的朋友。

标签: java android build


【解决方案1】:

首先,您似乎错误地实例化了 User 类。

而不是使用。

User.dummyString();

你应该像这样实例化它..

 User user = new User();

然后尝试使用你的方法。

如果您发布您遇到的错误也会有所帮助。

【讨论】:

  • 我认为他做得很好,因为 dummyString() 方法是静态的,所以使用 User.dummyString() 有什么问题;
  • dummyString() 是一个静态方法,所以他应该需要实例化用户
  • 是静态方法,所以我直接用类名,不创建实例。无论如何,我确实尝试过实例化new User();,但它给出了同样的错误。它不会告诉我 try-catch 的错误是什么,它只会显示 this 然后关闭应用程序。
【解决方案2】:

java.lang.NoClassDefFoundError: com.GC01.Coursework.User 表示android 找不到你的User 类。您正在链接库,但 apk 没有打包它。您可能需要再次检查您的构建过程,但最简单的解决方法是将源代码直接包含在您的项目中。

【讨论】:

  • 当你说我应该直接在我的项目中包含源代码时,你的意思是复制包含相关代码的文件夹吗?我宁愿不这样做,因为我正在并行开发 Java 项目,并且不想进行所有更改两次。我应该在构建过程中检查哪些内容?
  • 如果您正在使用源代码控制进行开发,那么保持代码最新并不是一个挑战。 (git:eclipse.org/resources/resource.php?id=528,svn:subclipse.tigris.org)但是如果你坚持保留一份代码,那么官方的 android 参考对我有用:developer.android.com/guide/developing/projects/…
  • 我意识到我的后一种解决方案仅适用于 android 库,而您尝试链接的其他来源则不适用。对于非 android 库,Dalvik 需要在其 lib 文件夹中编译文件的 jar,否则它将不会添加到项目中(即使您在构建路径中列出了源的位置)。请参阅此先前接受的解决方案:stackoverflow.com/a/2539055/902730
  • 每次更改其他源时编译一个 jar 并将其重新链接到 android 项目会比从 git 推送/拉取编辑的麻烦两倍。我会选择源代码控制。
猜你喜欢
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 2015-04-03
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多