如何使用对象类从多个List存储和检索数据?

时间:2017-05-01 18:46:29

标签: java android class arraylist methods

我对Java很新,所以请原谅我这是一个愚蠢的问题。我有一个Android项目,它包含链接的类,让我尝试分解它...

  • MainActivity(用户将从EditText字段输入值,和 那么数据需要存储在某处。)
  • CustomUseCase(此类需要访问此数据,并使用其中的数据进行测试计算)。
  • ParticleActivity(用户将在此输入更多数据,需要通过CustomUseCase检索数据,然后是一个将运行的按钮 CustomUseCase测试
  • SolutionActivity(这些测试的结果将在此处显示)。

现在用户输入的数据需要存储在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检索。做这个的最好方式是什么?谢谢:)

2 个答案:

答案 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();