【问题标题】:How to get a XML file from assets via a thread in Android?如何通过Android中的线程从资产中获取XML文件?
【发布时间】:2013-09-19 07:53:24
【问题描述】:

这是我的场景。

我有MainActivity.java,我在其中调用这样的线程

private void callXMLParserThread() {

    String filePath = "file:///android_asset/weather_conditions.xml";
    parserThread = new XMLParserThread(context, filePath);
    parserThread.start();

}

这是我的XMLParserThread.java

public class XMLParserThread extends Thread {

Context context;
String fileName;
XMLParser xmlParser;

public XMLParserThread(Context context, String fileName) {

    this.context = context;
    this.fileName = fileName;
}

@Override
public void run() {

    xmlParser = new XMLParser();

    String xmlResponse = null;
    try {
        xmlResponse = xmlParser.getXmlFromFile(context, fileName);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Log.d("xmlResponse", xmlResponse + "");

    super.run();
}

}

注意: 在 run() 方法中,我正在调用另一个方法 getXmlFromFile() 驻留在 XMLParser.java

现在这是我的getXmlFromFile() 方法。

public String getXmlFromFile(Context context, String fileName) throws IOException {

    Log.e("fileName", fileName);

    InputStream is = null;
    try {
        is = context.getAssets().open(fileName);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    BufferedInputStream bis = new BufferedInputStream(is);
    ByteArrayOutputStream buf = new ByteArrayOutputStream();
    int result = bis.read();
    while(result != -1) {
      byte b = (byte)result;
      buf.write(b);
      result = bis.read();
    }        
    return buf.toString();
}

问题

当我执行代码时,它会抛出 java.io.FileNotFoundException: file:///android_asset/weather_conditions.xml at xml.parser.XMLParser.getXmlFromFile(XMLParser.java:43)

在我的 getXmlFromFile() 方法中,第 43 行是 is = context.getAssets().open(fileName);

另外,我确定该文件存在于资产文件夹中。我在哪里做错了?

【问题讨论】:

标签: java android multithreading xml-parsing


【解决方案1】:

当你从资产定义路径时,只写资产子文件夹的路径。

如果你在下面有xml文件:

assets/android_asset/weather_conditions.xml

所以文件路径应该是:

String filePath = "android_asset/weather_conditions.xml";

顺便说一句,你的代码中有助手:

is = context.getAssets().open(fileName);

context.getAssets() 表示打开assets 文件夹并找到那里的路径。

【讨论】:

    【解决方案2】:

    如果我没记错的话,你可以在下面说没有“file:///...”部分。

    String filePath = "weather_conditions.xml";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2014-03-10
      相关资源
      最近更新 更多