Reputation: 31
I am trying to write an Android application that can write data to an XML file stored on the sd card. All seems to work well, but my XML file gets cut off at exactly 1000 bytes. Here is the code:
package brochard.chad.fieldReport;
import java.io.FileWriter;
import java.io.Serializable;
import java.io.StringWriter;
import org.xmlpull.v1.XmlSerializer;
import android.database.Cursor;
import android.os.Environment;
import android.util.Log;
import android.util.Xml;
public class XMLWriter implements Serializable {
private String filename;
XmlSerializer serializer = Xml.newSerializer();
private StringWriter output = new StringWriter(100);
FieldReportDBAdapter dbA;
static final long serialVersionUID = 0;
public XMLWriter (String _filename){
filename = _filename;
}
public boolean beginXMlreport(Cursor cursor) {
try {
serializer.setOutput(output);
serializer.startDocument("UTF-8", false);
serializer.setPrefix("w", "http://schemas.microsoft.com/office/word/2003/wordml");
serializer.startTag("w", "wordDocument");
serializer.startTag("w", "styles");
serializer.startTag("w", "style");
serializer.attribute("w", "type", "paragraph");
serializer.attribute("w", "styeId", "ReportHeading");
serializer.startTag("w", "name");
serializer.attribute("w", "val", "Heading");
serializer.endTag("w", "name");
serializer.startTag("w", "pPr");
serializer.startTag("w", "jc");
serializer.attribute("w", "val", "center");
serializer.endTag("w", "jc");
serializer.endTag("w", "pPr");
serializer.startTag("w", "rPr");
serializer.startTag("w", "b");
serializer.attribute("w", "val", "on");
serializer.endTag("w", "b");
serializer.startTag("w", "sz");
serializer.attribute("w", "val", "48");
serializer.endTag("w", "sz");
serializer.endTag("w", "rPr");
serializer.endTag("w", "style");
serializer.startTag("w", "style");
serializer.attribute("w", "type", "paragraph");
serializer.attribute("w", "styleId", "SubHeading");
serializer.startTag("w", "name");
serializer.attribute("w", "val", "SubHeading");
serializer.endTag("w", "name");
serializer.startTag("w", "pPr");
serializer.startTag("w", "jc");
serializer.attribute("w", "val", "left");
serializer.endTag("w", "jc");
serializer.endTag("w", "pPr");
serializer.startTag("w", "rPr");
serializer.startTag("w", "b");
serializer.attribute("w", "val", "on");
serializer.endTag("w", "b");
serializer.startTag("w", "sz");
serializer.attribute("w", "val", "36");
serializer.endTag("w", "sz");
serializer.endTag("w", "rPr");
serializer.endTag("w", "style");
serializer.startTag("w", "style");
serializer.attribute("w", "type", "paragraph");
serializer.attribute("w", "styleId", "Text");
serializer.startTag("w", "name");
serializer.attribute("w", "val", "Text");
serializer.endTag("w", "name");
serializer.startTag("w", "pPr");
serializer.startTag("w", "jc");
serializer.attribute("w", "val", "left");
serializer.endTag("w", "jc");
serializer.endTag("w", "pPr");
serializer.startTag("w", "rPr");
serializer.startTag("w", "b");
serializer.attribute("w", "val", "off");
serializer.endTag("w", "b");
serializer.startTag("w", "sz");
serializer.attribute("w", "val", "24");
serializer.endTag("w", "sz");
serializer.endTag("w", "rPr");
serializer.endTag("w", "style");
serializer.endTag("w", "styles");
serializer.startTag("w", "body");
serializer.startTag("w", "p");
serializer.startTag("w", "pPr");
serializer.startTag("w", "pStyle");
serializer.attribute("w", "val", "ReportHeading");
serializer.endTag("w", "pStyle");
serializer.endTag("w", "pPr");
serializer.startTag("w", "r");
serializer.startTag("w", "t");
serializer.text("Field Report");
serializer.startTag("w", "br");
serializer.endTag("w", "br");
serializer.endTag("w", "t");
serializer.endTag("w", "r");
serializer.endTag("w", "p");
serializer.startTag("w", "p");
serializer.startTag("w", "pPr");
serializer.startTag("w", "pStyle");
serializer.attribute("w", "val", "SubHeading");
serializer.endTag("w", "pStyle");
serializer.endTag("w", "pPr");
serializer.startTag("w", "r");
serializer.startTag("w", "t");
serializer.text("Project Title");
serializer.endTag("w", "t");
serializer.endTag("w", "r");
serializer.endTag("w", "p");
serializer.startTag("w", "p");
serializer.startTag("w", "pPr");
serializer.startTag("w", "pStyle");
serializer.attribute("w", "val", "Text");
serializer.endTag("w", "pStyle");
serializer.endTag("w", "pPr");
serializer.startTag("w", "r");
serializer.startTag("w", "t");
serializer.text("Owner: "+
cursor.getString(FieldReportDBAdapter.OWNER_COLUMN));
serializer.startTag("w", "br");
serializer.endTag("w", "br");
serializer.text("High Temp: "+
cursor.getString(FieldReportDBAdapter.HIGHTEMP_COLUMN));
serializer.startTag("w", "br");
serializer.endTag("w", "br");
serializer.text("Low Temp: "+
cursor.getString(FieldReportDBAdapter.LOWTEMP_COLUMN));
serializer.startTag("w", "br");
serializer.endTag("w", "br");
serializer.text("Conditions: "+
cursor.getString(FieldReportDBAdapter.CONDITIONS_COLUMN));
serializer.startTag("w", "br");
serializer.endTag("w", "br");
serializer.text("Notes: "+
cursor.getString(FieldReportDBAdapter.NOTES_COLUMN));
serializer.startTag("w", "br");
serializer.endTag("w", "br");
serializer.endTag("w", "t");
serializer.endTag("w", "r");
serializer.endTag("w", "p");
serializer.endTag("w", "body");
serializer.endTag("w", "wordDocument");
return true;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public boolean WriteToFile() {
FileWriter fWriter;
try{
fWriter = new FileWriter(Environment.getExternalStorageDirectory()+
"/"+filename);
Log.v("OUTPUT",output.toString());
fWriter.write(output.toString());
fWriter.flush();
fWriter.close();
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
}
Any help is very much appreciated! The logcat shows the file just the way I want it, it just does not get to the file.
Upvotes: 1
Views: 538
Reputation: 31
I see the problem now. Thank you for your comments, they led me to the reference on XMLSerilizer. Once I read through the doc I realized I forgot to call endDocument() on the XML serializer. Once I added a call to this method, the code is performing as expected.
Upvotes: 2