Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用CSV文件创建对象是一种良好的做法吗?_Java_Android_Csv_Save - Fatal编程技术网

Java 使用CSV文件创建对象是一种良好的做法吗?

Java 使用CSV文件创建对象是一种良好的做法吗?,java,android,csv,save,Java,Android,Csv,Save,我正在使用Java创建一个Android应用程序。我让主活动读取CSV文件,创建对象,然后将它们保存到singleton类中,以便应用程序中的其他活动可以轻松访问它们 这是非常好的工作方式,但我不确定是否有其他方法可以达到相同的结果,这些方法被认为是更好的做法,或者我的解决方案是否可能会导致我不知道的问题 如有任何建议,将不胜感激。谢谢 MainActivity扩展了AppCompative活动 @Override protected void onCreate(Bundle savedInst

我正在使用Java创建一个Android应用程序。我让主活动读取CSV文件,创建对象,然后将它们保存到singleton类中,以便应用程序中的其他活动可以轻松访问它们

这是非常好的工作方式,但我不确定是否有其他方法可以达到相同的结果,这些方法被认为是更好的做法,或者我的解决方案是否可能会导致我不知道的问题

如有任何建议,将不胜感激。谢谢

MainActivity扩展了AppCompative活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    createItemObjects();
}


public void createItemObjects(){
    InputStream is = getResources().openRawResource(R.raw.items_csv);
    BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));

    ArrayList<Item> items = new ArrayList<Item>();
    String line = "";
    try {
        while((line = reader.readLine())!=null) {
            String[] values = line.split(",");
            String img = values[0];
            int imgID = getResources().getIdentifier(img , "drawable", getPackageName());
            items.add(new Item(imgID, values[1], values[2]));
        }
    } catch (IOException e) {
        Log.v("Main Activity", "Error Reading File on Line " + line, e);
        e.printStackTrace();
    }
    ItemListHolder.getInstance().setItemsArrayList(items);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createItemObjects();
}
public void createItemObjects(){
InputStream is=getResources().openRawResource(R.raw.items\u csv);
BufferedReader=新的BufferedReader(新的InputStreamReader(is,Charset.forName(“UTF-8”));
ArrayList items=新建ArrayList();
字符串行=”;
试一试{
而((line=reader.readLine())!=null){
字符串[]值=行。拆分(“,”);
字符串img=值[0];
int-imgID=getResources().getIdentifier(img,“drawable”,getPackageName());
添加(新项(imgID,值[1],值[2]);
}
}捕获(IOE异常){
Log.v(“主要活动”,“第行读取文件时出错”+第行,e);
e、 printStackTrace();
}
ItemListHolder.getInstance().setItemsArrayList(项目);
}
如您所见,当应用程序启动时,它读取CSV文件,创建项目对象,创建一个ArrayList来存储这些项目对象,然后将其发送到ItemListHolder单例中,以便应用程序中的所有活动都可以使用ItemListHolder.getInstance().getItemsArrayList()检索项目的ArrayList

这没有任何问题,但我的问题是:让你的Android应用程序在每次重启时从CSV文件创建对象是否被视为良好做法/安全使用/高效ect,或者你是否应该以其他方式存储对象,例如共享首选项,因此,它们实际上保存在内存中,不需要在每次应用程序启动时创建,然后保存在类中


我熟悉Java,但对android非常陌生,所以我真的不知道还有哪些保存对象的方法可能存在,也不知道哪些方法被认为是好的使用方法。

(你可能想回顾一下,因为这对本网站来说有点离题。)现在还不清楚你为什么要这样做,但它听起来像是某种配置类,用文件中的值进行实例化。您可能希望展示一个示例,告诉我们您希望通过singleton实现什么,以及您试图解决什么问题。我这样做是为了在应用程序启动后立即创建一个对象的ArrayList,比如应用程序中的每个活动都可以访问的项目(包含int-price、string-name等)。就像我说的,我正在做的工作确实有效,但我只是想知道这是否是android应用程序的良好实践,或者它是否会导致问题。换句话说,使用csv文件创建对象是否被认为适合android应用程序,或者是否有其他更好的方法来保存和存储对象?再次,也许?这真的取决于上下文。这个网站对于假设问题不是很好。这里有一个代码回顾,你可以试试。我的意思是,这不是一个假设问题。让应用程序在每次启动时使用csv创建对象是一种不好的做法,还是让对象以某种方式保存(如共享首选项)更好?也许发布代码会有所帮助。