创建可用于更多 activity 的对象列表

Create a list of object usable in more activity

我想创建一个可供更多 activity 访问的对象列表。 我想用对象列表(不是数组)创建一个 class 。我用过这个...

public class List{
    Object object1 = new Object("this", 59, true)
    ...
   }

和activity

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 中存在预期的错误方法调用。

有没有更简单高效的存储对象的方法?

您可以将数据存储在如下设置中: 设置服务:

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;

还要确保您的 gradle:

compile 'com.google.code.gson:gson:2.4'

我将根据您要创建对象列表并将其用于不同 activity class.

的解决方案

第一个解决方案 - 您可以创建一个自定义应用程序class 并在 onCreate 回调方法中实例化您的对象列表。这使您可以访问其他 class

中的对象列表
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 class 来包装您的对象列表,如下所示。

假设你有这个用户 class

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;
}
}

那么包装器 class 将如下所示

public class Wrapper {
private List<User> users;

public Wrapper(List<User> users){
    this.users = users;
}

public List<User> getUsers(){
    return  users;
}
}

您可以将 Wrapper class 转换为 Json String

Gson gson = new Gson();
String jsonString = gson.toJson(Wrapper);

您可以像这样将 json 字符串存储在共享首选项中

SharedPreferences prefs = getSharedPreferences("IDENTIFIER", Context.MODE_PRIVATE);
SharedPreferences.Editor edits = prefs.edit();
edits.putString("LIST_OBJECT", jsonString);
edits.apply();

要获取 class 中的用户列表,您将使用以下代码。像这样在 sharedpreference 中获取 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 字符串时,您可以将其重新转换为用户的对象列表,如下所示

Type type = new TypeToken<List<DataObject>>(){}.getType();
List<DataObject> inpList = new Gson().fromJson(jsonString, type);

记得在您的应用 build.gradle 文件中添加这一行

compile 'com.google.code.gson:gson:2.4'