[英]How to get a XML file from assets via a thread in Android?
这是我的情况。
我有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)
第43行is = context.getAssets().open(fileName);
在我的getXmlFromFile()
方法中
另外,我确定文件存在于Assets文件夹中。 我在哪里出错?
当您定义资产的路径时,只写资产子文件夹的路径。
如果您在以下位置有xml文件:
assets/android_asset/weather_conditions.xml
因此文件路径应为:
String filePath = "android_asset/weather_conditions.xml";
顺便说一句,您的代码中有帮助器:
is = context.getAssets().open(fileName);
context.getAssets()
表示打开assets
文件夹并在其中找到路径。
如果我没记错的话,您可以只说以下内容,而不要包含“ file:/// ...”部分。
String filePath = "weather_conditions.xml";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.