创建可在更多活动

时间:2016-10-13 21:18:38

标签: android arrays list object storage

我想创建一个可由更多活动访问的对象列表。 我想用对象列表(而不是数组)创建一个类。我用过这个......

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中的

是预期的错误方法调用。

有一种更简单的方法来存储对象并提高效率吗?

2 个答案:

答案 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'