2016-01-23 14 views
2

在我的應用程序中,我通過寫入OutputStream來創建一個帶逗號分隔數組的文件。然後,我希望能夠通過電子郵件分享此信息,以便用戶可以獲取數據。這是我用來創建該文件的代碼:如何在Codename One中通過電子郵件發送.csv文件?

public String getLogFile(String logName) { 
    String path = FileSystemStorage.getInstance().getAppHomePath() + "exp " + logName + ".csv"; 
    Set<Long> keys; 
    OutputStream os = null; 
    try { 
     os = FileSystemStorage.getInstance().openOutputStream(path); 
     Hashtable<Long, Integer> log = (Hashtable<Long, Integer>) dataStorage 
       .readObject(logName); 
     keys = log.keySet(); 
     for (Long key : keys) { 
      String outString = (key + "," + log.get(key) + "\n"); 
      System.out.println(outString); 
      byte[] buffer = outString.getBytes(); 
      os.write(buffer); 
     } 

    } catch (IOException e) { 
     AnalyticsService.sendCrashReport(e, "Error writing log", false); 
     e.printStackTrace(); 
    } finally { 
     try { 
      os.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
    return path; 
} 

然後,我創建了一個按鈕,當按下時傳遞文件的路徑以便共享。我試過使用諸如「text/plain」和「text /逗號分隔值」之類的MIME類型,但這會導致錯誤。這是按下按鈕時執行的代碼。

 public void exportLog(String logName) { 
     String path = dataBuffer.getLogFile(logName); 
     EmailShare email = new EmailShare(); 
//  email.share("Here is your log.", path, "text/plain"); 
     email.share("Here is your log.", path, "text/comma-separated-values"); 
    } 

當按下時(在模擬器中)。我得到這個堆棧中選擇虛擬電子郵件聯繫後,發送至:

java.lang.NullPointerException 
at com.codename1.impl.javase.JavaSEPort.scale(JavaSEPort.java:3483) 
at com.codename1.ui.Image.scale(Image.java:963) 
at com.codename1.ui.Image.scaledImpl(Image.java:933) 
at com.codename1.ui.Image.scaled(Image.java:898) 
at com.codename1.impl.javase.JavaSEPort$60.save(JavaSEPort.java:6693) 
at com.codename1.share.ShareForm.<init>(ShareForm.java:75) 
at com.codename1.share.EmailShare$1$2$1.actionPerformed(EmailShare.java:102) 
at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:455) 
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:358) 
at com.codename1.ui.List.fireActionEvent(List.java:1532) 
at com.codename1.ui.List.pointerReleasedImpl(List.java:2011) 
at com.codename1.ui.List.pointerReleased(List.java:2021) 
at com.codename1.ui.Form.pointerReleased(Form.java:2560) 
at com.codename1.ui.Component.pointerReleased(Component.java:3108) 
at com.codename1.ui.Display.handleEvent(Display.java:2017) 
at com.codename1.ui.Display.edtLoopImpl(Display.java:1065) 
at com.codename1.ui.Display.mainEDTLoop(Display.java:994) 
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 

回答

2

EmailShare類預計圖像文件的路徑不是任意文件作爲其第二個參數,因此加載失敗。

Message類更適合那個。您還可以使用不會啓動本機電子郵件應用程序的雲端發送選項。例如。 Log類可以直接通過Log.sendLog API包含該能力。

+0

是的,謝謝你的回覆。我確實發現了Message類,並能夠從中獲得所需的功能。 –

2

它看起來像Messages類更適合這項任務,並應允許附件等

相關問題