2012-01-17 113 views
0

我正尝试阅读任何gmail帐户中的电子邮件。以下是代码,如何列出已使用getMail()方法展开的任何gmail帐户中的收件箱项目。正在显示消息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 2012-01-17 20:17:01

+0

这不一定是原因,但'if(null == convertView ||!(convertView instanceof TextView))''如果convertView是TextView的实例,则将resultView视为null。 – harism 2012-01-17 20:20:16

+0

我很好奇你是如何期望我们去调试你的NPE的;只是阅读代码并找出它?创建一个项目,编译它,运行它? – 2012-01-17 20:21:08

回答

0

我想你应该叫super.getView()在“public View getView(int posit离子,查看convertView,ViewGroup父母)“以获得有效的布局视图并从中找到文本视图,然后填写电子邮件主题。

相关问题