如何保存数组?

Posted

技术标签:

【中文标题】如何保存数组?【英文标题】:How to save array? 【发布时间】:2017-12-20 16:12:58 【问题描述】:

我有一个填充数组并将其显示在列表视图中的基本应用程序。当我关闭应用程序并重新打开它时,listview 是空的,你会将数组保存在哪里?我看到很多关于共享首选项的帖子,但这似乎是一种在其中存储数组的解决方法,也找不到关于数组存储的任何 android 文档?谁能指出我正确的方向?

我的代码按要求....

    public class ListView_Activity extends AppCompatActivity 

ArrayList<String>mylistarray = new ArrayList<>();

String tempdescr;
String tempname;
static final int ADD_NEW_ITEM = 1;



    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view_);
        /*add the main toolbar and make some changes to format*/
        Toolbar mToolbar = findViewById(R.id.my_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        mToolbar.setTitle(R.string.toolbartitle);
        mToolbar.setSubtitle(R.string.toolbarsubtitle);
        mToolbar.setTitleTextColor(getResources().getColor(R.color.colorWhite));
        mToolbar.setSubtitleTextColor(getResources().getColor(R.color.colorAccent));



        final ArrayAdapter<String> myadapter = new ArrayAdapter<String>(ListView_Activity.this, R.layout.simple_list_item_1, R.id.row_item_text_view, mylistarray);

        /*create array adapter and set to listview*/

        final ListView mylistview = findViewById(R.id.mylistview);
        mylistview.setAdapter(myadapter);
        mylistarray.add("Test");
        myadapter.notifyDataSetChanged();

        final FloatingActionButton additembutton = findViewById(R.id.floatingActionButton);
        additembutton.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Intent additem = new Intent(ListView_Activity.this, Create_Item_Activity.class);
                startActivityForResult(additem, 1);
            
        );




    

    /*load options menu to toolbar*/
    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_toolbar, menu);
        return true;
    

    /*handle options menu click events*/
    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
        switch (item.getItemId()) 
            case R.id.settings:
                //intent here to load settings activity//
                return true;
            case R.id.Feedback:
                Intent Feedbackemail = new Intent(Intent.ACTION_SEND);
                Feedbackemail.setType("text/email");
                Feedbackemail.putExtra(Intent.EXTRA_EMAIL, new String[]"adam.e.garnham@gmail.com");
                Feedbackemail.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
                Feedbackemail.putExtra(Intent.EXTRA_TEXT,"Dear..."+"");
                startActivity(Intent.createChooser(Feedbackemail,"Send Feedback"));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        
    



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
        if (requestCode == ADD_NEW_ITEM)
            if (resultCode == Activity.RESULT_OK) 
                tempdescr = data.getStringExtra("tempdescr");
                tempname = data.getStringExtra("tempname");
                mylistarray.add(tempdescr);
                mylistarray.add(tempname);



            
            if (resultCode == Activity.RESULT_CANCELED) 
                Toast replacewithcode = Toast.makeText(ListView_Activity.this, "replace with code", Toast.LENGTH_SHORT);
                replacewithcode.show();
            
        
    





【问题讨论】:

你从哪里得到你的阵列? 该数组是在 mainactivity 中创建并通过标准意图填充的,如果您需要它会发布代码吗? 但是如果数组是在主活动中创建的,通常如果你关闭并重新打开应用程序,它应该再次创建。你能发布你的活动代码吗 现在添加它.... 【参考方案1】:

您可以使用多种选项来存储您的数组。

选项 1。

共享首选项,它快速且易于理解。只要您的阵列不是很大,这可能是最好的选择。这是共享偏好指南的链接。

https://developer.android.com/training/data-storage/shared-preferences.html

有了这个,你可能想要使用像 GSON 这样的东西来将你的数组转换成一个字符串,然后存储这个字符串。

选项 2。

存储在本地 mysqlite 数据库中,这有点难以理解,但可以为您的数组保存大量数据。这是 android sqlite 指南的链接。

https://developer.android.com/training/data-storage/sqlite.html

选项 3。

使用数据库/服务器,这需要最长的设置时间,但允许应用程序获取数据。但是,此选项需要与数据库的 Internet 连接。

如果您认为可以处理它,我建议您设置一个 mysqlite 数据库,但如果您是初学者,我倾向于将数组存储在共享首选项中,因为设置的代码会少很多。

【讨论】:

Jacob,你是一位顶尖人物,谢谢你,这正是我需要的,将开始阅读! 您还可以使用 Java IO API 将它们存储在文件系统中。但我同意 Jacob 的观点,即存储字符串列表的最合适方法是将它们存储在数据库中。 Google 发布了一个用于处理数据库的新 API,称为 Room developer.android.com/training/data-storage/room/index.html

以上是关于如何保存数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中保存数组数据?

如何保存数组?

C++如何把位图保存到数组中

如何在 xCode 中保存 UIimages 数组(swift)

如何 YAML 保存 numpy 数组

如何在 Python 中将对象数组保存到文件中