在Android应用程序中导入Java项目?

时间:2012-02-03 13:05:31

标签: java android xml

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

我认为有两种可能性:

  1. 使用该java项目创建一个jar并将其导入android
  2. 或者在android中引用该项目(因为我知道它是可能的)。
  3. 但无论如何,在我的Android应用程序中,那些在java中但在android中找不到的类是否可以正常?这会有用吗?谢谢。 Printscreen from build path of my android app

    Printscreen from build path of my android app

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

2 个答案:

答案 0 :(得分:1)

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

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

Android平台提供some of javax.xml,但不提供整个软件包(有关详细信息,请阅读this document)。通常最简单的解决方案是编写一个Android等效的受影响的Java代码,不需要缺少依赖项,并bridge这两个实现,因此每个项目都使用正确的。

答案 1 :(得分:0)

它终于奏效了,我最大的问题是我传递给HttpPost的网址和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,我收到了我需要的信息。一个问题仍然是响应显然太大(并且它不会在此停止)所以我的响应被截断了。现在努力解决这个问题。 我真的希望这有助于某人。