2012-02-03 1 views
6

Javaプロジェクトのいくつかのクラスが通常のアンドロイドプロジェクトで認識されない場合でも、AndroidプロジェクトでJavaプロジェクトを使用できますか?例えばjavax.xmlパッケージ?AndroidアプリケーションでJavaプロジェクトをインポートしますか?

  1. どちらかがそのJavaプロジェクトでjarファイルを作成し、それがアンドロイド
  2. にインポートしたり、(私はそれが可能だ理解されるような)アンドロイドでプロジェクトを参照:私はそれを見るよう

    は2つの可能性があります。

しかし、どちらの方法でも、Javaでは見つかるがアンドロイドでは見つからないクラスはAndroidアプリケーションでOKですか?これは動作しますか?ありがとうございました。 Printscreen from build path of my android app

Printscreen from build path of my android app

私はJavaProjectを作り、その後、参照として私のAndroidのプロジェクトでそれを輸入しました。期待していなかったエラーが発生し、Javaプロジェクトの.classesが認識されません。

+0

アンドロイドと競合している場合を除き、動作するはずです。 – kosa

+0

http://www.wiseandroid.com/post/2010/07/16/Porting-existing-Java-code-to-Android.aspxしかし、それはいくつかのアンドロイドは好きではないと言います。 – sealz

+0

これは私が興味を持っていることですが、パッケージjavax.xmlがアンドロイドのデフォルトパッケージになく、コアライブラリをインポートすることがコンパイルできないため、通常アンドロイドと競合します。私は、Javaプロジェクトのインポートが同じ結果にならないことを期待していました。アンドロイドはこれらのクラスについて不平を言っていました。 – user1140656

答えて

1

(ADTプラグインを使用して)E​​clipseを使用している場合は、AndroidプロジェクトのビルドパスでJavaプロジェクトを参照できます。これにより、これらのクラスが.apk出力にパッケージ化され、アプリで使用できるようになります。

あなたのコメントで指摘したとおり、 JavaプロジェクトをAndroidライブラリとして参照することはできません。なぜなら、javax。*パッケージが存在するとEclipseでコンパイル時にエラーが発生するからです。この場合、オプション1を選択し、JavaプロジェクトからJarファイルを作成し、それにas explained hereを含める必要があります。このように、javax. *を必要とするクラスファイルは、を使用しようとしない限り、コンパイル/ランタイムエラーを生成しません。いずれにしても、Javaビルドパスを使用すると、期待どおりに動作しません。クラスファイルはこの方法でバンドルされません。

Androidプラットフォームはsome of javax.xmlですが、パッケージ全体ではありません(詳しくはthis documentをご覧ください)。多くの場合、最も簡単な解決策は、依存関係のないJavaコードをAndroidに書き込むことです。bridgeは2つの実装に対応しているため、それぞれのプロジェクトに正しいものが使用されます。

0

最終的に私の最大の問題は、私が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で、私は必要な情報を受け取ります。 1つの問題は、応答が明らかに大きすぎることです(そして、ここでは停止しません)ので、私の応答は切り捨てられます。それを今解決するために働く。 私はこれが誰かを助けることを本当に願っています。

関連する問題