大海话语 2022-01-08 17:03 采纳率: 87.6%
浏览 52
已结题

如何在SharedPreferences自定的类里面,做截住去访问服务器的动作?

我现在要做一个让项目里面的类,统一访问一个SharedPreferences里面的用户ID,那么,我写一个类,用来只作userId的访问,在里面,如果userId为空的话, 也就是没有登录过,那么,让用户去登录或者弹出Toast,但是,我写的一个方法是

public String getUserId() {
        if (userId!=null || !"".equals(userId)){
            return userId;
        }else
        return "请登录";
    }

显然不对,它怎么样,都会给调用的类,返回信息,且,其它类,调用时,就在OkHttp的网络线程上调用的,是不能Toast的,

img


如果想要在一个访问服务器的Manager类中设置如果userId为空的话,就显示一个请登录或Toast一个信息。那么,如果这个类没有extends AppcompatActivity的话,怎样让,在不访问服务端之前,就让其截住要访问的这个动作呢。。
不能每次都让它访问了,再从后端 返回 一个信息,什么 用户ID不能为呀,这些的信息,也不合适哈。减少服务端的压力嘛。。
在SharedPrConst类里面判断,userId为空的话,就跳转到登录界面或Toast?。。该怎么做呢?
下面是自定的 SharedPrConst 做userId查询的

public class SharedPrConst extends AppCompatActivity {

    private static SharedPrConst mInstance = null;

    public static SharedPrConst getInstant() {
        if (mInstance == null) {
            //加线程通路锁
            synchronized (SharedPrConst.class) {
                if (mInstance == null) {
                    mInstance = new SharedPrConst();
                }
            }
        }
        //返回唯一对象
        return mInstance;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    private SharedPreferences sp = ActivityUtils.getTopActivity().getSharedPreferences("userInformation", Context.MODE_PRIVATE);
    public String userId = sp.getString("userId", "");

    public String getUserId() {
        if (userId!=null || !"".equals(userId)){
            return userId;
        }else
        return "请登录";
    }

  • 写回答

3条回答 默认 最新

  • 普通网友 2022-01-08 23:50
    关注

    把SharedPreference写成公共类,然后在 Application下面挂载,全局可用;
    还可以用静态方法的形式来 处理;


    注意,楼上 说的在okhttp的拦截器中处理,需要考虑多线程 的问题;
    因为SharedPreference不是线程安全。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月18日
  • 已采纳回答 1月10日
  • 创建了问题 1月8日

悬赏问题

  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元