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