Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read/write to external XML file in Android

I'm trying to learn more about reading/writing to an XML-file (as a kind of database) in Android. I can't seem to find anything about this so I guess I don't know what terms to look for.

My goal is to write usernames and passwords from two editText-fields into the file, then read them (and hopefully succeed validating them) later on when I am going to make a login function for my app.

The file I wish to read/write to is located on a server, so this makes it a bit complex for me.

If someone could help me find a tutorial about reading/writing to XML-files I would be very happy.

Thank you.

like image 278
Xantrax Avatar asked Nov 29 '12 17:11

Xantrax


People also ask

How can I write to external storage in Android?

The java.io package offers openFileOutput() method which returns the instance of FileOutputStream class to write the file in external storage of the device. To acquire a directory that's used by only your app by calling getExternalFilesDir(). To write the data into the file call the FileOutputStream . write() method.


1 Answers

Here is the code to write to XML file:

final String xmlFile = "userData";
String userNAme = "username";
String password = "password";
try {
    FileOutputStream fos = new  FileOutputStream("userData.xml");
    FileOutputStream fileos= getApplicationContext().openFileOutput(xmlFile, Context.MODE_PRIVATE);
    XmlSerializer xmlSerializer = Xml.newSerializer();              
    StringWriter writer = new StringWriter();
    xmlSerializer.setOutput(writer);
    xmlSerializer.startDocument("UTF-8", true);
    xmlSerializer.startTag(null, "userData");
    xmlSerializer.startTag(null, "userName");
    xmlSerializer.text(username_String_Here);
    xmlSerializer.endTag(null, "userName");
    xmlSerializer.startTag(null,"password");
    xmlSerializer.text(password_String);
    xmlSerializer.endTag(null, "password");             
    xmlSerializer.endTag(null, "userData");
    xmlSerializer.endDocument();
    xmlSerializer.flush();
    String dataWrite = writer.toString();
    fileos.write(dataWrite.getBytes());
    fileos.close();
}
catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

and to read data from XML File the do as below:

final String xmlFile = "userData";
ArrayList<String> userData = new ArrayList<String>();
try {
    fis = getApplicationContext().openFileInput(xmlFile);
    isr = new InputStreamReader(fis);
    inputBuffer = new char[fis.available()];
    isr.read(inputBuffer);
    data = new String(inputBuffer);
    isr.close();
    fis.close();
}
catch (FileNotFoundException e3) {
    // TODO Auto-generated catch block
    e3.printStackTrace();
}
catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
XmlPullParserFactory factory = null;
try {
    factory = XmlPullParserFactory.newInstance();
}
catch (XmlPullParserException e2) {
    // TODO Auto-generated catch block
    e2.printStackTrace();
}
factory.setNamespaceAware(true);
XmlPullParser xpp = null;
try {
    xpp = factory.newPullParser();
}
catch (XmlPullParserException e2) {
    // TODO Auto-generated catch block
    e2.printStackTrace();
}
try {
    xpp.setInput(new StringReader(data));
}
catch (XmlPullParserException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
int eventType = 0;
try {
    eventType = xpp.getEventType();
}
catch (XmlPullParserException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
while (eventType != XmlPullParser.END_DOCUMENT){
    if (eventType == XmlPullParser.START_DOCUMENT) {
        System.out.println("Start document");
    }
    else if (eventType == XmlPullParser.START_TAG) {
        System.out.println("Start tag "+xpp.getName());
    }
    else if (eventType == XmlPullParser.END_TAG) {
        System.out.println("End tag "+xpp.getName());
    }
    else if(eventType == XmlPullParser.TEXT) {
        userData.add(xpp.getText());
    }
    try {
        eventType = xpp.next();
    }
    catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
String userName = userData.get(0);
String password = userData.get(1);
like image 151
Husam A. Al-ahmadi Avatar answered Oct 16 '22 05:10

Husam A. Al-ahmadi