如何保存和获取存储在共享首选项中的包名称?

How can i save and get the package names stored in shared preference?

我有已安装应用程序的列表,当我单击其中任何一个时,我可以获得单击的应用程序的包名称,现在我想将单击的包名称保存在字符串的 ArrayList 到 SharedPreferences 与 Gson 中。并获取保存的包名称。

我检查了一些以前的答案,但没有得到我想要的解决方案。

这是我要保存点击应用程序包名称的代码。

   String ApplicationPackageName =  adapter.stringList.get(position);
        SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(ApplicationPackageName);
        editor.putString("task list", json);
        editor.apply();

这是我要获取保存的包名称的代码。

   SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
       Gson gson = new Gson();
       String json = sharedPreferences.getString("task list", null);
       Type type = new TypeToken<ArrayList<String>>() {}.getType();
       arrayList = gson.fromJson(json, type);

       if (arrayList == null) {
           arrayList = new ArrayList<>();
       }

但是我收到了这个错误。 Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $

有帮助吗?

在您的构建中,gradle请添加

实施'com.google.code.gson:gson:2.8.5'

那么请检查下面的代码。

 package testproject.etisatlat.com.test;

    import android.app.Activity;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;

    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;

    import java.lang.reflect.Type;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Locale;

    public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            List<String> test=new ArrayList<>();
            test.add("a");
            test.add("b");
            test.add("c");
            savePackages(test,"SAVE_LIST");
            List<String> savedList=getPackagesList("SAVE_LIST");
        }

        public void savePackages(List<String> packagesList, String key){
            SharedPreferences SharedPreferences= getSharedPreferences("APP_SHARED_PREFS", Activity.MODE_PRIVATE);

            SharedPreferences.Editor editor = SharedPreferences.edit();
            Gson gson = new Gson();
            String json = gson.toJson(packagesList);
            editor.putString(key, json);
            editor.apply();

        }

        public List<String> getPackagesList(String key){
            SharedPreferences SharedPreferences= getSharedPreferences("APP_SHARED_PREFS", Activity.MODE_PRIVATE);
            Gson gson = new Gson();
            String json = SharedPreferences.getString(key, null);
            Type type = new TypeToken<ArrayList<String>>() {}.getType();
            return gson.fromJson(json, type);
        }
    }