2013-12-17 155 views
-2

我需要從我的xml文件夾中讀取xml文件,但我是getting no such file錯誤。任何人都可以告訴我如何從android的xml文件夾讀取XML文件?從xml文件夾讀取文件Android

這裏是我的代碼:

InputSource inputSource = new InputSource(getResources().openRawResource(
       getResId("R.xml." + fileName.substring(0,fileName.length() - 4), 
       AlbumDetails.class))); 

而且logcat的輸出:

12-17 14:32:59.513: W/System.err(3563): java.lang.NoSuchFieldException: R.xml.quran_simple 
12-17 14:32:59.513: W/System.err(3563):  at java.lang.Class.getDeclaredField(Class.java:631) 
12-17 14:32:59.513: W/System.err(3563):  at com.darkovski.quran.AlbumDetails.getResId(AlbumDetails.java:250) 
12-17 14:32:59.513: W/System.err(3563):  at com.darkovski.quran.AlbumDetails$3.doInBackground(AlbumDetails.java:282) 
12-17 14:32:59.513: W/System.err(3563):  at com.darkovski.quran.AlbumDetails$3.doInBackground(AlbumDetails.java:1) 
12-17 14:32:59.513: W/System.err(3563):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
12-17 14:32:59.513: W/System.err(3563):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
12-17 14:32:59.513: W/System.err(3563):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
12-17 14:32:59.513: W/System.err(3563):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
12-17 14:32:59.513: W/System.err(3563):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
12-17 14:32:59.513: W/System.err(3563):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
12-17 14:32:59.513: W/System.err(3563):  at java.lang.Thread.run(Thread.java:856) 
12-17 14:32:59.513: W/ResourceType(3563): No known package when getting value for resource number 0xffffffff 
12-17 14:32:59.513: W/dalvikvm(3563): threadid=16: thread exiting with uncaught exception (group=0x2b542210) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): 17-12-13 14:32:59:524 Unexpected problem on thread AsyncTask #3: An error occured while executing doInBackground() 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): 17-12-13 14:32:59:530 java.lang.RuntimeException: An error occured while executing doInBackground() 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at java.lang.Thread.run(Thread.java:856) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at android.content.res.Resources.getValue(Resources.java:1018) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at android.content.res.Resources.openRawResource(Resources.java:943) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at android.content.res.Resources.openRawResource(Resources.java:925) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at com.darkovski.quran.AlbumDetails$3.doInBackground(AlbumDetails.java:281) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at com.darkovski.quran.AlbumDetails$3.doInBackground(AlbumDetails.java:1) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
12-17 14:32:59.523: E/Burstly SDK v.1.34.0.46238 BackgroundUncaughtExceptionHandler(3563): ... 5 more 

回答

0

,如果你需要一個InputStream出它簡單地把XML轉換成原始資源和打開它

InputStream inputStream = getResources().openRawResource(R.raw.fileName);

+0

這是否意味着我應該將文件移動到'raw'文件夾? –

+0

是的。你試圖從那裏訪問 –

+0

是的,如果你想這樣...否則你可以嘗試我的答案.. –

0

在res /文件夾中的所有XML文件是預編譯,而在資產/文件夾中,他們都沒有。

所以用這個你想從res文件夾

XmlResourceParser xrp = ctx.getAssets().openXmlResourceParser("res/xml/castle1.tmx"); 

其他解析它 使用可以使用

InputStream object = this.getResources() 
       .openRawResource(R.raw.fileName); 
-1
InputStream is = getResources().getAssets().open("abc.txt"); 
String result= convertStreamToString(is); 

public static String convertStreamToString(InputStream is) 
     throws IOException { 
     Writer writer = new StringWriter(); 
    char[] buffer = new char[2048]; 
    try { 
     Reader reader = new BufferedReader(new InputStreamReader(is, 
       "UTF-8")); 
     int n; 
     while ((n = reader.read(buffer)) != -1) { 
      writer.write(buffer, 0, n); 
     } 
    } finally { 
     is.close(); 
    } 
    String text = writer.toString(); 
    return text; 
} 

在此代碼中..而不是「assests」使用您的文件夾。