我想创建一个可由更多活动访问的对象列表。 我想用对象列表(而不是数组)创建一个类。我用过这个......
public class List{
Object object1 = new Object("this", 59, true)
...
}
活动
public class ListActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
...
ArrayList<Object> array = new ArrayList<>();
array.add(Object(List.object1));
...}}
List.object1中的是预期的错误方法调用。
有一种更简单的方法来存储对象并提高效率吗?
答案 0 :(得分:0)
您可以将数据存储在以下设置中: settingsservice:
public class SettingsService {
private static String KEY = Constants.SETTINGS_KEY;
private static Context mContext;
public static SettingsModel settings;
public SettingsService(){
mContext = YourApplicationClass.getApplicationContext();
if(settings == null){
settings = getSettings();
}
}
public static void saveSettings(SettingsModel settings){
if(settings != null){
SharedPreferences.Editor editor = mContext
.getSharedPreferences(KEY, Activity.MODE_PRIVATE).edit();
SettingsService.settings = settings;
Gson gson = new Gson();
String jsonSettings = gson.toJson(settings);
editor.putString("settings", jsonSettings );
editor.commit();
}
}
public static void saveSettings(){
if(settings == null){
settings = new SettingsModel();
}
SharedPreferences.Editor editor = mContext
.getSharedPreferences(KEY, Activity.MODE_PRIVATE).edit();
Gson gson = new Gson();
String jsonSettings = gson.toJson(settings);
editor.putString("settings", jsonSettings );
editor.commit();
}
private static SettingsModel getSettings() {
SharedPreferences editor = mContext.getSharedPreferences(KEY,
Activity.MODE_PRIVATE);
try{
String jsonSettings = editor.getString("settings","settings");
Gson gson = new Gson();
settings = gson.fromJson(jsonSettings, SettingsModel.class);
}catch (Exception e){
settings = new SettingsModel();
}
return settings;
}
}
创建设置模型你想要的任何对象:
public class SettingsModel {
public String email;
public String password;
// anything you need else
}
然后从代码中的任何位置开始:
SettingsService.settings.email = "your email";
SettingsService.saveSettings();
也来自代码中的任何位置:
String myEmail = SettingsService.settings.email;
还要确保你的格斗:
compile 'com.google.code.gson:gson:2.4'
答案 1 :(得分:0)
我将基于您想要创建对象列表的解决方案,并在不同的活动类中使用它。
第一个解决方案 - 您可以创建自定义应用程序类并在onCreate回调方法中实例化对象列表。这使您可以访问其他类
中的对象列表public class CustomApplication extends Application {
private List<YourClassName> listOfObjects;
@Override
public void onCreate() {
super.onCreate();
listOfObjects = new ArrayList<YourClassName>();
}
private List<YourClassName> getListOfObject(){
return listOfObjects;
}
}
然后要访问它,您可以使用这行代码
List<YourClassName> objectList = ((CustomApplication)getApplication()).getListOfObject();
第二个解决方案 - 您可以使用Wrapper类来包装对象列表,如下所示。
假设您有此用户类
public class User {
private String name;
private String email;
private String username;
public User(String name, String email, String username) {
this.name = name;
this.email = email;
this.username = username;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getUsername() {
return username;
}
}
然后Wrapper类看起来像这样
public class Wrapper {
private List<User> users;
public Wrapper(List<User> users){
this.users = users;
}
public List<User> getUsers(){
return users;
}
}
您可以将Wrapper类转换为Json String
Gson gson = new Gson();
String jsonString = gson.toJson(Wrapper);
您可以将jsonString存储在像此
这样的共享偏好中SharedPreferences prefs = getSharedPreferences("IDENTIFIER", Context.MODE_PRIVATE);
SharedPreferences.Editor edits = prefs.edit();
edits.putString("LIST_OBJECT", jsonString);
edits.apply();
要返回班级中的用户列表,您将使用以下代码。像这样
获取共享首选项中的json字符串String jListObject = prefs.getString("LIST_OBJECT", "")
然后获取用户对象列表
Wrapper listObjectWrapper = gson.fromJson(stringObject, Wrapper.class);
List<User> users = listObjectWrapper.getUsers();
第三种解决方案 - 您可以使用TypeToken将json字符串转换为对象列表,如下例所示
创建用户对象列表
List<User> objList = new ArrayList<User>();
objList.add(new User("high", "zero.yahoo.com", "zero"));
objList.add(new User("low", "one.yahoo.com", "one"));
将列表对象转换为字符串
String json = new Gson().toJson(objList);
使用第二个解决方案中的示例
将json字符串存储在共享首选项中检索json字符串时,可以将其重新转换为User的对象列表,如下所示
Type type = new TypeToken<List<DataObject>>(){}.getType();
List<DataObject> inpList = new Gson().fromJson(jsonString, type);
请记住在app build.gradle文件中添加此行
compile 'com.google.code.gson:gson:2.4'