0

Я хочу использовать EWS-Java-API для моего приложения для Android. Приложение требует входа в систему, чтобы получить программный доступ к серверу обмена Microsoft Exchange (например, собрания календаря, электронная почта, конференц-залы и многое другое).EWS-Java-API - EmailMessage.send в java.lang.NullPointerException: format == null

На данный момент почти весь вопрос редактируется, на всякий случай, чтобы показать ситуацию до сих пор.

Я пытаюсь подключиться к обменной версии 15.0.11 с URL ("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; 

Line:

ExchangeService service = new ExchangeService();  

На данный момент я протестировал этот ews libary «github.com/faisons/EWS-ForAndroid».

compile files('libs/ews.jar') 

Это почти работает. Я могу запустить приложение и настроить 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) 

И спутать, как получить апите работу. Если кто-то знает другой способ получить доступ, любой намек приветствуется!

ответ

2

приветствие! У меня хорошие новости, это работает! Iam не уверен, если это идеальный способ, но я могу отправить на e-mail

Прежде всего убедитесь, что у вас есть права доступа, указанные в файле manifes:

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

Это моя сборка. 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-андроид-апи по этой ссылке: https://github.com/alipov/ews-android-api

Просто следуйте здание instructi чтобы создать файл jar.

Это основная командная строка для отправки электронной почты (запустить это как асинхронная задачу или в новом потоке):

   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(); 

Вы можете проверить свои учетные данные с EWSEditor. Крик к DevilGeek и Алипову.

Если что-то неясно, не стесняйтесь спрашивать.

С уважением!

EDIT: Кажется, что работает практически со всем. Вам не нужен Office 365, в частности. Например, iam можно вызвать «service.getRoomLists();» также.

+0

Я получаю« java .lang.NoClassDefFoundError: Сбой разрешения: Ljava/applet/Applet ", когда я делаю вызов AutodiscoverService.getUserSettings. Это было зарегистрировано на https://github.com/alipov/ews-android-api/issues/3. Как вы обошли это? – NotAgain

0

Вы добавили унаследованные линии 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

Когда я пытаюсь запустить приложение, я получаю следующее: Предупреждение: Зависимость от общего доступа: commons-logging: 1.2 игнорируется для отладки, поскольку это может противоречить внутренней версии, предоставляемой Android. В случае возникновения проблемы переупаковать его с помощью jarjar для изменения пакетов классов. Ошибка: возникла проблема при настройке проекта «Приложение». > Невозможно найти дополнительную библиотеку: 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 не включает опционные. Повторная установка может решить проблему. – Benoit

Смежные вопросы