Java android MalformedURL异常
我收到一个错误:打开跟踪文件时出错:没有这样的文件或目录 java.net.malformedURLexception:找不到协议:cars.xml 我想在内部存储器中创建一个xml文件,并在列表视图中显示car_名称和car_模型 我的代码:Java android MalformedURL异常,java,android,xml,Java,Android,Xml,我收到一个错误:打开跟踪文件时出错:没有这样的文件或目录 java.net.malformedURLexception:找不到协议:cars.xml 我想在内部存储器中创建一个xml文件,并在列表视图中显示car_名称和car_模型 我的代码: public class MainActivity extends Activity { ListView listView; Button createCar; String XML_CONTENT = "<?xml version=\"1.0
public class MainActivity extends Activity {
ListView listView;
Button createCar;
String XML_CONTENT = "<?xml version=\"1.0\" encoding=\"utf-8\"?><cars><car><carMake></carMake><carModel></carModel><fuelType></fuelType><carYear></carYear><carColor></carColor><engineHp></engineHp><engineCcm></engineCcm></car></cars>";
static String myXML = "cars.xml";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] myCars = null;
fileCreate();
ParseXML parseXML= new ParseXML();
myCars = parseXML.giveCars(myXML);
listView = (ListView) findViewById(R.id.listView1);
if (myCars.length == 0 || myCars == null)
Toast.makeText(this, "Your car list is empty. Please create a new car!", 8000).show();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_view_row, R.id.textView1, myCars);
listView.setAdapter(adapter);
}
}
private void fileCreate() {
try {
FileOutputStream os = openFileOutput(myXML, MODE_PRIVATE);
os.write(XML_CONTENT.getBytes());
os.close();
Toast.makeText(MainActivity.this, "created", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(MainActivity.this, "NON created", Toast.LENGTH_LONG).show();
Log.i("ReadNWrite, fileCreate()", "Exception e = " + e);
}
}
公共类MainActivity扩展活动{
列表视图列表视图;
按钮车;
字符串XML_CONTENT=“”;
静态字符串myXML=“cars.xml”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
字符串[]myCars=null;
fileCreate();
ParseXML ParseXML=新的ParseXML();
myCars=parseXML.giveCars(myXML);
listView=(listView)findViewById(R.id.listView1);
如果(myCars.length==0 | | myCars==null)
Toast.makeText(此“您的汽车列表为空。请创建一辆新车!”,8000)。show();
ArrayAdapter=新的ArrayAdapter(这个,R.layout.list\u view\u行,R.id.textView1,myCars);
setAdapter(适配器);
}
}
私有void fileCreate(){
试一试{
FileOutputStream os=openFileOutput(myXML,模式\私有);
write(XML_CONTENT.getBytes());
os.close();
Toast.makeText(MainActivity.this,“created”,Toast.LENGTH_LONG.show();
}捕获(例外e){
Toast.makeText(MainActivity.this,“未创建”,Toast.LENGTH_LONG.show();
Log.i(“ReadNWrite,fileCreate()”,“Exception e=“+e”);
}
}
车辆功能:
public String[] giveCars(String cars) {
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(cars);
String[] carsInFile = null;
NodeList myCars = doc.getElementsByTagName("car");
Node myCar;
NodeList spec;
for (int i = 0; i < myCars.getLength(); i++) {
myCar = myCars.item(i);
spec = myCar.getChildNodes();
carsInFile[i] = spec.item(0).toString() + " "
+ spec.item(1).toString();
}
return carsInFile;
} catch (Exception e) {
android.util.Log.e("tag", "", e);
}
return null;
}
public static Object loadFile(String filename) {
Object object = null;
try {
Log.i("AppData.Load", "Trying to load file " + filename);
FileInputStream fis = ApplicationHelper.getAppContext()
.openFileInput(filename);
ObjectInputStream is = new ObjectInputStream(fis);
object = is.readObject();
is.close();
} catch (Exception e) {
Log.i("AppData.Load", "Exception " + e);
return null;
} catch (NoClassDefFoundError e) {
return null; // when on desktop mode
}
return object;
}
public String[]giveCars(String cars){
试一试{
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
文档doc=docBuilder.parse(cars);
字符串[]carsInFile=null;
NodeList myCars=doc.getElementsByTagName(“car”);
节点myCar;
节点列表规范;
对于(int i=0;i
如果在一个简单的java项目中运行这个函数,一切都会正常工作。您的openFileOutput函数可能有错误,但我不知道为什么。这里有一个小贴士可以让它变得更好。您可以保存对象的数组car,而不是保存xml文件。它优化了您的代码。查看此函数(对象需要可序列化): 要加载它,您有以下功能:
public String[] giveCars(String cars) {
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(cars);
String[] carsInFile = null;
NodeList myCars = doc.getElementsByTagName("car");
Node myCar;
NodeList spec;
for (int i = 0; i < myCars.getLength(); i++) {
myCar = myCars.item(i);
spec = myCar.getChildNodes();
carsInFile[i] = spec.item(0).toString() + " "
+ spec.item(1).toString();
}
return carsInFile;
} catch (Exception e) {
android.util.Log.e("tag", "", e);
}
return null;
}
public static Object loadFile(String filename) {
Object object = null;
try {
Log.i("AppData.Load", "Trying to load file " + filename);
FileInputStream fis = ApplicationHelper.getAppContext()
.openFileInput(filename);
ObjectInputStream is = new ObjectInputStream(fis);
object = is.readObject();
is.close();
} catch (Exception e) {
Log.i("AppData.Load", "Exception " + e);
return null;
} catch (NoClassDefFoundError e) {
return null; // when on desktop mode
}
return object;
}
您可以轻松地将数组从文件直接加载到arrayadapter中对不起,我粘贴错误,现在您已经编辑了。=)你写的是一个类,还是?错误:无法解析AplicationHelper。它只是我编写的一个类,用于获取应用程序所在位置的上下文。如果将此代码放在任何活动中,则可以获取应用程序上下文。否则,只需添加一个上下文参数并传递它即可。