java.lang.NoSuchMethodError: No virtual method getMccString()Ljava/lang/String;

我的梦境 提交于 2021-02-10 05:14:15

问题


I am retrieving cell information data (CellInfo) from TelephonyManager

For each cell info object, I am querying for mcc (Mobile Country Code) and mnc (Mobile Network Code) via

eachCellInfo.cellIdentity.mcc
eachCellInfo.cellIdentity.mnc

Where eachCellInfo is an object of CellInfo

The function is deprecated as per the doc:

    /**
     * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown
     * @deprecated Use {@link #getMncString} instead.
     */
    @Deprecated
    public int getMnc() {
        return (mMncStr != null) ? Integer.valueOf(mMncStr) : Integer.MAX_VALUE;
    }

However when I am using the suggested method that is via

    eachCellInfo.cellIdentity.mccString

Method Description:

        /**
         * @return Mobile Country Code in string format, null if unknown
         */
        public String getMccString() {
            return mMccStr;
        }

I am getting following crash logs:

java.lang.NoSuchMethodError: No virtual method getMccString()Ljava/lang/String; in class Landroid/telephony/CellIdentityLte; or its super classes (declaration of 'android.telephony.CellIdentityLte' appears in /system/framework/framework.jar!classes2.dex)
 )

Let me know if I am missing any information and possible cause of this behavior.

Other Infor:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip 
kotlin_version = '1.3.21' 
classpath 'com.google.gms:google-services:4.2.0' 
classpath 'com.android.tools.build:gradle:3.3.1'
Debug Version
minifyEnabled false
shrinkResources false

回答1:


This method was introduced in Android api 28 - check here - which means it won't be available in versions before.

This will work on devices running api 28+ and will throw that exception in devices running lower api levels.

Usually the correct way to do this is to introduce checks for the version:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
   // Safe to use getMccString
} else {
   // Use something else that could work if there's something
}

Note that just because you can browse the source in your machine it doesn't mean the device running your app will have the same Android code running - most of the time it doesn't.



来源:https://stackoverflow.com/questions/54767020/java-lang-nosuchmethoderror-no-virtual-method-getmccstringljava-lang-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!