我还没有在Stackoverflow的其他线程中找到一个断言响应。
有很多方法可以从sdcard中标注xml,但是我收到了同样的错误。我不明白为什么会这样。
1)这是我正在使用的方法:
public XmlPullParser xmlVectorFromResource() throws FileNotFoundException, IOException {
try {
String data;
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
File file = new
// testing loading a .xml from DCMI
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "/cityscape.xml");
FileInputStream fis = new FileInputStream(file.getPath());
InputStreamReader isr = new InputStreamReader(fis);
char[] InputBuffer = new char[fis.available()];
isr.read(InputBuffer);
data = new String(InputBuffer);
isr.close();
fis.close();
XmlPullParser xpp = null;
xpp = factory.newPullParser();
xpp.setInput(new StringReader(data));
return xpp;
} catch (XmlPullParserException ex) {
ex.printStackTrace();
}
return null;
}
2)这是我正在尝试的矢量。这是一个有效的(我从res / drawables测试): http://beetxt.com/N4c
3)这就是我调用方法的方法:
XmlPullParser drawable = null;
try {
drawable = xmlVectorFromResource();
} catch (IOException e) {
e.printStackTrace();
}
if (drawable != null) {
try {
mImageview.setImageDrawable(VectorDrawableCompat
.createFromXml(holder.cardView.getResources()
, drawable));
} catch (XmlPullParserException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
} else {
Log.d(TAG, "Wapawm, problems");
}
4)这是我收到的错误: http://www.beetxt.com/ape/
我希望有一个解决方案。
提前致谢。
更新
现在我重新启动aplication并收到一个新错误。 LOL
这就是我收到的内容:java.lang.ClassCastException:android.util.XmlPullAttributes无法强制转换为android.content.res.XmlBlock $ Parser
这是一个测试项目,您可以在其中看到错误github.com/denebchorny/vectorxmltest/tree/master
答案 0 :(得分:0)
使用调用createFromXml无法从SD卡加载xml。此调用适用于res或drawable文件夹中的XML文件。它不起作用的原因是当我们创建apk时,矢量XML被转换为二进制格式get和createFromXml理解改变了二进制格式。
如果要从SDCard加载矢量,一种解决方案可能是创建具有此矢量文件的PDF。在SDCard上放置该PDF并使用PDFRenderer类打开它以在位图中呈现页面。这样您就可以获得所需大小的缩放位图。但是这只能在API 21之后才能使用,因为在API21中添加了PdfRenderer类。到目前为止,PdfRenderer还没有compat库。