我对Java很新,所以请原谅我这是一个愚蠢的问题。我有一个Android项目,它包含链接的类,让我尝试分解它...
现在用户输入的数据需要存储在String列表和3个Double列表中。我知道如何实现这个,但我想知道组织这个的最佳方法是什么,因为我对面向对象的编程很新。通常我会将这些列表设为静态并在MainActivity上声明它们,获取用户输入并通过静态变量访问它。但我想尝试一种OO方法,所以我 想要建立一个我可以获得这些成本的模型,将它保存到某个地方然后检索它而不会有任何内存泄漏等。我创建了一个名为UserInputSet的类,这里是我的类...
public class UserInputSet {
//user inputs 3 costs from 3 edittext fields and each one gets saved in each of these
List<Double> DATAcost = new ArrayList<Double>();
List<Double> WLANcost = new ArrayList<Double>();
List<Double> UTILITYcost = new ArrayList<Double>();
//user enters string names for 1 set of costs
List<String> serviceNames = new ArrayList<String>();
List<String> dimensions = new ArrayList<String>(String);
}
MainActivity的布局为用户提供了4个水平显示的edittext字段,第一个是String(名称),接下来的3个是每个成本(Datacost,WLANcost,UtilityCost),然后它们应该保存在这里,并且然后由CustomUseCase检索。做这个的最好方式是什么?谢谢:)
答案 0 :(得分:1)
从面向对象的角度来看,这种静态变量的使用并不是一个好的解决方案,并且在Java中也不是Android中惯用的方法。
此外,虽然活动是Android开发中最突出的类之一,但它们并不是数据源,也不是真正适合应用程序逻辑的好地方。它们本质上是视图控制器。
共享状态(您的列表)应该包含在服务类(不一定是Android服务)中,并且通常会将该数据放入(SQLite)数据库中。
看起来你可能没有数据库,但Android应用程序有些短暂 - 如果你把应用程序放到后台(例如打开另一个应用程序),操作系统可以自由杀死你的应用程序,并在以后重新启动它。因此,即使用户认为您的应用程序只是一次运行,您可能需要持久数据,而数据库是实现这一目标的常用方法。
答案 1 :(得分:1)
根据您的问题,您需要组织Data with Oops概念。所以最好尝试使用UserInputSet类的单例。
<强>的Singleton:强>
Singleton Pattern表示只是“定义一个只有一个实例并提供全局访问权限的类”。
优势:
我们可以将构造函数设为私有。这样我们就无法创造了 课堂外的对象。
此属性对于在java中创建单例类非常有用。
Singleton模式帮助我们只保留一个类的一个实例 任何时候。
单身的目的是通过保持来控制对象的创建 私人建设者。
<强> UserInputSet.java 强>
public class UserInputSet
{
private List<Double> mDataCost = new ArrayList();
private static UserInputSet mUserInputSet = new UserInputSet(); //Object as static
private UserInputSet()
{
// Empty Constructor declared as private so this class can nt be create object outside class.
}
public List<Double> getDataCost()
{
return mDataCost;
}
private void setData(List<Double> list)
{
if(list != null)
{
mList.clear();
mList.addAll(list);
}
}
public static UserInputSet getThis()
{
return mUserInputSet;
}
}
从Activity外部调用UserInputSet类方法:
<强> MainActivity.java 强>
UserInputSet userInputSet = UserInputSet.getThis();
userInputSet.getDataCost();