我正在尝试使用我需要解析的xml文件,但如果我将此文件手动复制到路径上的模拟器(API级别24)中,我只能使用它:/mnt/sdcard
我需要将这个文件放到我的应用程序的.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);
但我想更改此文件的位置,因为我希望它在App。
中如果我尝试:
public static File xml = new File("/res/xml/metro.xml");
App说无法找到此文件。
这是应用权限在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
答案 0 :(得分:0)
您可以使用assets
文件夹并将其放在那里。要访问File
,请像这样使用
InputStream is = getResources().getAssets().open("yourFile.xml");