2016-08-13 47 views
0

我還沒有在Stackoverflow的其他線程中找到自信的響應。如何在Android上從SdCard解析矢量XML

有很多方法可以從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測試/繪項目): http://beetxt.com/N4c

3)這是怎麼了callind方法:

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/

我希望有一個解決方案。

在此先感謝。

UPDATE
現在我重新啓動aplication和接收新的錯誤。 LOL

這是我收到什麼:java.lang.ClassCastException:android.util.XmlPullAttributes不能轉換到android.content.res.XmlBlock $分析器

下面是一個測試項目,你可以看到錯誤github.com/denebchorny/vectorxmltest/tree/master

+0

錯誤信息是什麼樣的? –

+0

@ vtd-xml-author對不起,延遲。我在這裏發佈錯誤:http://www.beetxt.com/ape/,但本質上是W/System.err:org.xmlpull.v1.XmlPullParserException:找不到開始標記。我正在使用有效的向量。我測試過了。可能是什麼? –

+0

我需要這樣加載一個向量,因爲我試圖從sdcard加載它並通過路徑檢查路徑來查找和比較特定的TAG。 –

回答

0

無法使用調用createFromXml從SDcard加載xml。此調用適用於res或drawable文件夾中的XML文件。它不工作的原因是,當我們創建apk時,矢量XML被轉換爲二進制格式get和createFromXml,理解改變後的二進制格式。

如果你想從SDCard加載一個矢量,一個解決方案可能是創建一個帶有這個矢量文件的PDF。在PDF文件中打開PDF並使用PDFRenderer類打開它,以便在頁面中顯示頁面。這樣你可以得到所需大小的縮放位圖。但是這隻能在API 21或更高版本之後作爲PdfRenderer類添加到API21中才能使用。截至目前,還沒有PdfRenderer的compat庫。

+0

謝謝。實際上有一種方法可以通過HTTP REQUEST加載Vector。很快我會發布和示例。我正在考慮嘗試創建一個LOCAL HTTP REQUEST(如果可能,請使用IDK)來加載XML。 或者使用Unity或其他工具來開發支持向量的交叉平臺。你知道任何支持它的工具嗎? –

+0

對不起,我沒有探討過,也不知道。一旦你準備好了一個例子,請分享這篇文章。 –