安卓应用找不到文件

标签 android xml filenotfoundexception domparser

我正在开发我的第一个 Android 应用程序,我正在尝试使用 DOM 解析器解析 XML 文件。我正在使用绝对文件路径,但编译器仍然找不到我的文件,我不确定为什么。

这是 LogCat 给我的消息。 (注意:我使用的是 Mac。)

03-10 11:52:16.427: W/System.err(929): java.io.FileNotFoundException: /Users/leedownen/Desktop/AndroidApp/AssignmentGrabber/src/mus/school/tools/assignmentsbystudent.xml (No such file or directory)

    package mus.school.tools;
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.widget.TextView;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Node;
    import org.w3c.dom.Element;
    import java.io.File;


    public class AssignmentGrabberActivity extends Activity  {
    class Async extends AsyncTask<String, Void, String>
    {

        private String results = "";

        @Override
        protected String doInBackground(String... url) {
            String myURL = url[0];

            try  {

                    File fXmlFile = new File(myURL);
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(fXmlFile);
                    doc.getDocumentElement().normalize();

                    //System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
                    NodeList nList = doc.getElementsByTagName("staff");
                    //System.out.println("-----------------------");

                    for (int temp = 0; temp < nList.getLength(); temp++) {

                       Node nNode = nList.item(temp);
                       if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                          Element eElement = (Element) nNode;

                        results = results + "\n" + ("Class : " + getTagValue("ClassName", eElement)) + 
                          ("Period : " + getTagValue("period", eElement))
                             + ("Day : " + getTagValue("Day", eElement));
                       }
                    }
                  } 
             catch (Exception e) 
             {
                 e.printStackTrace();
             }

             return results;

        }

         @Override
        protected void onPostExecute(String results) 
        {
            this.results = results;
        }


         private String getTagValue(String sTag, Element eElement) 
         {
                NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

                    Node nValue = (Node) nlList.item(0);

                return nValue.getNodeValue();
        }


        public String getResults()
        {
            return results;

        }
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = new TextView(this);

        Async myAsync = new Async();
        myAsync.execute("/Users/leedownen/Desktop/AndroidApp/AssignmentGrabber/src/mus/school/tools/assignmentsbystudent.xml");

        tv.setText(myAsync.getResults());
        setContentView(tv);

    }   

}

最佳答案

我不明白如何在 Android 应用程序中使用桌面的绝对文件路径? 模拟器和您的手机都无法从应用程序中访问该文件,因此从逻辑上讲它不起作用。

您应该将您的文件添加到 res 目录或 assets 目录并学习访问它们。

此外,您错误地使用了 AsyncTask。您无法在 onCreate 中获取结果,因为您启动了后台任务,并立即尝试获取结果。您还应该在 AsyncTaskonPostExecute 方法中设置该文本。这将在任务完成后运行。

关于安卓应用找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9648872/

相关文章:

c# - 从 observablecollection 中删除项目使 XML 序列化更新失败

php - xslt 1.0 base64 编码模板的内容

java - 当我的文件确实存在时,出现文件未找到异常

android - CSS @media 查询未检测到 Droid 2

javascript - 将鼠标移动改为触摸控制

xml - 使用 IXMLDocument 在 XML 中搜索数据

asp.net - ASP.NET 中的 C++/CLI 组件出现 "module could not be found"错误

java - 读取文件时出错(Java)

android - 如何从 kotlin 中的 ArrayList 中删除所有项目

android - 不编译Svg image Loader的库文件