Hallo Leute.
Ich wollte jez ma damit anfangen, dass meine App sich auch abspeichert nach dem beenden, zumindest einzelne Teile wie eine TextView.
Nur funktioniert das noch nicht so ganz, ich bitte um Lösungsvorschläge, am besten mit Code.
Im Grundsatz will ich die TextView beim beenden abspeichern und beim start wieder laden lassen.
Ich habe auch die Berechtigungen zum lesen/schreiben in der AndroidManifest gegeben.
XmlParser.java
Java
package peppermine_studios.criminallife;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class XmlParser {
XmlPullParserFactory factory;
XmlPullParser parser;
FileWriter writer;
public XmlParser() {
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
} catch (XmlPullParserException ex) {
Logger.getLogger(XmlParser.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void write(List<TaskOne> allTasks, File fileOne) throws IOException {
writer = new FileWriter(fileOne);
writer.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
TaskOne taskTmpOne;
for (int i = 0; i < allTasks.size(); i++) {
taskTmpOne = allTasks.get(i);
String content = taskTmpOne.getTaskContent();
boolean isDone = taskTmpOne.isDone();
writer.write("<Task content=\"" + content + "\"" + " isdone=\"" + isDone + "\"" + ">");
writer.write("</TaskOne>");
}
writer.flush();
}
public List<TaskOne> read(File fileOne) throws XmlPullParserException, FileNotFoundException, IOException {
parser.setInput(new FileReader(fileOne));
List<TaskOne> list = new ArrayList<TaskOne>();
TaskOne taskTmpOne;
String content;
boolean isDone;
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
if (parser.getEventType() == XmlPullParser.START_TAG) {
content = parser.getAttributeValue(0);
isDone = Boolean.parseBoolean(parser.getAttributeValue(1));
taskTmpOne = new TaskOne(content, isDone);
list.add(taskTmpOne);
}
parser.next();
}
return list;
}
}
Alles anzeigen
TaskOne.java
Java
package peppermine_studios.criminallife;
public class TaskOne {
String taskContent;
boolean isDone;
public TaskOne(String taskContent, boolean isDone){
this.taskContent = taskContent;
this.isDone = isDone;
}
public String getTaskContent() {
return taskContent;
}
public boolean isDone() {
return isDone;
}
public void setTaskContent(String taskContent) {
this.taskContent = taskContent;
}
public void setIsDone(boolean isDone) {
this.isDone = isDone;
}
}
Alles anzeigen
Mainactivity.java (onCreate)
Java
tasks = new ArrayList<TaskOne>();
fileOne = new File(Environment.getExternalStorageDirectory(), "tasks.xml");
parserOne = new XmlParser();
if (fileOne.exists()) {
try {
tasks = parserOne.read(fileOne);
if (tasks.isEmpty()) {
fileOne.delete();
fileOne.createNewFile();
}
} catch (XmlPullParserException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
} catch (FileNotFoundException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
try {
fileOne.createNewFile();
} catch (IOException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
}
Alles anzeigen
Mainactivity.java (onPause)
Java
try {
parserOne.write(tasks, fileOne);
} catch (IOException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
Fehlermeldungen gibt es keine oder so. Es funktioniert so wie halt der Code ist, nicht.