使用getBlockSizeLong方法后的java.lang.NoSuchMethodError异常

时间:2015-01-11 18:16:04

标签: android

我使用android studio 1.0.1创建了一个聊天项目 这是gradle构建属性
apply plugin:'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'])
}

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

  

不幸的是应用程序停止了

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

  

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

似乎我使用了比这种方法所要求的“18”更低的api级别 我可以解决这个问题,而无需增加api级别“minSdkVersion”吗? 我可以使用支持库吗?

1 个答案:

答案 0 :(得分:9)

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

存在两种方法:

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

public long getBlockSizeLong ()在API18中添加

您的项目使用第二个,您需要找到所有用法并关心运行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 ...