3

私はすでに Java で Exchange Web サービスを試しています。順調です。メールを送信したり、メールを正しく受信したりしています。

私のJavaコードは次のようになります:

public static void main(String[] args) {
    try {
        Locale.setDefault(Locale.ENGLISH);
        ExchangeService service = new ExchangeService();
        WebCredentials webCredentials = new WebCredentials("asdasd@asasd.onmicrosoft.com", "asdasdasd");
        URI url = new URI("https://asdasd802.outlook.com/ews/Exchange.asmx");
        service.setCredentials(webCredentials);
        service.setUrl(url);

        System.out.println(service.getRequestedServerVersion());

        msg.setSubject("Hello world!"); 
        msg.setBody(MessageBody.getMessageBodyFromText("Sent using the EWS Managed API."));
        msg.getToRecipients().add("asdasd@gmail.com");
        msg.send();

    } catch (Exception ex) {
        ex.printStackTrace();
        //System.out.println(ex.toString());
    }

}

このコードを使用してAndroidでこれを試すと:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
    Button b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Locale.setDefault(Locale.ENGLISH);
            try {
                ExchangeService service = new ExchangeService();
                WebCredentials webCredentials = new WebCredentials(
                        "asdasd@asdasd.onmicrosoft.com",
                        "asdasd");
                URI url = new URI("https://asdasd.outlook.com/ews/Exchange.asmx");
                service.setCredentials(webCredentials);
                service.setUrl(url);

                EmailMessage msg= new EmailMessage(service);
                msg.setSubject("Hello world!");
                msg.setBody(MessageBody.getMessageBodyFromText
                           ("Sent using the EWS Managed API."));
                msg.getToRecipients().add("asdasd@gmail.com");
                msg.send();

            } catch (Exception ex) {
                //ex.printStackTrace();
                System.out.println(ex.toString());
            }
        }
    });
}

ボタンをクリックすると、いくつかのエラーが発生します。

これはコンソールからのメッセージです:

[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.httpclient.HttpMethodBase$1) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory$1) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.impl.LogFactoryImpl$1) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.impl.LogFactoryImpl$2) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.impl.LogFactoryImpl$3) が付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.impl.SimpleLog$1) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.impl.WeakHashtable$1) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.LogFactory$1) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.LogFactory$2) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.LogFactory$3) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.LogFactory$4) が付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.LogFactory$5) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
[2011-12-15 17:06:25 - MobileApplication1] Dx 警告: 匿名内部クラスの InnerClasses 属性を無視しています
(org.apache.commons.logging.LogFactory$6) には付属していません
関連する EnclosureMethod 属性。このクラスは、おそらく
最新の .class ファイル形式を対象としていないコンパイラ。推奨される
解決策は、最新のコンパイラを使用してソースからクラスを再コンパイルすることです
「-target」タイプのオプションを指定せずに。無視した結果
この警告は、このクラスに対するリフレクション操作が正しく行われないことを示しています。
内部クラスではないことを示します。
強調表示の切り替え新しいウィンドウで開くすべて選択

これは、ログ チャットからのエラーです。

09-21 09:10:17.039: E/AndroidRuntime(4126): 致命的な例外: メイン
09-21 09:10:17.039: E/AndroidRuntime(4126): java.lang.VerifyError: microsoft.exchange.webservices.data.EwsServiceXmlWriter
09-21 09:10:17.039: E/AndroidRuntime (4126): microsoft.exchange.webservices.data.ServiceRequestBase.emit (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime (4126): microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime (4126): microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime (4126): microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime (4126): microsoft.exchange.webservices.data.ExchangeService.internalCreateItems (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime (4126): microsoft.exchange.webservices.data.ExchangeService.createItem (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime(4126): microsoft.exchange.webservices.data.Item.internalCreate (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime (4126): microsoft.exchange.webservices.data.EmailMessage.internalSend (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime(4126): microsoft.exchange.webservices.data.EmailMessage.send (不明なソース) で
09-21 09:10:17.039: E/AndroidRuntime(4126): com.MobileApplication1.android.MainScreenActivity$1.onClick(MainScreenActivity.java:60)
09-21 09:10:17.039: E/AndroidRuntime(4126): android.view.View.performClick(View.java:2485)
09-21 09:10:17.039: E/AndroidRuntime(4126): android.view.View$PerformClick.run(View.java:9080) で
09-21 09:10:17.039: E/AndroidRuntime(4126): android.os.Handler.handleCallback(Handler.java:587) で
09-21 09:10:17.039: E/AndroidRuntime(4126): android.os.Handler.dispatchMessage(Handler.java:92) で
09-21 09:10:17.039: E/AndroidRuntime(4126): android.os.Looper.loop(Looper.java:123)
09-21 09:10:17.039: E/AndroidRuntime(4126): android.app.ActivityThread.main(ActivityThread.java:3687) で
09-21 09:10:17.039: E/AndroidRuntime(4126): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で
09-21 09:10:17.039: E/AndroidRuntime(4126): java.lang.reflect.Method.invoke(Method.java:507) で
09-21 09:10:17.039: E/AndroidRuntime(4126): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) で
09-21 09:10:17.039: E/AndroidRuntime (4126): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:625) で
09-21 09:10:17.039: E/AndroidRuntime(4126): dalvik.system.NativeStart.main(ネイティブメソッド)
強調表示の切り替え新しいウィンドウで開くすべて選択

これらのライブラリは既に追加しています。

Exchange Web サービス (EWS) Java マネージ API は、1 つのパッケージ microsoft.exchange.webservices.data で構成され、次のサード パーティ ライブラリが必要です。

  • Apache Commons HttpClient (commons-httpclien.jar)
  • Apache コモンズ コーデック (commons-codec.jar)
  • Apache Commons ロギング (commons-codec.jar)
  • JCIFS (jcifs.jar)
  • EWS Java API。

何が問題ですか?

私はいくつかの研究をしました。Android が既に SDK ライブラリにログと httpclient を持っている場所をいくつか見ます。

4

1 に答える 1

1

Ansdroid には既に commons-http が含まれているため (どのバージョンが使用されているかは不明ですが、4 以上です)、ビルド プロセスで既に含まれている jar が apk にパックされないようにする必要があります。

もう 1 つの問題は、DX のクラス フォーマットに関する問題です。これは、時代遅れであり、再コンパイルする必要があることを示しています。また、依存関係のバージョンを確認し、最近のものを使用してください (maven / ivy を使用すると簡単になります)。

于 2011-12-16T07:56:15.063 に答える