You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中PreferenceManager构造方法访问权限错误求助

问题分析

你遇到的两个核心错误原因:

  1. 系统android.preference.PreferenceManager的构造函数为包私有权限,无法直接通过new关键字实例化
  2. getString()调用缺少必要参数(键名+默认值),且变量类型与实际使用场景不匹配

解决步骤

1. 修正成员变量类型

将PreferenceManager类型改为SharedPreferences(实际存储数据的容器):

// 原代码
public PreferenceManager preferenceManagers;
// 修改后
public SharedPreferences preferenceManagers;

2. 修正初始化逻辑

替换所有new PreferenceManager(...)的代码,使用系统提供的静态方法获取默认SharedPreferences实例:

// 原代码(第85行、第271行)
preferenceManagers = new PreferenceManager(getApplicationContext());
// 修改后
preferenceManagers = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

3. 修复getString()调用错误

SharedPreferences.getString()必须传入两个参数:存储键名、默认值(键不存在时返回),同时补全语法错误:

  • 第275行(init()方法内):
// 原代码
chatAdapter = new MessagesAdapter(
        chatMessage,
        preferenceManagers.getString()
)
// 修改后(替换Constants.KEY_USER_ID为你实际存储用户ID的键名)
chatAdapter = new MessagesAdapter(
        chatMessage,
        preferenceManagers.getString(Constants.KEY_USER_ID, "")
);

注意:末尾补充分号,修复语法缺失问题。

  • 第423行(checkForConversation()方法内):
    原调用缺少checkForConversationRemotely方法要求的第二个参数,同时修正getString():
// 原代码
checkForConversationRemotely(
        preferenceManagers.getString()
);
// 修改后
checkForConversationRemotely(
        preferenceManagers.getString(Constants.KEY_USER_ID, ""),
        receiverUid
);

4. 补全语法缺失

init()方法末尾缺少分号,修正后完整代码:

private void init(){
    preferenceManagers = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    chatMessage = new ArrayList<>();
    chatAdapter = new MessagesAdapter(
            chatMessage,
            preferenceManagers.getString(Constants.KEY_USER_ID, "")
    );
}

关键说明

  • PreferenceManager是管理SharedPreferences的工具类,本身不是数据存储容器,实际操作数据的是SharedPreferences对象,必须通过静态方法获取
  • 确保Constants类中定义了对应的键名(如KEY_USER_ID),如果未定义,直接传入你实际使用的字符串键即可

内容的提问来源于stack exchange,提问作者KING

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:36:28