Сохранение информации о типе класса в файл для последующего использования

#java #android

#java #Android

Вопрос:

Как вы знаете, передача типов классов важна при программировании приложений Android. Одним из простых примеров является использование намерения.

 Intent i = new Intent(this, MyActivity.class);
  

Так что в некоторых ситуациях будет полезно, если я смогу сохранить информацию о типе класса в файл для последующего использования, например, после перезагрузки.

 void saveClassTypeInfo(Class<?> classType, String filename) {

String str = null;

// Some job with classType

FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(filename);
        fos.write(str.getBytes());
        fos.close();
    } catch (Exception e) {
    }
}
  

Если бы я мог сохранить определенным образом, как описано выше, тогда я смог бы вернуть его к подобному Намерению в будущем.

 Intent i = new Intent(this, restoredClassInfoFromFile);
  

Как я могу выполнить такого рода работу? Поскольку Class<?> это не объект, я вообще не знаю, с чего начать.

[РЕДАКТИРОВАТЬ] .class тоже является объектом, поэтому мы можем сохранить его точно так же, как сохранение объекта.

Комментарии:

1. вы ищете что-то вроде создания класса из имени (строки)

Ответ №1:

Это возможно с помощью ObjectOutputStream here SaveState вашего пользовательского класса

 public static void saveData(SaveState instance){
ObjectOutput out;
try {
     File outFile = new File(Environment.getExternalStorageDirectory(), "appSaveState.ser");
     out = new ObjectOutputStream(new FileOutputStream(outFile));
     out.writeObject(instance);
     out.close();
 } catch (Exception e) {e.printStackTrace();}
}

public static SaveState loadData(){
 ObjectInput in;
 SaveState ss=null;
 try {
     in = new ObjectInputStream(new FileInputStream("appSaveState.ser"));       
     ss=(SaveState) in.readObject();
     in.close();
 } catch (Exception e) {e.printStackTrace();}
 return ss;
}
  

Полное руководство по записи в файл доступно здесь
И прочитайте объект из файла здесь

Комментарии:

1. Извините, я виноват.. Выглядит просто очаровательно! Миллион благодарностей!!

2. Я никогда не думал, что .class — это объект, очень стыдно.. Благодаря вам, теперь я понимаю, что это значит. Пока что код отлично работает в моем приложении, еще раз большое спасибо!