正在显示消息gmail帐户的收件箱
问题描述:
我正尝试阅读任何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;
}
});
}
}
答
我想你应该叫super.getView()在“public View getView(int posit离子,查看convertView,ViewGroup父母)“以获得有效的布局视图并从中找到文本视图,然后填写电子邮件主题。
请发布异常堆栈跟踪。 – kosa 2012-01-17 20:17:01
这不一定是原因,但'if(null == convertView ||!(convertView instanceof TextView))''如果convertView是TextView的实例,则将resultView视为null。 – harism 2012-01-17 20:20:16
我很好奇你是如何期望我们去调试你的NPE的;只是阅读代码并找出它?创建一个项目,编译它,运行它? – 2012-01-17 20:21:08