2016-08-14 8 views
-3

AndroidでjavamailのIdleManagerが機能していません。Android Socket.getchannel()メソッドは常にjavamailにnullを返します

idlemanagerでフォルダを監視しようとすると、javamailでエラーメッセージが表示されるフォルダがSocketChannelsを使用していません。 Android SocketChannelは常にSocket内でnullを返します。

深く掘り下げた後、SSLSocketFactoryからSocketを作成すると、SocketChannelがnullになっていることがわかりました。

この問題の回避策はありますか?

はここ

javax.mail.MessagingException: Folder is not using SocketChannels 
at com.sun.mail.imap.IdleManager.watch(IdleManager.java:203) 
at com.sample,mail.ImapIdle$1.doInBackground(ImapPushNotification.java:120) 
at android.os.AsyncTask$2.call(AsyncTask.java:292) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 
+0

私はこれを依然として問題と見なしています。スタックトレースがないのはなぜですか? 「Androidは常に「Socket」の意味でnullを返すのは何ですか? – EJP

+0

@EJP迅速な対応に感謝します。 Stacktraceは質問 – Mymac

+0

に追加しました。これは2つの問題のうちの1つですが、今や3つ目の問題があります。なぜなら 'SSLSocketFactory'から 'Socket'を作成すると、' SocketChannel'ヌルを意味していますか? – EJP

答えて

1

JavaMail 1.5.6(リリースされたばかりの)を試してみてくださいスタックトレースです。それはいくつかのAndroidの修正があります。

私はこれをもう少し掘り下げましたが、これはJavaMailが簡単に回避できないAndroidのバグだということが分かります。 これをGoogleに報告してください。以下は実際のJavaで動作しますが、Androidではnullを表示します:

Socket s = SocketChannel.open().socket(); 
    s.connect(new InetSocketAddress(host, port)); 
    Socket ss = ((SSLSocketFactory)SSLSocketFactory.getDefault()). 
         createSocket(s, host, port, true); 
    System.out.println("SocketChannel wrapped " + ss.getChannel()); 
+0

私はJavamail 1.5.6を使用しています – Mymac

+0

'mail.imap.usesocketchannels'プロパティを設定しましたか? –

+0

はい、 'mail.imap.usesocketchannels'をtrueに設定しました。 Javaでは同じコードが動作していますが、Androidでは動作しません。 – Mymac

関連する問題