大海话语 2022-01-10 11:36 采纳率: 87.9%
浏览 38
已结题

想要在SharedPreferences自定的公共类里面,做截住去访问服务器的动作?

项目里面的类,统一访问一个SharedPreferences里面的用户ID,用来只作userId的访问,在里面,如果userId为空的话,就截断,不让其访问服务器,但是,这个方法,写的是必须返回一个String,所以,再怎么,也才会返回一个数据,那么,那边拿到数据就会去访问服务端。所以,我想在这个SharedPr类中,就截断了去访问的动作,如果有userId,那么就返回。否则,就去登录页面。不知道怎么做呀。。
下面是SharedPrConst 类 做userId查询

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.blankj.utilcode.util.ActivityUtils;
import com.hnsaturn.tuxing003.ui.universal.LoginAc;

public class SharedPrConst extends AppCompatActivity {

    private static SharedPrConst mInstance = null;
    private String userSharedPr = SharedPrDateName.userSharedPr;

    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 sharedPreferences = getApplicationContext().getSharedPreferences(userSharedPr, Context.MODE_PRIVATE);
//    public String userId = sharedPreferences.getString("userId", "");

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

    // 判断得到值为null则为没有登录
    public String getUserIdHaveInterceptor(Context context) {
        if (TextUtils.isEmpty(userId)) {
            Toast.makeText(context, "请登录", Toast.LENGTH_SHORT).show();
            // 跳转登录界面
            Intent intent = new Intent(SharedPrConst.this, LoginAc.class);
            context.startActivity(intent);
            return null;
        } else {
            return userId;
        }
    }
    public String getUserId() {
        if (userId!=null || !"".equals(userId)){
            return userId;
        }else
        return "请登录";
    }

}

下面是调用的类哈

img

将SharedPr里面的跳转context改为为 接收的context 也不行

img

  • 写回答

4条回答 默认 最新

  • 虾米~ 2022-01-10 16:05
    关注

    一般都是在请求之前做判断的吧,拉起请求再来判断用户是否登录,不太好的样子。
    把判断用户是否登录抽取成全局静态方式返回boolean使用,每次先调用方法判断登录再做后续操作吧
    不过你想在网络请求那判断也可以,OkHttp可以添加拦截器Interceptor,你可以百度看看使用方法,涉及到网络请求肯定也写不到SharedPreferences里面去了。

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

报告相同问题?

问题事件

  • 系统已结题 1月18日
  • 已采纳回答 1月10日
  • 修改了问题 1月10日
  • 修改了问题 1月10日
  • 展开全部

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证