2012-01-17 15 views
0

私はどのGmailアカウントでも電子メールを読もうとしています。コードは、getMail()メソッドで折り畳まれたgmailアカウントからInboxアイテムをリストする方法です。メッセージを表示するGmailアカウントの受信トレイ

mailReader.java

package myMail.namespace; 

import java.security.Security; 
import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Store; 

public class mailReader extends javax.mail.Authenticator{ 

    static { 
     Security.addProvider(new myMail.namespace.JSSEProvider()); 
    } 

    static Session session; 
    static Store store; 

    public static Message [] getMail() throws MessagingException{ 
     connect(); 
     Folder folder = store.getFolder("Inbox"); 
     folder.open(Folder.READ_ONLY); 
     Message[] messages = folder.getMessages(); 
     return messages; 
     } 

    private static void connect() throws MessagingException{ 
     if (null != session) 
      return; 
      java.util.Properties props = new java.util.Properties(); 
      props.setProperty("mail.imap.socketFactory.class", 
      "javax.net.ssl.SSLSocketFactory"); 
      props.setProperty("mail.imap.socketFactory.fallback", "false"); 
      props.setProperty("mail.imap.socketFactory.port", "993"); 
      session = Session.getDefaultInstance(props); 
      store = session.getStore("imap"); 
      store.connect("imap.gmail.com", "[email protected]", "myPass"); 
    } 
} 

そしてreadMailクラス

package myMail.namespace; 

import javax.mail.Message; 
import javax.mail.MessagingException; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class readMail extends ListActivity{ 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    //setContentView(R.layout.main); 
    Message[] messages = new Message[] { }; 

    try { 
     messages = mailReader.getMail(); 
    } 
    catch (MessagingException e) { 
     Log.e("mailReader getMail error. in readmail.java", e.getMessage(), e); 
    } 

    setListAdapter(new ArrayAdapter<Message>(this, 
    android.R.layout.simple_list_item_1, messages){ 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      Message message = getItem(position); 
      TextView resultView = null; 
      resultView = new TextView(super.getContext()); 
      try { 
       resultView.setText(message.getSubject()); 
      } 
      catch (MessagingException e) { 
       Log.e("resultView.setText in readmail", e.getMessage(), e); 
      } 
      return resultView; 
     } 
    }); 
    } 
} 

そしてJSSEプロバイダー

package myMail.namespace; 

import java.security.AccessController; 
import java.security.Provider; 

public final class JSSEProvider extends Provider { 

    //private static final long serialVersionUID = 1L; 

    public JSSEProvider() { 
     super("HarmonyJSSE", 1.0, "Harmony JSSE Provider"); 
     AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() { 
      public Void run() { 
       put("SSLContext.TLS", 
         "org.apache.harmony.xnet.provider.jsse.SSLContextImpl"); 
       put("Alg.Alias.SSLContext.TLSv1", "TLS"); 
       put("KeyManagerFactory.X509", 
         "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl"); 
       put("TrustManagerFactory.X509", 
         "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl"); 
       return null; 
      } 
     }); 
    } 
} 

+3

例外スタックトレースを送信してください。 – kosa

+0

これは必ずしも理由ではありませんが、 '' if(null == convertView ||(convertView instanceof TextView)) '' convertViewがTextViewのインスタンスである場合にresultViewをnullにします。 – harism

+0

NPEのデバッグにどのように期待しているのか不思議です。コードを読んでそれを理解するだけですか?プロジェクトを作成し、コンパイルして実行しますか? –

答えて

0

私は(あなたがsuper.getViewを呼ぶべきだと思います)で"public View getView(int posit ion、View convertView、ViewGroup parent)」をクリックして、有効なレイアウトビューを取得し、そこからテキストビューを見つけ、メールの件名を入力します。

関連する問題