繁体   English   中英

将数据保存在对象的ArrayList中

[英]Saving data in ArrayList of objects

我试图弄清楚如何在对象的ArrayList中保存一些数据,但是我是Java新手,所以遇到了一些麻烦...

所以可以说我们有一个该对象的ArrayList

public class AppListModel(){
   private String AppName;
   private String packageName;

   public AppListModel(){

   }

   public String getAppName() {
       return appName;
   }

   public String getPackageName() {
       return packageName;
   }

   public void setAppName(String appName) {
       this.appName = appName;
   }

   public void setPackageName(String packageName) {
       this.packageName = packageName;
   }
}

并且在difrent文件中有此对象的arrayList:

public class ProfilesList {

private ArrayList<AppListModel> profilesList = new ArrayList<AppListModel>();

public ProfilesList(){

}

public ArrayList<AppListModel> getProfilesList() {
    return profilesList;
}

public void setProfilesList(ArrayList<AppListModel> profilesList) {
    this.profilesList = profilesList;
}

public void addProfilesList(AppListModel appListModel) {
    this.profilesList.add(appListModel);
}

}

是否可以将数据存储在一个文件中,例如:

AppListModel appList = new AppListModel();
appList.setAppName("ssss");
appList.setPackageName("ddddd");
ProfilesList list = new ProfilesList();
list.addProfilesList(appList);

然后从另一个文件访问这些数据,例如:

ArrayList<AppListModel> list = new ArrayList<AppListModel>();
ProfilesList profList = new ProfilesList();
list = profList.getProfilesList();

现在,上一个代码示例中的ArrayList命名列表是否包含那些先前创建的数据?

如果没有,如何实现? 我需要使用soma数据库或其他东西吗?

我想用它来处理android中不同活动之间的ArrayList

谢谢!

“ new”关键字创建对象的新实例(在这种情况下,是一个集合,一个空的)。

如果要访问之前创建的同一实例,则需要将其“传递”到需要的位置。 假设您的用法代码包装在一个函数中:

void doSomething(ProfilesList profList) {
   ArrayList<AppListModel> list = new ArrayList<AppListModel>();
   list = profList.getProfilesList();
   //do something with list...
}

然后,您可以通过执行以下操作来调用此代码:

AppListModel appList = new AppListModel();
appList.setAppName("ssss");
appList.setPackageName("ddddd");
ProfilesList list = new ProfilesList();
list.addProfilesList(appList);
doSomething(list);

如果要访问应用程序不同部分的数据,建议您使用SharedPreferences 有关此的更多信息,请参见此处 但是,SharedPreferences对于键值对更为有用。

在您的情况下, SQLite数据库会更有用。 这里 您将创建一个SQLite表,其中包含每个对象字段的列。 例如,具有名为AppNamePackageName等的列的表。

您可以简单地将ArrayList作为参数传递给应用程序的不同部分,但是,如果您开始处理多个列表,这将很麻烦且无效。 随着应用程序的增长, SQLite数据库的效率将大大提高。

您在此处list

AppListModel appList = new AppListModel();
appList.setAppName("ssss");
appList.setPackageName("ddddd");
ProfilesList list = new ProfilesList();
list.addProfilesList(appList);

将与此处的list

ArrayList<AppListModel> list = new ArrayList<AppListModel>();
ProfilesList profList = new ProfilesList();
list = profList.getProfilesList();

每当您创建new ProfilesList()它就与其他任何都不相同。

public void anyMethod() {
    //list1 is not the same as list2
    ArrayList<AppListModel> list1 = new ArrayList<AppListModel>();
    ArrayList<AppListModel> list2 = new ArrayList<AppListModel>();

    //list3 will be same as list1
    ArrayList<AppListModel> list3 = list1;

    //adding an AppListModel to list1
    AppListModel appList = new AppListModel();    
    list1.add(appList);

    list1.getProfilesList().isEmpty(); //false because it has appList
    list2.getProfilesList().isEmpty(); //true
    list3.getProfilesList().isEmpty(); //false because it refers to list1 which has appList
}

上面显示了ArrayList之间的区别。

“ new”将始终创建所需对象的新实例。

您想查找SQLite。 这就是您在android中存储数据的方式。 http://developer.android.com/training/basics/data-storage/databases.html

一旦将其保存在本地电话的数据库中,您就可以随时检索数据并将其添加到所需的阵列列表中。 但是,对数据的任何更改都需要再次提交到数据库,以便将其永久存储。

上一个代码示例中的ArrayList命名列表是否包含那些先前创建的数据?

如果使用此代码:

ProfilesList profList = new ProfilesList();
ArrayList<AppListModel> list = profList.getProfilesList()

由于创建了ProfilesList对象的新实例,因此不会获得任何以前保存的数据。 您需要使用相同的实例来取回数据

ProfilesList profList = new ProfilesList();
profList.addProfilesList(...);

//...    

//This would then return the correct data
ArrayList<AppListModel> list = profList.getProfilesList();

如果您需要更多持久性存储,我建议您使用SQLite数据库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM