私は数十のチュートリアルを試してみました。問題のアプリには、リストを保持するカスタムクラスがあり、その中にリストを持つアイテムがあります。理想的には、閉じたり一時停止したりするときに、他のアクティビティから保存できるようにしたいと考えています。私が実行している問題は、別のアクティビティを閉じるとき(戻るボタンを押すと)、保存メッセージのログが表示されることです。しかし、私がそれを開いたときに情報を読み込むのではなく、それを保存しておくと、空のリストが表示されます。ここに私のコードは次のとおりです。Androidスタジオ - ファイルにカスタムクラス(ArrayListを含む)を保存
これは、カスタムクラスを参照して、保存およびロードする方法を呼び出すことができる主な活動です:
public class ReminderList extends AppCompatActivity {
public static ListHolder Lholder;
public static ArrayList<ReminderType> AllReminders=new ArrayList<>();
public reminderCAdapter adapter;
public static ReminderType currentReminderType;
public static ItemType currentItemType;
public static TimeType currentTimesType;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reminder_list);
//generate list
File file=new File("f.rem");
if(file.exists()) {
try {
LoadData();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
AllReminders=Lholder.Rlist;
}
adapter=new reminderCAdapter(AllReminders,this);
ReminderType r1=new ReminderType("Thing1");
//AllReminders.add(r1);
ReminderType r2=new ReminderType("Thing2");
//AllReminders.add(r2);
//instantiate custom adapter
//MyCustomAdapter adapter = new MyCustomAdapter(AllReminders, this);
//handle listview and assign adapter
ListView lView = (ListView)findViewById(R.id.listView);
lView.setAdapter(adapter);
}
public void onResume(){
super.onResume();
adapter.notifyDataSetChanged();
}
public static void SaveData() throws IOException {
Log.e("Saving Data", "trying");
FileOutputStream fos=new FileOutputStream("f.rem");
ObjectOutputStream oos= new ObjectOutputStream(fos);
oos.writeObject(Lholder);
oos.close();
}
public void LoadData() throws IOException, ClassNotFoundException {
Log.e("Loading Data", "trying");
FileInputStream fis=new FileInputStream("f.rem");
ObjectInputStream ois=new ObjectInputStream(fis);
Lholder=(ListHolder) ois.readObject();
ois.close();
}
public void AddToList(View view){
Intent intent = new Intent(this,ReminderSettings.class);
intent.putExtra("Type", "new");
startActivity(intent);
}
}
他の活動はそれほどのような保存機能を呼び出します。
@Override
protected void onStop() {
super.onStop(); // Always call the superclass method first
try {
ReminderList.SaveData();
} catch (IOException e) {
e.printStackTrace();
}
}
How to create a file on Android Internal Storage?
0123:はここアイブ氏が試した最も最近の投稿の小さなリストです
これがなぜ機能していないのか、私がしなければならないことを誰かが分かってくれれば、私は大いに感謝する。
おかげで、その中に多くの
'それはcrashes' - >スタックトレースを? – njzk2
私たちがお手伝いできるスタックトレースを投稿してください。 –
私の悪い。私がfos = openFileOutput( "f.rem"、this.MODE_PRIVATE)を持っていたときにクラッシュしました。今は何もしていないようです。両方のログメッセージがログに表示されますが、アプリを閉じてもう一度開くと何も読み込まれません。ミックスアップして申し訳ありません。 – Superdsg