今天几乎一整天,我一直在试图解决这个问题,但我似乎无法正确解决。我了解如何使用文件输出/输入流。但是,由于 ArrayList 不是“int”,我不能只通过它来传递我的 ArrayList。我收集到“序列化”将我的 ArrayList 转换为字节,然后可以通过 File-Output/Input-Stream 对其进行操作。我不知道它是如何工作的。我从其他人那里窃取了“对象输入/输出流”代码,他们的目标似乎与我相同,但它对我不起作用。我查看了 Android Dev Docs 中的序列化,但无法弄清楚它是如何工作的。
有人可以请吗?
A)用更简单的术语解释序列化如何工作和/或如何执行它?
&
B)解释为什么下面的代码不起作用(例如,在我添加所有 Object(in/out)putStream 之前,我的代码会动态实时填充 Listview,现在当按钮是推,也不会加载任何东西,也不会抛出任何错误)。
还
C)有没有更简单的方法来存储这个 ArrayList 以便它是持久数据。
package com.example.thepicker;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
public class Settings extends Activity implements OnClickListener{
EditText getit;
ImageButton giveit;
ListView thelist;
ArrayList<String> items;
ArrayAdapter<String> list;
Intent pass;
FileOutputStream persistout;
FileInputStream persistin;
ObjectOutputStream osistout;
ObjectInputStream osistin;
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
items = new ArrayList<String>();
list = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items);
pass = new Intent(this,Main.class);
getit = (EditText) findViewById(R.id.getit);
giveit = (ImageButton) findViewById(R.id.giveit);
thelist = (ListView) findViewById(R.id.thelist);
try {
persistin = openFileInput("FILENAME");
osistin = new ObjectInputStream(persistin);
items = (ArrayList<String>) osistin.readObject();
osistin.close();
persistin.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
thelist.setAdapter(list);
list.notifyDataSetChanged();
giveit.setOnClickListener(this);
}
@Override
public void onPause() {
super.onPause();
pass.putExtra("total", items);
this.startActivity(pass);
try {
persistout = openFileOutput("FILENAME", Context.MODE_PRIVATE);
osistout = new ObjectOutputStream(persistout);
osistout.writeObject(items);
osistout.close();
persistout.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
items.add(getit.getText().toString());
list.notifyDataSetChanged();
}
}