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

升级SDK至32后遇权限错误:getParams()重写时权限弱化问题

解决SDK升级到32后getParams()方法冲突问题

问题根源

Android 12(SDK 31)及以上版本的ContextWrapper类新增了一个public的getParams()方法,返回类型为Bundle。你的自定义类(如Activity/Fragment)间接继承了ContextWrapper,导致你自己的getParams()方法(返回HashMap<String,String>)和系统方法重名且返回类型不兼容。即使改成public并添加@Override也无法解决,因为Java重写要求返回类型必须是父类方法返回类型的子类或相同类型,而HashMap与Bundle无继承关系,属于方法冲突。

解决方案:重命名自定义方法

最直接的解决方式是给你的getParams()方法换个名字,避免和系统方法冲突,同时同步修改所有调用该方法的地方。

以下是三个文件的修改示例:


1. ManageProfile.java 修改

// 重命名方法为getApiParams,同时补上params的初始化(原代码存在空指针隐患)
public HashMap<String, String> getApiParams() {
    HashMap<String, String> params = new HashMap<>();
    if (!ProjectUtils.isEditTextFilled(binding.cetName)) {
        params.put(Consts.NAME, ProjectUtils.getEditTextValue(binding.cetName));
    } else {
        Toast.makeText(mContext, R.string.addname, Toast.LENGTH_SHORT).show();
    }

    params.put(Consts.NAME, ProjectUtils.getEditTextValue(binding.cetName));
    params.put(Consts.MOBILE, ProjectUtils.getEditTextValue(binding.cetNumber));
    params.put(Consts.COUNTRY_CODE, "91");
    params.put(Consts.DEVICE_TYPE, "Android");
    params.put(Consts.DEVICE_TOKEN, Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID));

    return params;
}

2. SchedulepickDate.java 修改

// 重命名方法为getApiParams,补上hashMap的初始化
public HashMap<String, String> getApiParams() {
    HashMap<String, String> hashMap = new HashMap<>();
    hashMap.put(Consts.PICKUP_DATE, ProjectUtils.getEditTextValue(binding.ctvPickupDate));
    hashMap.put(Consts.PICKUP_TIME, ProjectUtils.getEditTextValue(binding.ctvPickupTime));
    hashMap.put(Consts.DELIVERY_DATE, ProjectUtils.getEditTextValue(binding.ctvDeliveryDate));
    hashMap.put(Consts.DELIVERY_TIME, ProjectUtils.getEditTextValue(binding.ctvDeliveryTime));

    return hashMap;
}

3. SchedulePickup.java 修改

// 重命名方法为getApiParams
public HashMap<String, String> getApiParams() {
    HashMap<String, String> params = new HashMap<>();
    params.put(Consts.SHIPPING_ADDRESS, address);
    params.put(Consts.LATITUDE, String.valueOf(lats));
    if (landmark.equalsIgnoreCase("")) {
        params.put(Consts.LANDMARK, "");
    } else {
        params.put(Consts.LANDMARK, landmark);
    }
    params.put(Consts.LONGITUDE, String.valueOf(longs));

    return params;
}

最后一步:同步修改调用处

找到所有调用getParams()的代码,替换为新的方法名getApiParams(),例如:

// 原代码
HashMap<String,String> params = getParams();
// 修改后
HashMap<String,String> params = getApiParams();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:45:36