개체의 ArrayList가 있습니다. 객체는 ‘Bitmap’과 ‘String’유형을 포함하고 두 가지 모두에 대한 getter 및 setter 만 포함합니다. 우선 비트 맵을 직렬화 할 수 있습니까?
SharedPreferences에 저장하기 위해 이것을 직렬화하는 방법은 무엇입니까? 나는 많은 사람들이 비슷한 질문을하는 것을 보았지만 좋은 대답을하는 사람은없는 것 같습니다. 가능한 경우 몇 가지 코드 예제를 선호합니다.
비트 맵을 직렬화 할 수없는 경우이 ArrayList를 저장하려면 어떻게해야합니까?
감사합니다.
답변
예, 공유 환경 설정에서 복합 객체를 저장할 수 있습니다. 의 말을하자..
Student mStudentObject = new Student();
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(mStudentObject);
prefsEditor.putString("MyObject", json);
prefsEditor.commit();
.. 이제 객체를 다음과 같이 검색 할 수 있습니다.
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Gson gson = new Gson();
String json = appSharedPrefs.getString("MyObject", "");
Student mStudentObject = gson.fromJson(json, Student.class);
ArrayList
예를 들어 모든 유형의 객체를 다시 얻으려면 Student
다음을 사용하십시오.
Type type = new TypeToken<List<Student>>(){}.getType();
List<Student> students = gson.fromJson(json, type);
답변
위의 답변은 작동하지만 목록에는 적용되지 않습니다.
객체 목록을 저장하려면 다음과 같이하십시오.
List<Cars> cars= new ArrayList<Cars>();
cars.add(a);
cars.add(b);
cars.add(c);
cars.add(d);
gson = new Gson();
String jsonCars = gson.toJson(cars);
Log.d("TAG","jsonCars = " + jsonCars);
json 객체를 읽습니다.
Type type = new TypeToken<List<Cars>>(){}.getType();
List<Cars> carsList = gson.fromJson(jsonCars, type);
답변
나를 위해 다음과 같이 작동했습니다.
SharedPreferances에 값 입력 :
String key = "Key";
ArrayList<ModelClass> ModelArrayList=new ArrayList();
SharedPreferences shref;
SharedPreferences.Editor editor;
shref = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = gson.toJson(ModelArrayList);
editor = shref.edit();
editor.remove(key).commit();
editor.putString(key, json);
editor.commit();
SharedPreferances에서 값을 가져 오려면 다음을 수행하십시오.
Gson gson = new Gson();
String response=shref.getString(key , "");
ArrayList<ModelClass> lstArrayList = gson.fromJson(response,
new TypeToken<List<ModelClass>>(){}.getType());
답변
저장 :
public static void saveSharedPreferencesLogList(Context context, List<PhoneCallLog> callLog) {
SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(callLog);
prefsEditor.putString("myJson", json);
prefsEditor.commit();
}
부하 :
public static List<PhoneCallLog> loadSharedPreferencesLogList(Context context) {
List<PhoneCallLog> callLog = new ArrayList<PhoneCallLog>();
SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE);
Gson gson = new Gson();
String json = mPrefs.getString("myJson", "");
if (json.isEmpty()) {
callLog = new ArrayList<PhoneCallLog>();
} else {
Type type = new TypeToken<List<PhoneCallLog>>() {
}.getType();
callLog = gson.fromJson(json, type);
}
return callLog;
}
PhoneCallLog는 내 사용자 지정 개체의 이름입니다. (문자열, 긴 값 및 부울 값 포함)
답변
위의 Mete의 예는 매력처럼 작동했습니다.
다음은 Kotlin 예입니다.
private var prefs: SharedPreferences = context?.getSharedPreferences("sharedPrefs", MODE_PRIVATE)
?: error("err")
private val gson = Gson()
저장
fun saveObjectToArrayList(yourObject: YourObject) {
val bookmarks = fetchArrayList()
bookmarks.add(0, yourObject)
val prefsEditor = prefs.edit()
val json = gson.toJson(bookmarks)
prefsEditor.putString("your_key", json)
prefsEditor.apply()
}
읽다
fun fetchArrayList(): ArrayList<YourObject> {
val yourArrayList: ArrayList<YourObject>
val json = prefs.getString("your_key", "")
yourArrayList = when {
json.isNullOrEmpty() -> ArrayList()
else -> gson.fromJson(json, object : TypeToken<List<Feed>>() {}.type)
}
return yourArrayList
}
답변
Gson
@SpyZips의 답변을 확장 하는 kotlin 구현 ,
JSON으로 직렬화
val jsonCars: String = Gson().toJson(cars);
객체 목록으로 돌아 가기 역 직렬화
val type = object: TypeToken<List<Car>>(){}.type
val carsList: List<Car> = Gson().fromJson(jsonCars, type)