今日はほぼ一日中これを理解しようとしていますが、正しく理解できないようです。File-Output/Input-Streamの使用方法を理解しています。ただし、ArrayListは「int」ではないため、ArrayListを渡すことはできません。「シリアル化」によってArrayListがバイトに変換され、File-Output/Input-Streamを介して操作できることがわかりました。しかし、それがどのように機能するのか理解できません。「Object-Input/Output-Stream」コードを他の誰かから盗んだのですが、その人は私と同じ目標を狙っているように見えましたが、うまくいきません。Android Dev Docsでシリアル化を見てきましたが、それがどのように機能するかを正確に理解することはできません。
誰かお願いできますか。
A)シリアル化がどのように機能するか、および/またはそれを実行する方法をより簡単な言葉で説明しますか?
&
B)以下のコードが機能しない理由を説明してください(たとえば、すべてのObject(in / out)putStreamを追加する前に、コードが動的かつリアルタイムでリストビューに入力されましたが、ボタンがプッシュ、NORは何かをロードしません、NORはエラーをスローしません)。
また
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();
}
}