android - 使用 getBlockSizeLong 方法后出现 java.lang.NoSuchMethodError 异常

标签 android

我使用android studio 1.0.1创建了一个聊天项目
这是 gradle 构建属性
应用插件:'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "chat.mchattrav.chattrav"
        minSdkVersion 5
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

当我运行应用程序时,我立即收到此错误消息

unfortunately app has stopped

当我调试应用程序时,我得到了这个异常信息

java.lang.NoSuchMethodError: android.os.StatFs.getBlockSizeLong

看来我使用的 api 级别低于此方法所需的“18”
我可以在不需要增加 api 级别“minSdkVersion”的情况下解决这个问题吗?
我可以改用支持库吗?

最佳答案

如果您需要支持低于 18 的 SDK,那么您需要处理它。

存在两种方法:

public int getBlockSize ()在 API1 中添加,在 API18 中弃用

public long getBlockSizeLong () API18新增

你的项目使用第2个,你需要找到所有的用法并关心运行android版本,例如

StatFs staFs = new StatFs("path");
long size = 0;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){
    size = staFs.getBlockSizeLong();
}else {
    size = staFs.getBlockSize();
}
// use size ...

关于android - 使用 getBlockSizeLong 方法后出现 java.lang.NoSuchMethodError 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27890436/

相关文章:

Android BluetoothDevice createBond权限错误

android - viewswitcher/viewflipper 的动态使用

java - 尝试使用 ArrayList<string> 创建 bundle 并将其传递给另一个 Activity VIA Intent

android - 在eclipse中导入android gradle项目

Android - 如何衡量 ListView 和其他 View 的性能?

android - 带有 RxJava 的 MVVM,没有数据绑定(bind)

java - 将此对象传递给事件处理程序

java - Mockito 错误 - 与此模拟 Android 的交互为零

java - 连续 WifiManager 扫描获得重复的扫描结果

android - 单击 FAB 导航到 fragment (导航架构组件)