我正在嘗試使用xml文件,我需要解析,但是如果我手動將此文件複製到我的模擬器(API級別24)路徑中,我只能使用它: /mnt/sdcard
如何在資源中使用android中的xml文件
我需要這個文件到.apk
我的應用程序,所以我試圖從我的項目的/ res文件夾中使用它,因爲我明白這個文件最終也會包含在.apk
中。
這是我如何使用這個文件現在從sdcard
:
public static File xml = new File("/mnt/sdcard/metro.xml");
public static Parser parser = new Parser();
public static Metro miMetro = parser.parsearMetro(xml);
但我想改變這個文件的位置,因爲我希望它是內部應用程序。
如果我嘗試:
public static File xml = new File("/res/xml/metro.xml");
應用程序說,它無法找到該文件。
這是應用程序的權限如何看起來像到AndroidManifest.xml
:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
是否有人知道我可以包含這個文件到最終.apk
沒有改變我的方法,並在內部使用它,而複製我的XML文件中的每個設備?
所以現在我的活動看起來是這樣的:
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.miguel.metromadappcesible.code.Metro;
import com.miguel.metromadappcesible.code.Parser;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class IndexActivity extends AppCompatActivity {
public static Parser parser = new Parser();
public static Metro miMetro;
public IndexActivity() throws IOException {
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
try {
this.crearFicheroXML(getAssets().open("metro.xml"));
} catch (IOException e) {
e.printStackTrace();
}
File xml = new File ("/mnt/sdcard/metroMadrid.xml");
miMetro = parser.parsearMetro(xml);
}
public void crearFicheroXML (InputStream inputStream){
OutputStream outputStream = null;
try {
// read this file into InputStream
inputStream = getResources().getAssets().open("metro.xml");
// write the inputStream to a FileOutputStream
outputStream =
new FileOutputStream(new File("/mnt/sdcard/metroMadrid.xml"));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
// outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
而且我從控制檯此錯誤: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
隨着我收到'InputStream'對象,我用一個文件對象在我的方法: '公共靜態地鐵miMetro = parser.parsearMetro(XML);' 而且我不能使用靜態引用,我想使用這些線在其他類中創建的Metro對象。 –
@MiguelMG在這種情況下,你必須在SD卡路徑中創建一個新的'File',例如[這樣的事情](http://stackoverflow.com/questions/11820142/how-to-pass-a-file-path-which-is-in-assets-folder-to-filestring-path) –
但這是不會在'.apk'不是? –