aがロードされると、通常は機能するカスタム リスト アダプターlistfragment
をロードするアプリがありますが、アプリを閉じて再度開いてもオブジェクトが常に保持されるように、オブジェクト ストレージを実装しようとしています。ユーザーが手動で削除した場合にのみ削除されます。
私はここでそれを実装しようとしていますが、この方法では、listfragment
がロードされると、画面の中央に「ロード中のアイコン」が消えません。ログ出力から、try ブロックが入力されていないことが原因であることがわかりました。その直前のコードは入力されていますが、try ブロック内のコードは入力されていません。なぜでしょうか?
public class MainListFragment extends ListFragment{
OnListSelectedListener mCallback;
public ObjectStorage mainObjectList = new ObjectStorage(); //creates the list of objects
SharedPreferences mPrefs;
int mCurrentPosition = -1;
// The container Activity must implement this interface so the frag can deliver messages
public interface OnListSelectedListener {
/** Called by ListFragment when a list item is selected */
public void onItemSelected(int position, String schedulename, String[] ampm, boolean[] days, int[] times, boolean vibrate);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onStart() {
super.onStart();
updateStorage();
ByteArrayInputStream byteArray = new ByteArrayInputStream(mPrefs.getString("myobject", "").getBytes());
ObjectInputStream in;
try {
in = new ObjectInputStream(byteArray);
ObjectStorage updatedStorageList = (ObjectStorage) in.readObject();
CustomListAdapter adapter = new CustomListAdapter(getActivity(),
R.layout.listview_item_row, updatedStorageList);
//setListAdapter(new ArrayAdapter<String>(getActivity(), layout, arraylist));
setListAdapter(adapter);
} catch (StreamCorruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void updateStorage()
{
getActivity();//used for MODE_PRIVATE
//store object list into android system
mPrefs = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor ed = mPrefs.edit();
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream out;
try {
out = new ObjectOutputStream(arrayOutputStream);
out.writeObject(mainObjectList);
out.close();
arrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
ed.putString("myobject", arrayOutputStream.toString());
ed.commit();
}
}