首页 > 解决方案 > 在Android中创建应用程序时如何只创建一次变量?

问题描述

我正在创建一个安卓应用程序。在我的应用程序中,我需要一个在首次创建应用程序时只初始化一次的变量。即使应用程序更新,它也不应该被初始化。我补充说,“进入”。因此,每当我打开应用程序时,我都应该拥有ArrayList包含entered字符串的应用程序。

ArrayList<String> strings=new ArrayList<String>();
strings.add("entered");

标签: javaandroid

解决方案


正如@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);
        }
    }
}

推荐阅读