2013-11-01 45 views
0

我得到一个错误:错误打开跟踪文件:未发现协议: java.net.malformedURLexception没有这样的文件或目录cars.xml安卓MalformedURL例外

我想创建内部存储XML文件并在列表视图中显示car_name和car_model。

我的代码:

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); 
    } 
} 

的giveCars功能:

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; 
} 

如果在一个简单的Java项目,一切工作正常运行此功能。

回答

0

你可能在你的openFileOutput函数中有错误,但我不知道为什么。这里有一个提示,让它变得更好。您可以保存和排列对象汽车而不是保存xml文件。它优化了你的代码。看看这个功能(对象需要是可序列化)

public static void saveFile(String filename, Object object) { 
     try { 
      FileOutputStream fos = AplicationHelper.getAppContext() 
        .openFileOutput(filename, Context.MODE_PRIVATE); 
      ObjectOutputStream os = new ObjectOutputStream(fos); 
      os.writeObject(object); 
      os.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

,并加载它,你有这样的功能:

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很容易

+0

这些是相同的功能? – Student22b

+0

对不起,我粘贴错了,现在你已经编辑了。 =)在这里可以正常工作 –

+0

aplicationHelper是你写的一个类,或者?错误:AplicationHelper无法解析 – Student22b