Spinner 保存 记录状态 出现问题 以及 使用方法

Spinner 保存上次 浏览记录 方法

小编今天 项目中 遇到 一个 保存上次浏览记录 的情况 因为使用的 Spinner 所以 只是针对于 使用Spinner 系统插件的 小伙伴
先看下效果 注意 教材列表 选中的教材
在这里插入图片描述
第一次进去的时候显示的是 七年级上册 然后我进去之后选择的是八年级 下册 点击返回键 然后在进去 默认选择 八年级下册 成功
,但是在这里之前 小编 遇到了很多问题 ,因为 首先 看段代码

  spYuxi.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
                if (position < jiaocaiList.size()) {
                    spYuxi.setPrompt(jiaocaiList.get(position).getSubjectname() + "-" + jiaocaiList.get(position).getBookname());
                    lsbid = jiaocaiList.get(position).getLsbid();
                    zhangjieList.clear();
                    yuxiList.clear();
                    page = 1;    //当每次选择 新教材的时候  因为详情都要重新加载所以 将页数设置 1
                    yuxiPresenter.setDataartice(lsbid, 1);  //教材选择之后全部数据

                    remember_number = position;


                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

** 注意:代码中的: spYuxi 是我的spinner 控件变量名** 在上段代码中 大家可以看出来 这个监听事件 不是一个点击的监听事件 ,他就是用来监听 spinner 中列表 改变的 监听 ,相信大家 也遇到过一些问题 比如说 在项目中 一进来之后 他的这个监听状态 就直接 走了 并且默认 position 是0 所以 当咱们 需要有记录 历史 的这个功能的时候 就有些头疼 我当时 也是从网上 搜了很久 才搜到一篇 精髓 我先给大家截个图 先看关键位置 然后再看下 我的代码
在这里插入图片描述
下边加上我的代码

package com.xhly.easystud.zhan.studentyuxi;

import android.app.AlertDialog;
import android.app.backup.SharedPreferencesBackupHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.RecyclerView;

import com.alibaba.fastjson.JSON;
import com.dueeeke.videoplayer.util.L;
import com.example.juanshichang.base.Api;
import com.example.juanshichang.base.JsonParser;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.xhkjedu.sxb.api.re.SchoolService;
import com.xhly.easystud.MyApp;
import com.xhly.easystud.R;
import com.xhly.easystud.api.ApiManager;
import com.xhly.easystud.base.BaseMvpActivity;
import com.xhly.easystud.bean.ResultVo;
import com.xhly.easystud.bean.StudentYuxiBean;
import com.xhly.easystud.bean.SyncVideoArticeBean;
import com.xhly.easystud.bean.SyncVideoTextBookBean;
import com.xhly.easystud.http.Content;
import com.xhly.easystud.http.SingleMap;
import com.xhly.easystud.ui.fragment.ResourseFragment;
import com.xhly.easystud.utils.LogTool;
import com.xhly.easystud.utils.RxScheduler;
import com.xhly.easystud.utils.SharedPreferencesUtil;
import com.xhly.easystud.utils.StartUtil;
import com.xhly.easystud.utils.Util;
import com.xhly.easystud.widget.LiveDataBus;
import com.xhly.easystud.zhan.studentyuxi.contreactyuxi.ContractYuxi;
import com.xhly.easystud.zhan.studentyuxi.presenter.YuxiPresenterImpl;
import com.xhly.easystud.zhan.xyncvideo.SynvVideoArticeAdapter;

import org.angmarch.views.NiceSpinner;
import org.angmarch.views.OnSpinnerItemSelectedListener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.reactivex.functions.Consumer;

/**
 * 作者:NB的LittleWhite
 * <p>
 * 邮箱:[email protected]
 */
public class YuxiActivity extends BaseMvpActivity<YuxiPresenterImpl> implements View.OnClickListener, ContractYuxi.MyView {
    private static final String TAG = "YuxiActivity";
    Integer page = 1;
    Integer pageSize = 10;
    Integer schoollevel = 0;
    Integer createid = 0;     //用户id
    Integer schoolid = 0;     //学校id
    Integer lsbid = 0;        //教材id
    Integer directorid = 0;   //章节id
    Integer subjectid = 0;    //科目id
    private TextView tvBack;
    private SmartRefreshLayout smartYuxi;
    private RecyclerView relvYuxi;
    private YuxiPresenterImpl yuxiPresenter;
    private RelativeLayout rlytEmpty;
    private ArrayList<SyncVideoTextBookBean.ObjBean> jiaocaiList;
    private ArrayList<SyncVideoArticeBean.ObjBean> zhangjieList;
    private ArrayList<StudentYuxiBean> yuxiList;
    private RecyclerView relvZhangjie;
    private SynvVideoArticeAdapter synvVideoArticeAdapter;
    private StudentYuxiAdapter studentYuxiAdapter;
    private CheckBox chkAll;
    private FrameLayout listAll;
    private RelativeLayout rlytEmpty1;
    private LiveDataBus bus = LiveDataBus.get();
    private Integer resourceid = 0; //资源id
    private long starttime = 0;    //开始时间
    private Integer classid = 0;   //课堂id
    private Integer groupid = 0;   //组id
    private Integer user = 0;         //学生id
    private Spinner spYuxi;        //教才
    private Integer remember_number = 0;        //记录上次的位置
    private HashMap<Integer, Integer> remember_number_map;


    @Override
    protected int getContentView() {
        return R.layout.activity_yuxi;
    }


    @Override
    protected void initView() {
        changeStatusColor(true);

        tvBack = findViewById(R.id.tv_back);
        smartYuxi = findViewById(R.id.smart_yuxilist);
        listAll = findViewById(R.id.listAll);
        rlytEmpty1 = findViewById(R.id.rlyt_empty1);
        chkAll = findViewById(R.id.chk_all);
        rlytEmpty = findViewById(R.id.rlyt_empty);
        spYuxi = findViewById(R.id.sp_yuxi);
        relvZhangjie = findViewById(R.id.relv_zhangjie); //章节列表
        relvYuxi = findViewById(R.id.relv_yuxi);         //预习详情列表
        jiaocaiList = new ArrayList<>();    //教材列表
        zhangjieList = new ArrayList<>();   //章节列表
        yuxiList = new ArrayList<>();       //预习详情列表

        remember_number_map = new HashMap<>();
        synvVideoArticeAdapter = new SynvVideoArticeAdapter(this, zhangjieList);   //章节Adapter
        studentYuxiAdapter = new StudentYuxiAdapter(this, yuxiList);    //预习详情Adapter

        relvZhangjie.setAdapter(synvVideoArticeAdapter);
        relvYuxi.setAdapter(studentYuxiAdapter);


        yuxiPresenter = new YuxiPresenterImpl();
        yuxiPresenter.attachView(this);

        jiaocaiListOnclick(); //教材列表的点击事件
        ZhangjieListOnclick(); //章节列表的点击事件
        YuxiListOnclick();   //预习详情的点击事件


        chkAll.setChecked(true);
        chkAll.setTextColor(getResources().getColor(R.color.white));
        chkAll.setBackgroundColor(getResources().getColor(R.color.searchTc));


        initonclicklistener();
        bus.with("timeGo", Long.class).observe(this, new Observer<Long>() {
            @Override
            public void onChanged(Long endlong) {
                if (endlong > starttime) {
                    Long huafeitime = endlong - starttime;
                    browsinghistory(huafeitime); //请求学生浏览记录
                }
            }
        });
    }


    private void initonclicklistener() {
        tvBack.setOnClickListener(this);
        chkAll.setOnClickListener(this);
    }

    @Override
    protected void initData() {
        showLoading();

        //获取教材列表
        getJiaocaiList();

    }

    private void getJiaocaiList() {
        createid = SharedPreferencesUtil.getUser(MyApp.instance).getUserid();   //获取到用户id
        schoolid = SharedPreferencesUtil.getUser(MyApp.instance).getSchoolid();  //获取学校id
        schoollevel = SharedPreferencesUtil.getUser(MyApp.instance).getSchoollevel();//学校类型
        subjectid = getIntent().getIntExtra("subjectid", 0);  //获取到科目id

        if (createid != null && schoolid != null && subjectid != null && schoollevel != null) {
            yuxiPresenter.setDataInfo(schoolid, schoollevel, subjectid);
        }
    }


    //教材数据
    @Override
    public void setdata(List<SyncVideoTextBookBean.ObjBean> syncvideotextbookbean) {
        jiaocaiList.clear();

        if (syncvideotextbookbean.size() > 0 && syncvideotextbookbean != null) {
            jiaocaiList.addAll(syncvideotextbookbean);
            ArrayList<String> jiaocainame = new ArrayList<>();
            for (int i = 0; i < syncvideotextbookbean.size(); i++) {
                jiaocainame.add(syncvideotextbookbean.get(i).getSubjectname() + " - " + syncvideotextbookbean.get(i).getBookname());
            }

            ArrayAdapter<String> jiaocaiadapter = new ArrayAdapter<>(this, R.layout.fragment_jiaocai, R.id.tv_content, jiaocainame);
            spYuxi.setDropDownVerticalOffset(spYuxi.getHeight() * 2 / 7 * 6); //下拉的纵向偏移
            spYuxi.setDropDownWidth(relvZhangjie.getWidth());  //设置宽度
            spYuxi.setAdapter(jiaocaiadapter);

            String number_map = SharedPreferencesUtil.getString(MyApp.instance, Content.REMEMBER_NUMBER_MAP, null);
            remember_number_map = JSON.parseObject(number_map, HashMap.class);

            for (Integer key : remember_number_map.keySet()) {
                if (key == subjectid) {   //获取到 map 中 的 key  跟 进入的 科目id 相比 一样的话 存进去
                    Integer mRemember_number = remember_number_map.get(key);
                    spYuxi.setSelection(mRemember_number, true);
                    if (mRemember_number != -1) {
                        spYuxi.setPrompt(jiaocaiList.get(mRemember_number).getSubjectname() + "-" + jiaocaiList.get(mRemember_number).getBookname());
                        lsbid = jiaocaiList.get(mRemember_number).getLsbid();
                        zhangjieList.clear();
                        yuxiList.clear();
                        page = 1;    //当每次选择 新教材的时候  因为详情都要重新加载所以 将页数设置 1
                        yuxiPresenter.setDataartice(lsbid, 1);  //教材选择之后全部数据
                    }
                }

            }
            jiaocaiadapter.notifyDataSetChanged();

        }


        if (jiaocaiList.size() > 0) {
            rlytEmpty1.setVisibility(View.GONE);
        } else {
            rlytEmpty1.setVisibility(View.VISIBLE);
            rlytEmpty.setVisibility(View.VISIBLE);
            chkAll.setVisibility(View.GONE);
        }

    }

    //章节数据
    @Override
    public void setarticle(List<SyncVideoArticeBean.ObjBean> syncvideoarticebean) {
        relvZhangjie.setVisibility(View.VISIBLE);
        zhangjieList.clear();
        yuxiList.clear();
        if (syncvideoarticebean.size() > 0) {
            for (int i = 0; i < syncvideoarticebean.size(); i++) {
                SyncVideoArticeBean.ObjBean objBean = syncvideoarticebean.get(i);
                zhangjieList.add(objBean);
                addArticeChild(objBean);
            }
        } else {
            rlytEmpty.setVisibility(View.VISIBLE);
        }


        synvVideoArticeAdapter.notifyDataSetChanged();
        directorid = 0;
        renderDirectorList();

    }

    private void addArticeChild(SyncVideoArticeBean.ObjBean objBean) {
        if (objBean.getChildren().size() > 0 && objBean != null) {
            List<SyncVideoArticeBean.ObjBean> childDirectors = objBean.getChildren();
            for (int i = 0; i < childDirectors.size(); i++) {
                zhangjieList.add(childDirectors.get(i));
                addArticeChild(childDirectors.get(i));
            }
        }
    }


    //预习详情列表
    @Override
    public void getYuciList(List<StudentYuxiBean> studentYuxiBean) {
        if (studentYuxiBean.size() > 0) {
            yuxiList.addAll(studentYuxiBean);
        }
        if (yuxiList.size() > 0) {
            rlytEmpty.setVisibility(View.GONE);
        } else {
            rlytEmpty.setVisibility(View.VISIBLE);
        }
        studentYuxiAdapter.notifyDataSetChanged();
        initsmartrefresh();


    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.tv_back:
                finish();
                break;
            case R.id.chk_all:
                directorid = 0;
                page = 1;
                yuxiList.clear();
                renderDirectorList();
                break;
        }
    }


    private void renderDirectorList() {

        if (directorid == 0) {
            chkAll.setTextColor(getResources().getColor(R.color.white));
            chkAll.setBackgroundColor(getResources().getColor(R.color.searchTc));

            for (int i = 0; i < zhangjieList.size(); i++) {
                SyncVideoArticeBean.ObjBean objBean = zhangjieList.get(i);
                objBean.setChecked(false);
            }
            synvVideoArticeAdapter.notifyDataSetChanged();
        } else {
            chkAll.setTextColor(getResources().getColor(R.color.black));
            chkAll.setBackgroundColor(getResources().getColor(R.color.white));
            for (int i = 0; i < zhangjieList.size(); i++) {
                SyncVideoArticeBean.ObjBean objBean = zhangjieList.get(i);
                objBean.setChecked(objBean.getDirectorid() == directorid);
            }
            synvVideoArticeAdapter.notifyDataSetChanged();
        }
        yuxiPresenter.setYuxidat(lsbid, directorid, page, pageSize, createid, schoolid); //预习详情列表
    }


    private void jiaocaiListOnclick() {
        spYuxi.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
                if (position < jiaocaiList.size()) {
                    spYuxi.setPrompt(jiaocaiList.get(position).getSubjectname() + "-" + jiaocaiList.get(position).getBookname());
                    lsbid = jiaocaiList.get(position).getLsbid();
                    zhangjieList.clear();
                    yuxiList.clear();
                    page = 1;    //当每次选择 新教材的时候  因为详情都要重新加载所以 将页数设置 1
                    yuxiPresenter.setDataartice(lsbid, 1);  //教材选择之后全部数据

                    remember_number = position;


                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

    }

    private void ZhangjieListOnclick() {

        synvVideoArticeAdapter.setOnclickListener(new SynvVideoArticeAdapter.setOnclick() {
            @Override
            public void setOnitemonclick(View view, int position, SyncVideoArticeBean.ObjBean bean) {
                SyncVideoArticeBean.ObjBean objBean = zhangjieList.get(position);
                page = 1;
                directorid = objBean.getDirectorid();

                if (bean.getLeaf() == 1) {
                    for (int i = 0; i < zhangjieList.size(); i++) {
                        SyncVideoArticeBean.ObjBean objBean1 = zhangjieList.get(i);
                        objBean1.setChecked(position == i);
                    }
                    yuxiList.clear();
                    renderDirectorList();
                }

            }
        });

    }


    private void YuxiListOnclick() {
        studentYuxiAdapter.setStudentYuxiOnclick(new StudentYuxiAdapter.setonclick() {


            @Override
            public void setItemOnclick(int position, StudentYuxiBean item) {
                //记录开始时间
                starttime = System.currentTimeMillis() / 1000;
                resourceid = item.getResourceid();
                classid = item.getClassid();
                groupid = item.getGroupid();
                user = SharedPreferencesUtil.getUser(MyApp.instance).getUserid();

                String resourceurl = item.getResourceurl();
                String suffix = item.getSuffix();           //文件后缀类型
                String resourcename = item.getResourcename();
                int resouceType = yuxiPresenter.getResouceType(suffix);
                Bundle bundle = new Bundle();
                bundle.putInt("type", resouceType);
                bundle.putString("download", resourceurl);
                bundle.putString("name", resourcename);
                ResourseFragment resourseFragment = new ResourseFragment();
                StartUtil.Companion.ActGoFrg(YuxiActivity.this,
                        resourseFragment,
                        R.id.listAll,
                        "resourse",
                        bundle,
                        false);
            }
        });

    }


    private void initsmartrefresh() {

        smartYuxi.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                page = 1;
                yuxiList.clear();
                renderDirectorList();
                refreshLayout.finishRefresh();
            }
        });

        smartYuxi.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
                page++;
                renderDirectorList();
                refreshLayout.finishLoadMore();
            }
        });
    }

    private void browsinghistory(long huafeitime) {
        SchoolService mSchoolService = ApiManager.getInstance().mSchoolService;
        HashMap browsinghistorymap = SingleMap.Companion.get();
        browsinghistorymap.put("resourceid", resourceid);
        browsinghistorymap.put("studentid", user);
        browsinghistorymap.put("costtime", huafeitime);

//        browsinghistorymap.put("classid", classid);
//        browsinghistorymap.put("groupid", groupid);

        mSchoolService.getStudentbrowsinghistory(Util.Companion.map2Body(browsinghistorymap))
                .compose(RxScheduler.Flo_io_main())
                .as(bindAutoDispose())
                .subscribe(new Consumer<ResultVo<String>>() {
                    @Override
                    public void accept(ResultVo<String> stringResultVo) throws Exception {
                        if (stringResultVo.getCode() == 0) {
                            L.d(stringResultVo.getMsg());
                        } else {
                            L.d(stringResultVo.getMsg());
                        }
                        hideLoading();
                    }

                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        hideLoading();
                    }
                });


    }


    @Override
    protected void onStop() {
        super.onStop();
        if (remember_number_map != null) {

        } else {
            remember_number_map = new HashMap<Integer, Integer>();
        }

        if (remember_number == null) {
            remember_number_map.put(subjectid, 0);
        } else {
            remember_number_map.put(subjectid, remember_number);

        }
        SharedPreferencesUtil.putString(MyApp.instance, Content.REMEMBER_NUMBER_MAP, JSON.toJSONString(remember_number_map));
    }
}

然后 关键的几个步骤 就是stop的中方法

因为是在退出的时候 要记录一下 位置 所以 在stop 中使用Sp存起来  小编当时就是犯了这个错误  在spinner 监听的方法 中去存取 走了很多坑
    @Override
    protected void onStop() {
        super.onStop();
        if (remember_number_map != null) {

        } else {
            remember_number_map = new HashMap<Integer, Integer>();
        }

        if (remember_number == null) {
            remember_number_map.put(subjectid, 0);
        } else {
            remember_number_map.put(subjectid, remember_number);

        }
        SharedPreferencesUtil.putString(MyApp.instance, Content.REMEMBER_NUMBER_MAP, JSON.toJSONString(remember_number_map));
    }
}

其次需要 来一个 成员变量 用来 记录 spinner 点击的position
在这里插入图片描述
然后在给大家看下成员变量在这里 哪里用到了
在这里插入图片描述

注意下边的map集合 是在后边有关键性的作用 是为了解决 一个项目 同一个模块下 用到 很多Spinner 的情况很关键 要是只用到 一个的话 下边就不用看了
然后现在将另外一种情况 大家在看上边视频的时候想必 都注意到了 因为我的项目 是一个学校的项目 所以 在这个模块中 有很多的 科目(语文,数学,英语…) 然后每个科目下都要记录 这就很烦 因为要是仅仅 只是用上边的 几步 写法的话 你改变一个其他的都会跟着一起变 或者 其他的几个科目 会跟随 其中的一门课程 改变 所以 在这里咱们 需要用到 一个 map集合 使用 Key value 的形式 key 指的是 每一门课程 然后 给每一门课程 都记录一下 position 这样 课程之间就不会冲突 我先按着顺序 给大家 截个图 方便大家看

首先不变的是 步骤一

成员变量不能少 做记录用
在这里插入图片描述

步骤二

在这里插入图片描述

步骤三

将Spinner 赋值 设置宽度高度 然后接下来就是 高端操作注意看
在这里插入图片描述
在这里大家可以看到我获取到 SP 然后将获取到的字符串 转化Hashmap集合 这点 就节省了很多转换时间 小编因为是个小白 所以 觉得很吊 然后将 转换完 的map 集合 中的 key 指得是科目id 所以这个时候 就需要做一个判断 key 要是跟进入界面 获取到的 科目id 相等 的话 相当于咱们进去 的就是咱们所需要操作的界面
然后 这个时候 根据 key 获取到 position 存起来 这就很完美 也就是上述的三部操作

在这里插入图片描述

步骤四 也就是监听部分

在这里插入图片描述
第四部跟简单 也就是在监听完成之后 将监听中的position 赋值给 成员变量

步骤五 最后一步

在这里插入图片描述
**大家注意一下 我在 stop中做了一个 map 结合不等于null 的判断 这一步 必须 得有 因为 用户有可能会有 进入 错科目之后 没有任何操作 就直接点击返回的 操作 像这种情况 如果不加判断的话 就直接 崩溃 map集合 为空 所以 这点注意 **
最后献上我的 Sp工具类

package com.xhly.easystud.utils;

import android.content.Context;
import android.content.SharedPreferences;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.xhkjedu.xhstudy.utils.L;
import com.xhly.easystud.bean.UserBean;
import com.xhly.easystud.http.Content;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;

public class SharedPreferencesUtil {
    //文件名称为config
    private static final String PREFERENCE_NAME = "config";
    //可以在此定义常亮,当做key使用
    private static final String APPKEY = "app_key";
    //版本号
    public static final String APK_VERSION = "APK_VERSION";
    //下载地址
    public static final String APK_DOWNLOAD_URL = "APK_DOWNLOAD_URL";

    private static SharedPreferences sharedPreferences;

    /**
     * 写入Boolean变量至sharedPreferences中
     *
     * @param context 上下文环境
     * @param key     存储节点名称
     * @param value   存储节点的值
     */
    public static void putBoolean(Context context, String key, boolean value) {
        //(存储节点文件名称,读写方式)
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        }
        sharedPreferences.edit().putBoolean(key, value).commit();
    }

    /**
     * 读取boolean标识从sharedPreferences中
     *
     * @param context 上下文环境
     * @param key     存储节点名称
     * @param value   没有此节点的默认值
     * @return 默认值或者此节点读取到的结果
     */
    public static boolean getBoolean(Context context, String key, boolean value) {
        //(存储节点文件名称,读写方式)
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        }
        return sharedPreferences.getBoolean(key, value);
    }

    /**
     * 写入String变量至sharedPreferences中
     *
     * @param context 上下文环境
     * @param key     存储节点名称
     * @param value   存储节点的值String
     */
    public static void putString(Context context, String key, String value) {
        //存储节点文件的名称,读写方式
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        }
        sharedPreferences.edit().putString(key, value).commit();
    }

    /**
     * 读取String标识从sharedPreferences中
     *
     * @param context  上下文环境
     * @param key      存储节点名称
     * @param defValue 没有此节点的默认值
     * @return 返回默认值或者此节点读取到的结果
     */
    public static String getString(Context context, String key, String defValue) {
        //存储节点文件的名称,读写方式
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        }
        return sharedPreferences.getString(key, defValue);
    }


    /**
     * 创建 存秘钥的 Appkey xml文件
     *
     * @param context 上下文环境
     */
    public static void putAppkeyString(Context context, String defValue) {
        //存储节点文件的名称,读写方式
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(APPKEY, Context.MODE_PRIVATE);
        }
        sharedPreferences.edit().putString(Content.APPKEYCONTENT, defValue).commit();
    }

    /**
     * 读取String标识从sharedPreferences中
     *
     * @param context 上下文环境
     */
    public static String getAppkeyString(Context context, String defValue) {
        //存储节点文件的名称,读写方式
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(APPKEY, Context.MODE_PRIVATE);
        }
        return sharedPreferences.getString(Content.APPKEYCONTENT, defValue);
    }


    /**
     * 写入int变量至sharedPreferences中
     *
     * @param context 上下文环境
     * @param key     存储节点名称
     * @param value   存储节点的值String
     */
    public static void putInt(Context context, String key, int value) {
        //存储节点文件的名称,读写方式
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        }
        sharedPreferences.edit().putInt(key, value).commit();
    }

    /**
     * 读取int标识从sharedPreferences中
     *
     * @param context  上下文环境
     * @param key      存储节点名称
     * @param defValue 没有此节点的默认值
     * @return 返回默认值或者此节点读取到的结果
     */
    public static int getInt(Context context, String key, int defValue) {
        //存储节点文件的名称,读写方式
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        }
        return sharedPreferences.getInt(key, defValue);
    }

    /**
     * 从sharedPreferences中移除指定节点
     *
     * @param context 上下文环境
     * @param key     需要移除节点的名称
     */
    public static void remove(Context context, String key) {
        //存储节点文件的名称,读写方式
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        }
        sharedPreferences.edit().remove(key).commit();
    }


    public static void setUser(Context context, UserBean.User entity) {
        //存储节点文件的名称,读写方式
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        }
        sharedPreferences.edit().putString("loginUser", JSON.toJSONString(entity)).commit();

    }


    public static UserBean.User getUser(Context context) {
        sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        String loginUser = sharedPreferences.getString("loginUser", null);
        return JSON.parseObject(loginUser, UserBean.User.class);
    }

    /**
     * 删除
     *
     * @param
     */
    public static void getDelete(Context context) {
        SharedPreferences.Editor editor = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE).edit();
        editor.clear();
    }
}

然后给大家看一下我的sp中每一门科目下保存的值 使用map集合很方便 这样的话 有几门科目 就会在 map中添加一个 key value 要是点击重复的科目 里边的 教材的话 后边的新值 会覆盖 以前的旧值 所以不用担心 map集合中相同的科目下 这一值创建新值 的问题
在这里插入图片描述
然后在附上我的 Content类
在这里插入图片描述
ok 以上都是小编自己的 操作 希望大神们不要嘲笑 小编就是个小白 要是有 不懂的可以随时问我 ,小编 也只谢了几遍文章,在编辑文章方面 还需要改进 要是各位观众姥爷 有意见 可以给我说 咱们一共进步 谢谢

猜你喜欢

转载自blog.csdn.net/weixin_43430682/article/details/107617694