【发布时间】:2016-12-14 15:16:40
【问题描述】:
我正在尝试使用需要解析的 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");
应用程序说它找不到这个文件。
这是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 文件吗?
所以现在我的 Activity 看起来像这样:
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
【问题讨论】:
标签: android xml xml-parsing