当前位置: 首页 > 知识库问答 >
问题:

按钮不创建文件,按下时显示电子邮件提供程序选项菜单

华萧迟
2023-03-14

我创建了一个按钮,创建一个文件,然后将其作为附件发送到电子邮件,它从一个文本视图中抓取文本,将其保存到. txt并发送。一个小的电子邮件服务选项选择器也应该出现。如果文件路径尚未存在,则该代码将用于创建文件路径。这个代码是在一个常规的活动中的oncreate方法之上。我一直在logcat中得到这个(由(-

-->08-06 12:53:01.019  18432-18432/com.example.adrian.trucktracker W/System.err﹕ java.io.IOException: open failed: ENOENT (No such file or directory)<---
08-06 12:53:01.019  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.io.File.createNewFile(File.java:946)
08-06 12:53:01.019  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at com.example.adrian.trucktracker.Locator.clickedUpdate(Locator.java:76)
08-06 12:53:01.019  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-06 12:53:01.019  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.view.View$1.onClick(View.java:3860)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.view.View.performClick(View.java:4480)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.view.View$PerformClick.run(View.java:18686)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.os.Looper.loop(Looper.java:157)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5872)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:668)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at libcore.io.Posix.open(Native Method)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.io.File.createNewFile(File.java:939)
08-06 12:53:01.029  18432-18432/com.example.adrian.trucktracker W/System.err﹕ ... 15 more

我的代码:

    public void clickedUpdate(View view)
        {
            TextView dLong = (TextView) findViewById (R.id.textLong);
            TextView dLat = (TextView) findViewById (R.id.textLat);
            String dataLat = dLat.getText().toString();
            String dataLong = dLong.getText().toString();
            boolean UpdateResume;
            if(!(dataLat.equals("") && !(dataLong.equals(""))))
            {
                UpdateResume = true;
            }
            else
            {
                UpdateResume = false;
            }
            TelephonyManager telephonemanager =(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
            String PhoneNumber = telephonemanager.getLine1Number();
            File DataDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"/LocationData");
            if(!DataDir.exists())
            {
                try
                {
                    DataDir.mkdir();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
            File Data = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"data" + File.separator+"Locationer.txt");
            String datapath = Data + ""
            if(!Data.exists())
            {
                try {
line 76 ---->    Data.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                while (UpdateResume = true)
                {
    if (Data.exists())
                    {
                        try
                        {
                            FileWriter fileWriter = new FileWriter(Data);
                            BufferedWriter bfWriter = new BufferedWriter(fileWriter);
                            bfWriter.write(PhoneNumber + "," + dataLat + "," + dataLong);
                            bfWriter.close();
                        }
                        catch (IOException e)
                        {
                            e.printStackTrace();
                        }
                    }
                    break;
                }
            }
            Intent emailintent = new Intent(Intent.ACTION_SEND);
            emailintent.setType("text/plain");
            emailintent.putExtra(Intent.EXTRA_EMAIL, new String[]{"apraiswater@legion-logistics.com"});
            emailintent.putExtra(Intent.EXTRA_SUBJECT, "Data");
            emailintent.putExtra(Intent.EXTRA_TEXT, "Hello World!");
            File root = Environment.getExternalStorageDirectory();
            String DataAttachment = "Android/data/Locationer.txt";
            File filer = new File(root, DataAttachment);
            if (!filer.exists() || filer.canRead())
            {
                return;
            }
            Uri uri = Uri.fromFile(filer);
            emailintent.putExtra(Intent.EXTRA_STREAM, uri);
            startActivity(Intent.createChooser(emailintent, "Choose an Email provider"));
    }

共有1个答案

壤驷彦
2023-03-14

一些细节似乎是相关的:

首先检查dir是否存在:

        File DataDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"/LocationData");
        if(!DataDir.exists())
        {
            try
            {
                DataDir.mkdir();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }

根据留档,不需要你的try{}cat(异常e){}。您只需要检查目录是否实际存在。还有一个额外的问题,您似乎创建了另一个子目录的子目录。因此,您可能希望将其交换为mkdirs()

之后,如果文件不存在,则尝试创建该文件

   try {
line 76 ---->    Data.createNewFile();
   } catch (IOException e) {
           e.printStackTrace();
   }

看看这个方法的留档。你可能会注意到它告诉你

这种方法通常不有用。要创建临时文件,请改用createTempFile(字符串,字符串)。要读取/写入文件,请使用FileInputStream、FileOutputStream或RandomAccessFile,所有这些都可以创建文件。

但是,如果您已经包含了适当的权限,我上面建议的更改可能会有助于您的代码正常工作。

 类似资料:
  • 我最近开始创建电子邮件模板,遇到了一些问题,我找不到任何解释。 我从buttons.cm生成按钮时希望它们是防弹的,虽然它们对大多数客户端都很好,但在基于web的outlook客户端上却失败了。 结果如下所示(稍有修改,稍后解释) 我的目标是: 工作版本的屏幕截图 但我得到的所有基于浏览器的outlook客户端的信息是: 失败版本的屏幕快照 问题是在失败的版本中 单元格填充失败 按钮不再是链接,实

  • 我有一个关于Strapi电子邮件插件的问题。我想使用Nodemailer。当我用邮递员测试它时,我得到了错误500。我是否用错误的格式编写了PostScript JSON? 提前感谢! 本杰明

  • pre { white-space: pre-wrap; } 菜单按钮(Menu Button)包含一个按钮(button)和一个菜单(menu)组件,当点击或移动鼠标到按钮上,将显示一个对应的菜单。 为了定义一个菜单按钮(Menu Button),您应该定义一个链接按钮(Link Button)和一个菜单(menu),下面是一个实例:     <div>         <a href="#"

  • 当我尝试发送电子邮件意图时,无论我是否使用意图。ACTION\u发送或操作。发送并使用Sony Xperia Active电子邮件客户端,主题和收件人显示良好,但正文为空,只有客户端粘贴的标准注释除外。在我的三星Galaxy Note 2上,同样的代码也很有魅力。

  • 我的菜单显示向下,但然后水平。 我希望每一个导航项目都显示下来,在彼此的上面。 现场测试站点URL:ministerios-elim.herokuapp.com CodePen:(无法使菜单在单击CodePen时出现)。 https://codepen.io/ogonzales/pen/abnqxlg 更新2: 更新3:

  • 我一直在研究如何使用HTML5