java - 在Android中创建应用程序时如何只创建一次变量?
问题描述
我正在创建一个安卓应用程序。在我的应用程序中,我需要一个在首次创建应用程序时只初始化一次的变量。即使应用程序更新,它也不应该被初始化。我补充说,“进入”。因此,每当我打开应用程序时,我都应该拥有ArrayList
包含entered
字符串的应用程序。
ArrayList<String> strings=new ArrayList<String>();
strings.add("entered");
解决方案
正如@blackapps 提到的,您可以使用共享首选项
在 MainActivity.java 中:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
String yourVariable = sharedPref.getString(getString(R.string.nameOfValue), getString(R.string.defaultValue));
if (yourVariable.equals(getString(R.string.defaultValue))) //app was run for 1st time
{
editor.putString(getString(R.string.nameOfValue), "String which You want to save"); //value that You want to put
editor.apply();
}
else
{
// app wasn't run for 1st time
}
}
在字符串.xml
<string name="nameOfValue">NAME_OF_VALUE</string>
<string name="defaultValue">DEFAULT_VALUE</string>
我保存了String
,但您可以在共享首选项中保存任何类型。
编辑:
要保存 ArrayList 您可以使用GSON
首先将依赖项添加到成绩和同步项目:
implementstion 'com.google.code.gson:gson:2.8.6'
然后使用以下代码:
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
boolean firstRun = sharedPref.getBoolean(getString(R.string.firstRun), true);
ArrayList<String> arrayList;
Gson gson = new Gson();
if (firstRun) //app was run for 1st time
{
System.out.println("First run");
// initialize array as You want
arrayList = new ArrayList<>();
arrayList.add("Some string");
String arrayJSON = gson.toJson(arrayList);
// add values to SharedPreferences
editor.putString(getString(R.string.nameOfValue), arrayJSON);
editor.putBoolean(getString(R.string.firstRun), false);
// apply changes
editor.apply();
}
else // app wasn't run for 1st time
{
System.out.println("Not first run");
String arrayJSON = sharedPref.getString(getString(R.string.nameOfValue), getString(R.string.defaultValue));
arrayList = gson.fromJson(arrayJSON, new TypeToken<ArrayList<String>>()
{
}.getType());
}
for (String s : arrayList)
{
System.out.println(s);
}
}
}
推荐阅读
- domain-name - 如何编写代码来获取过期域?
- flutter - Flutter TextField maxLength 未强制执行
- c# - 如何匹配数据库中的表和模式名称?
- web2py - 常用过滤器,如何访问相关记录?
- java - Microsoft Graph Api 今天提供过期设备代码
- sql-server - SQL Server 2016 - 临时表保留过去的子进程?
- python - Python。获取包含周数的列表
- python - 如何从本地 FTP 服务器获取目录列表
- salesforce - 如何使用来自外部服务的数据更新新联系人?
- camera - Unreal 4.25 - Player Camera Manager - 我如何获得音高?