0

私のAndroidアプリケーションにEWS-Java-APIを使用したいと思います。 アプリケーションは、プログラムでMicrosoft Exchange Serverにアクセスするためにログインする必要があります(カレンダー会議、電子メール、会議室など)。EWS-Java-API - EmailMessage.send into java.lang.NullPointerException:format == null

これまでのところ状況を示すために、ほとんどの質問が編集されています。

私は、URLとの交流のバージョン15.0.11( "HTTPS://yourserver/EWS/Exchange.asmx")に接続して取得しようとする

のGradleファイルのビルド:

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.1" 
useLibrary 'org.apache.http.legacy' 

defaultConfig {   
    minSdkVersion 18 
    targetSdkVersion 22 
    versionCode 1 
    versionName "1.0" 
    multiDexEnabled true 
} 

packagingOptions {   
    exclude 'META-INF/DEPENDENCIES.txt' 
    exclude 'META-INF/DEPENDENCIES' 
    exclude 'META-INF/dependencies.txt' 
    exclude 'META-INF/LICENSE.txt' 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/license.txt' 
    exclude 'META-INF/LGPL2.1' 
    exclude 'META-INF/NOTICE.txt' 
    exclude 'META-INF/NOTICE' 
    exclude 'META-INF/notice.txt' 
} [...] } 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.2.1' 
    compile 'com.android.support:design:23.3.0' 
    compile 'com.google.android.gms:play-services:6.5.87' 
    compile 'org.altbeacon:android-beacon-library:2.7.1' 
    compile 'org.greenrobot:eventbus:3.0.0' 
    compile files('libs/jcifs-1.3.15.jar') 
    compile files('libs/commons-logging-1.1.1.jar') 
    compile files('libs/commons-codec-1.4.jar') 
    compile files('libs/commons-httpclient-3.1.jar') 
    compile 'com.microsoft.ews-java-api:ews-java-api:2.0' } 

これをこのエラーメッセージに発生します

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/client/protocol/HttpClientContext; 

ライン:

ExchangeService service = new ExchangeService();  

この時点で私はこのews libary "github.com/faisons/EWS-For-Android"をテストしました。

​​3210

これはほとんど機能しています。私はアプリケーションを起動してExchangeServiceをセットアップすることができます。

Thread thread = new Thread(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      try 
      { 
       ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 
       ExchangeCredentials credentials = new WebCredentials(myuser, mypw); 
       service.setCredentials(credentials); 
       service.setUrl(new URI("https://exchmail.yourserver.com/EWS/Exchange.asmx")); 
       EmailMessage message = new EmailMessage(service); 
       EmailAddress from = new EmailAddress(myemail); 
       message.setSender(from);     
       message.getToRecipients().add(anotherEmail); 
       message.setSubject("Much wow - such message"); 
       MessageBody messageBody = new MessageBody(); 
       messageBody.setText("text here"); 
       message.setBody(messageBody); 
       message.send(); 

      } 
      catch (Exception e) 
      { 
       Log.e(TAG, "message", e); 
      } 
     } 
    }); 

    thread.start(); 

エラーは以下のようになります。

java.lang.NullPointerException: format == null 
    at java.lang.String.format(String.java:1799) 
at java.lang.String.format(String.java:1777) 
    at java.lang.String.format(String.java:1799) 
    at microsoft.exchange.webservices.data.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:936) 
at microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:821) 
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:46) 
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:143) 
at microsoft.exchange.webservices.data.ExchangeService.internalCreateItems(ExchangeService.java:463) 
at microsoft.exchange.webservices.data.ExchangeService.createItem(ExchangeService.java:534) 
at microsoft.exchange.webservices.data.Item.internalCreate(Item.java:215) 
at microsoft.exchange.webservices.data.EmailMessage.internalSend(EmailMessage.java:125) 

はIAMは、APIの作業を取得する方法を混同しました。誰かが何かヒントを得る別の方法を知っている場合は、歓迎です!

答えて

2

挨拶!私には良い知らせがあります。

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

これは私のビルドである:これは完璧な方法ですが、私はすべての

まずあなたがmanifesファイルで宣言された権限を持っていることを確認してメールを送信することができていた場合Iamはわかりません。 Gradleのファイル:

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.1" 
useLibrary 'org.apache.http.legacy'  // <--------------------- 

defaultConfig { 
    applicationId "your application id" 
    minSdkVersion 18 
    targetSdkVersion 22 
    versionCode 1 
    versionName "1.0" 
    multiDexEnabled true 
} 

packagingOptions { 
    exclude 'META-INF/LICENSE.txt' 
    exclude 'META-INF/NOTICE.txt' 
    exclude 'META-INF/DEPENDENCIES.txt' 
    exclude 'META-INF/DEPENDENCIES' 
    exclude 'META-INF/dependencies.txt' 
    exclude 'META-INF/LICENSE.txt' 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/license.txt' 
    exclude 'META-INF/LGPL2.1' 
    exclude 'META-INF/NOTICE.txt' 
    exclude 'META-INF/NOTICE' 
    exclude 'META-INF/notice.txt' 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
}} 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.2.1' 
compile 'com.android.support:design:23.3.0 
compile files('libs/ews-android-api.jar') // <--------------------- 
compile 'joda-time:joda-time:2.8'}   // <--------------------- 

あなたは、このリンクの下EWS-アンドロイド-APIを取得することができます: https://github.com/alipov/ews-android-api

ただ、建物のinstructiに従ってくださいjarファイルを作成します。

これは、電子メールを送信するための基本的なコマンドライン(非同期タスクとして、または新しいスレッドでこれを実行する)である:あなたがEWSEditorで資格情報を確認することができます

   ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 
       ExchangeCredentials credentials = new WebCredentials("user", "pw"); 
       service.setCredentials(credentials); 
       service.setUrl(new URI("https:// s e r v e r /ews/exchange.asmx"));      
       EmailAddress mEmail = new EmailAddress("your email/test email"); 

       EmailMessage message = new EmailMessage(service); 
       message.getToRecipients().add(mEmail); 
       message.setFrom(mEmail); 
       message.setSubject("Hello world!"); 
       message.setBody(MessageBody.getMessageBodyFromText("Sent using the EWS Android API.")); 
       message.send(); 

。 DevilGeekとAlipovに叫ぶ。

何かが不明な場合はお気軽にお問い合わせください。

大切にしてください!

編集: ほとんどすべての機能を備えているようです。特にOffice 365は必要ありません。例えば、 "service.getRoomLists();"を呼び出すことができるiam同じように。

+0

" java .lang.NoClassDefFoundError:AutodiscoverService.getUserSettingsを呼び出すと、Ljava/applet/Appletの解決に失敗しました。これはhttps://github.com/alipov/ews-android-api/issues/3に文書化されています。あなたはどうしたのですか? – NotAgain

0

あなたのgradleビルドにApacheのレガシーラインを追加しましたか?

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 
    useLibrary 'org.apache.http.legacy' 
    ... 
} 

詳細はこれを参照してください。http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client

+0

素早く答えてくれてありがとうBenoit! 私はこれを追加し、警告だ: 警告:オプションのライブラリを見つけることができません:私は、アプリケーションを実行しようとするとorg.apache.http.legacy – Lugo

+0

は、私はこれを取得: 警告:依存関係コモンズ・ログ:コモンズ・ロギングを: 1.2がAndroidで提供される内部バージョンと競合する可能性があるため、デバッグは無視されます。問題が発生した場合は、jarjarで再パッケージしてクラスパッケージを変更してください。 エラー:プロジェクト ':app'の設定中に問題が発生しました。 >オプションのライブラリを見つけることができません:org.apache.http.legacy – Lugo

+0

私はあなたの依存関係を取り除くべきだと思います。 'ファイルをコンパイルすると(' libs/org.apache.http.legacy.jar ')、レガシーはSDK。 エラーについては、その投稿をご覧ください。http://stackoverflow.com/questions/33898857/why-warningunable-to-find-optional-library-org-apache-http-legacy-occurs It SDKのインストールにオプションが含まれていないようです。再インストールすると問題が解決する場合があります。 Hey Benoit。 – Benoit