0

次のように、AndroidでJavaMailを使用してソケットを開こうとしている非常に単純なコードがあります。

public boolean connect() {
    try {
        store_ = session_.getStore("imap");
        store_.connect(email_.host, email_.user, email_.pass);
        folder_ = store_.getDefaultFolder();
        folder_ = folder_.getFolder("inbox");
        folder_.open(Folder.READ_ONLY);
    }
    catch(Exception e) {
        disconnect();
        return false;
    }

    return true;
}

public void disconnect() {
    if (folder_ != null) {
        try {
            folder_.close(false);
        }
        catch(Exception e) {
        }
        folder_ = null;
    }

    if (store_ != null) {
        try {
            store_.close();
        }
        catch(Exception e) {
        }
        store_ = null;
    }
}

SSLを必要としないIMAPサーバーでは正常に機能します。それ以外の場合、アプリはブロックするだけです。トライ/キャッチに関係なく。何か案が?もちろん、「imap」ではなく「imaps」に言及するとすぐに機能することに注意してください。ただし、どのような場合でもアプリがブロックされることは望ましくありません。

4

2 に答える 2

0

これは UI スレッドで行われていますか? connect() (socket.connect()) メソッドがブロックされるため、ASyncTask やサービスなどにオフロードする必要があります。

于 2013-01-23T05:53:14.423 に答える
0

最初にこれを読んで、メイン UI スレッドまたはバックグラウンド スレッドのどちらでソケット接続を行っているかを確認することをお勧めします。例はこのリンクにあります:こちら

于 2013-01-23T05:57:37.847 に答える