Мне нужно и объект, содержащий мои настройки в примитивных типах, чтобы иметь возможность загружать и сохранять из общих настроек Android и вызывать метод загрузки или сохранения объекта.Объект Android Сериализовывается из метода
Я создал класс под названием thePreferences.java, этот класс имеет несколько примитивных полей. Я создал в этом классе 2х методов для загрузки и сохранения этого класса из и в sharedPreferences. См ниже код, используемый в моем классе:
import android.content.Context;
import android.content.SharedPreferences;
import com.google.gson.Gson;
import com.google.gson.JsonSerializer;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.io.Serializable;
public class thePreferences extends AppCompatActivity implements Serializable {
private static final String PREFS_NAME = "thePreferences";
private static final String PREF_TEXT = "pref_text";
public static final String TAG = "WPC";
public boolean loggedIn = false;
public int deviceId = 0;
public int userId = 0;
public String email = "";
public String deviceAlias = "";
public thePreferences() {
}
public thePreferences(boolean loggedIn, int deviceId, int userId, String email, String deviceAlias) {
this.loggedIn = loggedIn;
this.deviceId = deviceId;
this.userId = userId;
this.email = email;
this.deviceAlias = deviceAlias;
}
public boolean loadThePreferences(Context c) {
SharedPreferences pref = c.getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
if (pref.contains(PREF_TEXT)) {
String theJson = pref.getString(PREF_TEXT, null);
Log.i(TAG, "The JSON string loaded from Shared Preferences : " + theJson);
thePreferences p = new Gson().fromJson(theJson, thePreferences.class);
this.deviceAlias = (p.deviceAlias);
this.deviceId = (p.deviceId);
this.email = (p.email);
this.loggedIn = (p.loggedIn);
return true;
} else {
Log.i(TAG, "Could not load SharedPreferences, value does not exist.");
return false;
}
}
public static boolean saveThePreferences(Context c,thePreferences p){
Gson gson = new Gson();
String theJson = gson.toJson(p);
c.getSharedPreferences(PREFS_NAME,MODE_PRIVATE)
.edit()
.putString(PREF_TEXT,theJson)
.commit();
return true;
}
@Override
public String toString() {
return "thePreferences{" +
"loggedIn=" + this.loggedIn +
", deviceId=" + this.deviceId +
", userId=" + this.userId +
", email='" + this.email + '\'' +
", deviceAlias='" + this.deviceAlias + '\'' +
'}';
}
}
Затем я пытаюсь вызвать это от другой деятельности, чтобы загрузить и сохранить свои предпочтения следующим образом:
contextOfApplication = getApplicationContext();
thePreferences preferencesObj = new thePreferences(true,12345,552441,"[email protected]","theDeivceAlias");
preferencesObj.saveThePreferences(contextOfApplication,preferencesObj);
preferencesObj.loadThePreferences(contextOfApplication);
Я не могу заставить его выполнить мимо saveThePreferences(). Он держится на crashin с помощью StackOverflow, и я не могу понять, почему.
Может кто-нибудь, пожалуйста, сообщите, есть ли другой способ сделать это или, может быть, где я поступил неправильно?
Спасибо заранее
На первом, thePreferences класс поэтому по соглашению должны начните с заглавной буквы. Затем вы не должны пытаться сериализовать целую деятельность. Вместо этого попробуйте сохранить ваши данные, которые вам нужны в качестве примитивных типов, а также получите их как типы примитивов. Чтобы сохранить весь ваш класс как строку json, здесь нет смысла. – JacksOnF1re
Спасибо, я не хочу сериализовать всю активность, но только экземпляр объекта моего класса, который содержит только примитивные поля. Основываясь на документации GSON здесь: https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples – Solx85