Codenameone 如何通过电子邮件发送代号为1的.csv文件?

Codenameone 如何通过电子邮件发送代号为1的.csv文件?,codenameone,Codenameone,在我的应用程序中,我通过写入OutputStream来创建一个带有逗号分隔数组的文件。然后,我希望能够通过电子邮件共享此信息,以便用户可以获取数据。这是我用来创建文件的代码: public String getLogFile(String logName) { String path = FileSystemStorage.getInstance().getAppHomePath() + "exp " + logName + ".csv"; Set<Long>

在我的应用程序中,我通过写入OutputStream来创建一个带有逗号分隔数组的文件。然后,我希望能够通过电子邮件共享此信息,以便用户可以获取数据。这是我用来创建文件的代码:

    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;
}
按下时(在模拟器中)。选择要发送到的虚拟电子邮件联系人后,我获得此堆栈:

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)
java.lang.NullPointerException
位于com.codename1.impl.javase.JavaSEPort.scale(JavaSEPort.java:3483)
位于com.codename1.ui.Image.scale(Image.java:963)
在com.codename1.ui.Image.scaledImpl上(Image.java:933)
位于com.codename1.ui.Image.scaled(Image.java:898)
位于com.codename1.impl.javase.JavaSEPort$60.save(JavaSEPort.java:6693)
在com.codename1.share.ShareForm(ShareForm.java:75)
在com.codename1.share.EmailShare$1$2$1.actionPerformed(EmailShare.java:102)
位于com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:455)
位于com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:358)
位于com.codename1.ui.List.fireActionEvent(List.java:1532)
com.codename1.ui.List.pointerReleasedImpl(List.java:2011)
位于com.codename1.ui.List.pointerReleased(List.java:2021)
位于com.codename1.ui.Form.pointerReleased(Form.java:2560)
位于com.codename1.ui.Component.pointerReleased(Component.java:3108)
位于com.codename1.ui.Display.handleEvent(Display.java:2017)
在com.codename1.ui.Display.edtlopimpl(Display.java:1065)上
位于com.codename1.ui.Display.mainEDTLoop(Display.java:994)
位于com.codename1.ui.runnablerrapper.run(runnablerrapper.java:120)
位于com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

看起来Messages类更适合此任务,应该允许附件等。

EmailShare类的第二个参数是图像文件的路径,而不是任意文件,因此加载失败


消息
类确实更适合这样做。您还可以使用云发送选项,该选项不会启动本机电子邮件应用程序。例如,
Log
类包括直接通过
Log.sendLog
API实现的能力

是的,谢谢你的回复。我确实发现了Message类,并且能够从中获得所需的功能。
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)