0
オブジェクトをシリアル化してファイルにXMLとして書き込もうとしています。だから、私はそのXMLファイルを読み込み、それをクラスオブジェクトにデシリアライズしようとすると、null参照例外が発生します。androidのSimpleライブラリを使用してクラスオブジェクトを逆シリアル化する
私はこの例ではhttp://www.rhyous.com/2011/10/23/android-and-xml-serialization-with-simple/で作業していましたが、それはうまく動作しますが、これは単なる単純なクラスです。
私の場合は2つのクラスがあり、そのうちの1つに2番目のクラスのタイプのオブジェクトのリストがあります。
@Root (name = "Task")
public class Task {
@Element
public String Name;
@Element
public int Image;
@ElementList (type = Item.class)
public ArrayList<Item> Items;
@Element
boolean IsChecked;
Task(){}
Task(String name, int image, ArrayList<Item> items, boolean isChecked){
this.Name = name;
this.Image = image;
this.Items = items;
this.IsChecked = isChecked;
}
}
これは、Itemクラスは次のとおりです:
この
は、タスククラスです@Root (name = "Item")
public class Item {
@Element
public String Name;
@Element
public String Image;
@Element
public boolean IsChecked;
@Element
public String Description;
Item(String name, String image, String description) {
this.Name = name;
this.Image = image;
this.IsChecked = false;
this.Description = description;
}
Item(String name, String image, boolean isChecked, String description) {
this.Name = name;
this.Image = image;
this.IsChecked = isChecked;
this.Description = description;
}
}
これが主な活動です:ちょうど
public class MainActivity extends AppCompatActivity {
private static final String APP_DIR_PATH = Environment.getExternalStorageDirectory() + File.separator + "MyApp";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<Item> items = new ArrayList<Item>();
items.add(new Item("firstItem", APP_DIR_PATH + "/firstPic.jpg", "firstDescription"));
items.add(new Item("secondItem", APP_DIR_PATH + "/secondPic.jpg", "secondDescription"));
items.add(new Item("thirdItem", APP_DIR_PATH + "/thirdPic.jpg", "thirdDescription"));
Task firstTask = new Task("firstTask", 1, items, true);
// Serialization and writing to file
File xmlFile = new File(APP_DIR_PATH + "/Task.xml");
try {
Serializer serializer = new Persister();
serializer.write(firstTask, xmlFile);
} catch (Exception e) {
e.printStackTrace();
}
// Deserialization and reading from file
Task secondTask = null;
if (xmlFile.exists()) {
try {
Serializer serializer = new Persister();
secondTask = serializer.read(Task.class, xmlFile);
} catch (Exception e) {
e.printStackTrace();
}
}
// This throws a null reference exception
Toast.makeText(getBaseContext(), secondTask.Name, Toast.LENGTH_SHORT).show();
// If I try to serialize the object and write it to file, the file is empty, but that's to be expected :)
File secondXmlFile = new File(APP_DIR_PATH + "/secondTask.xml");
try {
Serializer serializer = new Persister();
serializer.write(secondTask, secondXmlFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}