2011-07-07 156 views
1

我試圖創建一個電子郵件客戶端,每當我嘗試運行應用程序時它會使用默認消息崩潰。任何人都可以告訴我哪裏出錯了。以下是我的Java文件和清單。Android未知應用程序崩潰

EmailManager.java

public class EmailManager { 



    private String stmpHost = "smtp.gmail.com"; 
     private String mailServer = "imap.gmail.com"; 
     private EmailAccount account; 
     private Session smtpSession; 
     private Session imapSession; 
     private Folder inbox; 
     private Store store; 



     public EmailManager(String username, String password, String urlServer, String stmpHost, String mailServer) { 
      account = new EmailAccount(username, password, urlServer); 
      this.stmpHost = stmpHost; 
      this.mailServer = mailServer; 
      initProtocol(); 
     } 
     private void initProtocol() { 
      EmailAuthenticator authenticator = new EmailAuthenticator(account); 

      Properties props1 = new Properties(); 
      props1.setProperty("mail.transport.protocol", "smtps"); 
      props1.setProperty("mail.host", stmpHost); 
      props1.put("mail.smtp.auth", "true"); 
      props1.put("mail.smtp.port", "465"); 
      props1.put("mail.smtp.socketFactory.port", "465"); 
      props1.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
      props1.put("mail.smtp.socketFactory.fallback", "false"); 
      props1.setProperty("mail.smtp.quitwait", "false"); 
      smtpSession = Session.getDefaultInstance(props1, authenticator); 

      Properties props2 = new Properties(); 
      props2.setProperty("mail.store.protocol", "imaps"); 
      props2.setProperty("mail.imaps.host", mailServer); 
      props2.setProperty("mail.imaps.port", "993"); 
      props2.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
      props2.setProperty("mail.imaps.socketFactory.fallback", "false"); 
      imapSession = Session.getInstance(props2); 
     } 
     public Message[] getMails() throws MessagingException { 
      store = imapSession.getStore("imaps"); 
      store.connect(mailServer, account.username, account.password); 
      inbox = store.getFolder("Inbox"); 
      inbox.open(Folder.READ_ONLY); 
      Message[] result = inbox.getMessages(); 

      for (int i=0, n=result.length; i<n; i++) { 
        System.out.println(i + ": " + result[i].getFrom()[0] 
        + "\t" + result[i].getSubject()); 


     } 
      return result; 
     } 
     public void close() { 
      //Close connection 
      try { 
       inbox.close(false); 
       store.close(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }  
     } 
     public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception { 
      MimeMessage message = new MimeMessage(smtpSession); 
      DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain")); 
      message.setSender(new InternetAddress(sender)); 
      message.setSubject(subject); 
      message.setDataHandler(handler); 
      if (recipients.indexOf(',') > 0) 
       message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients)); 
      else 
       message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients)); 
      Transport.send(message); 


      } 
     } 

這封電子郵件管理器稱爲mainactivity.java運行它

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     startActivity(new Intent(MainActivity.this, EmailManager.class)); 
    } 

} 

下面是我的Android清單文件。

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.mailtest.android" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission 
     android:name="android.permission.INTERNET" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> 
     <activity android:name=".MainActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".EmailManager" 
        android:label="@string/app_name" android:permission="android.permission.INTERNET"> 
     </activity> 
     <activity android:name=".EmailAithenticator" 
        android:label="@string/app_name"> 
     </activity> 
     <activity android:name=".EmailAccount" 
        android:label="@string/app_name"> 
     </activity> 
     <activity android:name=".ByteArrayDataSource" 
        android:label="@string/app_name"> 
     </activity> 

    </application> 
</manifest> 

日誌Cat有紅色以下錯誤:

07-08 07:03:03.947:DEBUG/WifiService(1329):啓用並啓動無線網絡由於updateWifiState 07-08 07:54:34.047:錯誤/ UrlDrawable(1454):getInputStream失敗! https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/276968_73855584817_8241940_q.jpg 07-08 07:54:34.047:ERROR/UrlDrawable(1454):java.net.UnknownHostException:fbcdn-profile-a.akamaihd.net 07-08 07:54:34.047:ERROR/UrlDrawable(1454):在java.net.InetAddress.lookupHostByName(InetAddress.java:500) 07-08 07:54:34.047:ERROR/UrlDrawable(1454):at java.net.InetAddress.getAllByNameImpl(InetAddress.java:297) 07- 08 07:54:34.047:ERROR/UrlDrawable(1454):在java.net.InetAddress.getAllByName(InetAddress.java:256) 7月7日至8日:54:34.047:ERROR/UrlDrawable(1454):在org.apache .http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 7月7日至8日:54:34.047:ERROR/UrlDrawable(1454):在org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry .java:164) 07-08 07:54:34.047:ERROR/Ur lDrawable(1454):在org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 7月7日至8日:54:34.047:ERROR/UrlDrawable(1454):在org.apache.http。 impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 7月7日至8日:54:34.047:ERROR/UrlDrawable(1454):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java: 555) 07-08 07:54:34.047:ERROR/UrlDrawable(1454):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 07-08 07:54:34.047: ERROR/UrlDrawable(1454):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 7月7日至8日:54:34.047:ERROR/UrlDrawable(1454):在com.htc。 graphics.drawable.UrlDrawable.getInputStream(UrlDrawable.java:956) 07-08 07:54:34.047:ERROR/UrlD rawable(1454):at com.htc.graphics.drawable.UrlDrawable.getFromRemote(UrlDrawable.java:983) 07-08 07:54:34.047:ERROR/UrlDrawable(1454):at com.htc.graphics.drawable。 UrlDrawable.access $ 800(UrlDrawable.java:71) 07-08 07:54:34.047:ERROR/UrlDrawable(1454):at com.htc.graphics.drawable.UrlDrawable $ WorkerCallable.call(UrlDrawable.java:776) 7月7日至8日:54:34.047:ERROR/UrlDrawable(1454):在com.htc.graphics.drawable.UrlDrawable $ WorkerCallable.call(UrlDrawable.java:710) 7月7日至8日:54:34.047:ERROR/UrlDrawable (1454):在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:306) 07-08 07:54:34.047:錯誤/ UrlDrawable(1454):在java.util.concurrent.FutureTask.run (FutureTask.java:138) 07-08 07:54:34.047:ERROR/UrlDrawable(1454):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecuto r.java:1088) 07-08 07:54:34.047:ERROR/UrlDrawable(1454):在java.util.concurrent.ThreadPoolExecutor中$ Worker.run(ThreadPoolExecutor.java:581) 07-08七時54: 34.047:錯誤/ UrlDrawable(1454):在java.lang.Thread.run(Thread.java:1027) 07-08 07:54:34。057:錯誤/ UrlDrawable(1454):getInputStream失敗! https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/276968_73855584817_8241940_q.jpg 07-08 07:54:34.057:ERROR/UrlDrawable(1454):java.net.UnknownHostException:fbcdn-profile-a.akamaihd.net 07-08 07:54:34.057:ERROR/UrlDrawable(1454):在java.net.InetAddress.lookupHostByName(InetAddress.java:500) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at java.net.InetAddress.getAllByNameImpl(InetAddress.java:297) 07- 08 07:54:34.057:ERROR/UrlDrawable(1454):at java.net.InetAddress.getAllByName(InetAddress.java:256) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at org.apache .http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 7月7日至8日:54:34.057:ERROR/UrlDrawable(1454):在org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry .java:164) 07-08 07:54:34.057:ERROR/Ur lDrawable(1454):at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at org.apache.http。 impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java: 555) 7月7日至8日:54:34.057:ERROR/UrlDrawable(1454):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 7月7日至8日:54:34.057: ERROR/UrlDrawable(1454):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at com.htc。 graphics.drawable.UrlDrawable.getInputStream(UrlDrawable.java:956) 7月7日至8日:54:34.057:ERROR/UrlD rawable(1454):at com.htc.graphics.drawable.UrlDrawable.getFromRemote(UrlDrawable.java:984) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at com.htc.graphics.drawable。 UrlDrawable.access $ 800(UrlDrawable.java:71) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at com.htc.graphics.drawable.UrlDrawable $ WorkerCallable.call(UrlDrawable.java:776) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at com.htc.graphics.drawable.UrlDrawable $ WorkerCallable.call(UrlDrawable.java:710) 07-08 07:54:34.057:ERROR/UrlDrawable (1454):在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:306) 07-08 07:54:34.057:錯誤/ UrlDrawable(1454):在java.util.concurrent.FutureTask.run (FutureTask.java:138) 7月7日至8日:54:34.057:ERROR/UrlDrawable(1454):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecuto r.java:1088) 07-08 07:54:34.057:ERROR/UrlDrawable(1454):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:581) 07-08 07:54: 34.057:ERROR/UrlDrawable(1454):在java.lang.Thread.run(Thread.java:1027) 七月7日至8日:55:32.157:WARN /的ResourceType(1537):失敗獲取用於0x7f02027e條目(T = 1 (錯誤-2147483647) 07-08 07:55:32.157:WARN/ResourceType(1537):getEntry失敗,因爲entryIndex 335超出了類型entryCount 123 07-08 07:55:32.157:WARN/ResourceType(1537):無法獲取程序包0(錯誤-2147483647)中的0x7f02014f(t = 1 e = 335)條目 07-08 07:55:32.167:WARN/ResourceType(1537):getEntry失敗,因爲entryIndex 187超出類型entryCount 123 07-08 07:55:32.167:WARN/ResourceType(1537):失敗獲取e ntry for 0x7f0200bb(t = 1 e = 187)in package 0(error -2147483647) 07-08 07:55:32.177:WARN/ResourceType(1537):getEntry失敗,因爲entryIndex 638超出了類型entryCount 123 07-08 07:55:32.177:WARN /的ResourceType(1537):失敗獲取用於0x7f02027e條目中包0(T = 1個E = 638)(錯誤-2147483647) 7月7日至8日:55:32.177:WARN /的ResourceType(1537) :getEntry失敗,因爲entryIndex 335超出了類型entryCount 123 07-08 07:55:32.177:WARN/ResourceType(1537):無法獲取程序包0中0x7f02014f(t = 1 e = 335)的條目012her07-08 07:55:32.177:WARN /的ResourceType(1537):getEntry失敗,因爲entryIndex 187超出類型entryCount 123 07-08 7時55分32秒。177:WARN/ResourceType(1537):無法獲取程序包0(錯誤-2147483647)中0x7f0200bb(t = 1 e = 187)的條目 07-08 07:55:32.187:WARN/ResourceType(1537):getEntry失敗,因爲entryIndex 638超出類型entryCount 123

+0

如何讓我們看到崩潰日誌,以便我們至少可以知道在哪裏看? –

+0

'adb logcat'是你的朋友。它會顯示一個堆棧跟蹤,指向導致崩潰的確切行和源文件。 – flumpb

+0

有堆棧跟蹤將是有益的... – barmaley

回答

1

如果你上面的代碼是正確的,那麼EmailManager並不是一個活動,你在呼喚

startActivity(new Intent(MainActivity.this, EmailManager.class)); 

彷彿它是一個。你真的想要開始另一個活動,或者只是實例化一個新的類以供主Activity使用?

正如在評論中提到的,我建議你實際上給我們例外。遍歷(調試)代碼是你的朋友。

+0

這基本上是一個電子郵件客戶端,基本上顯示從Gmail,其中有3個文件命名account.java,EmailAuthenticator.java,Byte ArraySource.java的檢索電子郵件。所有的工作都是通過電子郵件Managaer.java完成的。有人建議我製作一個主要活動文件,並致電此電子郵件管理員來執行此項工作。所以根據你我做錯了什麼? – user832981

+0

Like Idistic說,你試圖開始一個活動,但根據你在這裏提供的代碼,EmailManager類不會擴展Activity類。活動對理解Android的工作原理非常重要,所以你最好閱讀[this](http://developer.android.com/guide/topics/fundamentals/activities.html)以瞭解它。 – THelper

+0

@ user832981好的,您正在嘗試啓動和活動,但您的EmailManager類不是像MainActivity那樣的活動。我同意@THelper你需要閱讀活動。如果你試圖完成一個長時間的運行(就android而言)任務,那麼你應該使用AsynchTask這樣的東西來完成這些類型的事情。 – Idistic