2016-08-14 4 views
-3

Android에서 javamail의 IdleManager가 작동하지 않습니다.Android Socket.getchannel() 메서드는 항상 javamail에 null을 반환합니다.

idlemanager가있는 폴더를 보려고하면 javamail에서 오류 메시지가 표시됩니다. 폴더가 SocketChannels을 사용하고 있지 않습니다. Android SocketChannel은 항상 Socket 내에서 null을 반환합니다.

깊이 파고 들자면 SSLSocketFactory에서 소켓을 만들면 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

나는 여전히 문제가 질문으로 이것을보고가 있어요. 스택 트레이스가없는 이유는 무엇입니까? 그리고 '안드로이드는 항상'Socket'의 의미 내에서 null을 리턴합니까? – EJP

+0

@EJP는 빠른 응답에 감사드립니다. Stacktrace는 질문에 – Mymac

+0

을 추가했습니다. 두 가지 문제 중 하나이며, 이제는 세 번째 문제가 있습니다. 'SSLSocketFactory'에서'Socket'을 만들 때'SocketChannel' null'을 의미합니까? – EJP

답변

1

JavaMail 1.5.6 (단지 발표를) 시도 스택 트레이스입니다. 그것은 몇 가지 안드로이드 수정 프로그램이 있습니다.

나는 이것을 조금 더 파헤 치며, 이것이 JavaMail이 쉽게 해결할 수없는 안드로이드의 버그라고 말할 수있는 한 멀리 파고 들었습니다. 신고 해주세요. 안드로이드에 대한 실제 자바 만, 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

관련 문제