如何保存数组?

时间:2017-12-20 16:12:59

标签: java android arrays save storage

我有一个基本应用程序,用于填充数组并将其显示在列表视图中。当我关闭应用程序并重新打开它时,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();
            }
        }
    }




}

1 个答案:

答案 0 :(得分: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数据库,但如果您是初学者,我会倾向于将数组存储在共享首选项中,因为设置的代码要少得多。