【问题标题】:Import Java Project in Android application?在 Android 应用程序中导入 Java 项目?
【发布时间】:2012-02-03 13:05:31
【问题描述】:

即使 java 项目中的某些类在普通的 android 项目中无法识别,我是否可以在 Android 项目中使用 Java 项目?比如 javax.xml 包?

我认为有两种可能性:

  1. 使用该 java 项目创建一个 jar 并将其导入 android
  2. 或者参考android中的项目(据我了解是可能的)。

但无论哪种方式,那些在 java 中找到但在 android 中没有的类在我的 Android 应用程序中是否可以使用?这行得通吗?谢谢你。

我创建了 JavaProject,然后将它作为参考导入到我的 Android 项目中。我收到了一个我没想到的错误,它无法识别我的 Java 项目中的 .classes。

【问题讨论】:

  • 它应该可以工作,除非它们与 android 冲突。
  • wiseandroid.com/post/2010/07/16/…。但是它说一些 android 不喜欢的东西。
  • 这是我很好奇的,一般会和android冲突,因为javax.xml包不在android的默认包中,并且导入核心库是不可编译的。我希望导入一个 java 项目不会是相同的结果,android 会抱怨这些类。
  • 将你的java项目的java源码复制到你的android源码文件夹中,然后检查编译错误。当您找到这些时,请针对这些错误发布问题。这将节省我们的时间,因为您所说的两个选项都不适用于实际的 android 平台
  • 也请标记为android和xml

标签: java android xml


【解决方案1】:

如果您使用的是 Eclipse(带有 ADT 插件),您可以在 Android 项目的构建路径中引用 Java 项目。这会将这些类打包到您的 .apk 输出中,并允许您在应用中使用它们。

正如您在 cmets 中指出的那样;在您的情况下,将 Java 项目作为 Android 库引用将不起作用,因为 javax.* 包的存在将导致 Eclipse 中的编译时错误。在这种情况下,您需要选择选项 1 并从您的 Java 项目构建一个 Jar 文件并将其包含在 as explained here 中。这样,需要 javax.* 的类文件不会产生任何编译/运行时错误除非您尝试使用它们。无论哪种方式,使用 Java 构建路径 都不会像您预期的那样工作 - 类文件不是以这种方式捆绑的。

Android 平台提供some of javax.xml,但不提供整个包(阅读this document 了解更多详情)。通常最简单的解决方案是编写一个与受影响的 Java 代码等效的 Android 代码,它不需要缺少的依赖项,并且 bridge 2 个实现,因此每个项目都使用正确的一个。

【讨论】:

    【解决方案2】:

    它终于成功了,我最大的问题是我传递给 HttpPost 的 url,而带有 SAP 的 ksoap2 根本不适合我。

    private void testCallingService() {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        httpclient.getCredentialsProvider().setCredentials(
                new AuthScope("ip here", port here),
                new UsernamePasswordCredentials(username, password));
    
        try {
            String buffer = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='namespace'><soapenv:Header/><soapenv:Body><urn:methodname><USERNAME>test</USERNAME></urn:methodname></soapenv:Body></soapenv:Envelope>";
            HttpPost httppost = new HttpPost(url);
    
            StringEntity se = new StringEntity(buffer, HTTP.UTF_8);
            se.setContentType("text/xml");
            httppost.setHeader("Content-Type",
                    "application/soap+xml;charset=UTF-8");
            httppost.setEntity(se);
    
            CredentialsProvider credsProvider = new BasicCredentialsProvider();
            credsProvider.setCredentials(new AuthScope("ip", port),
                    new UsernamePasswordCredentials(username, password));
            httpclient.setCredentialsProvider(credsProvider);
    
            BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient
                    .execute(httppost);
            if (httpResponse.getStatusLine() != null) {
                System.out.println("Http status: "
                        + httpResponse.getStatusLine());
            }
    
            RequestLine requestLine = httppost.getRequestLine();
    
            String response = getResponseBody(httpResponse); // read server response. response.getEntity().getContent();...
            System.out.println("response: " + response);
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
        httpclient.getConnectionManager().shutdown();
    }
    

    所以,我自己构建了 SOAP 信封,并将在不久的将来尝试停止这样做。创建一个 CredentialsProvider 实例并设置我的用户/通行证详细信息。服务器的状态是 200,我收到了我需要的信息。一个问题仍然是响应显然太大(而且它不会在这里停止)所以我的响应被截断了。现在正在努力解决这个问题。 我真的希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多