java.lang.NoSuchMethodError: No virtual method getMccString()Ljava/lang/String;
java.lang.NoSuchMethodError: No virtual method getMccString()Ljava/lang/String;
我正在从 TelephonyManager
中检索细胞信息数据 (CellInfo
)
对于每个小区信息对象,我正在查询 mcc(移动国家代码)和 mnc(移动网络代码)通过
eachCellInfo.cellIdentity.mcc
eachCellInfo.cellIdentity.mnc
其中eachCellInfo是CellInfo
的一个对象
该函数已根据文档弃用:
/**
* @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;
}
但是当我使用建议的方法时
eachCellInfo.cellIdentity.mccString
方法说明:
/**
* @return Mobile Country Code in string format, null if unknown
*/
public String getMccString() {
return mMccStr;
}
我收到以下崩溃日志:
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)
)
如果我遗漏了任何信息以及此行为的可能原因,请告诉我。
其他信息:
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
此方法在 Android api 28 - 检查 here - 这意味着它不会在以前的版本中可用。
这将在 运行 api 28+ 设备上运行,并会在 运行 较低 api 级别的设备上抛出该异常。
通常正确的做法是引入版本检查:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// Safe to use getMccString
} else {
// Use something else that could work if there's something
}
请注意,仅仅因为您可以在您的机器上浏览源代码并不意味着设备 运行 您的应用将具有相同的 Android 代码 运行 - 大多数时间没有。
我正在从 TelephonyManager
CellInfo
)
对于每个小区信息对象,我正在查询 mcc(移动国家代码)和 mnc(移动网络代码)通过
eachCellInfo.cellIdentity.mcc
eachCellInfo.cellIdentity.mnc
其中eachCellInfo是CellInfo
的一个对象该函数已根据文档弃用:
/**
* @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;
}
但是当我使用建议的方法时
eachCellInfo.cellIdentity.mccString
方法说明:
/**
* @return Mobile Country Code in string format, null if unknown
*/
public String getMccString() {
return mMccStr;
}
我收到以下崩溃日志:
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)
)
如果我遗漏了任何信息以及此行为的可能原因,请告诉我。
其他信息:
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
此方法在 Android api 28 - 检查 here - 这意味着它不会在以前的版本中可用。
这将在 运行 api 28+ 设备上运行,并会在 运行 较低 api 级别的设备上抛出该异常。
通常正确的做法是引入版本检查:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// Safe to use getMccString
} else {
// Use something else that could work if there's something
}
请注意,仅仅因为您可以在您的机器上浏览源代码并不意味着设备 运行 您的应用将具有相同的 Android 代码 运行 - 大多数时间没有。