Java android MalformedURL异常

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

我收到一个错误:打开跟踪文件时出错:没有这样的文件或目录 java.net.malformedURLexception:找不到协议:cars.xml

我想在内部存储器中创建一个xml文件,并在列表视图中显示car_名称和car_模型

我的代码:

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。它只是我编写的一个类,用于获取应用程序所在位置的上下文。如果将此代码放在任何活动中,则可以获取应用程序上下文。否则,只需添加一个上下文参数并传递它即可。