我是否正确处理了此错误情况



我正在使用反射在我的 NumberPicker 中调用一个方法,这是我的代码:

try {
        // reflection call for
        method = numberPicker.getClass().getDeclaredMethod("changeValueByOne", boolean.class);
        method.setAccessible(true);
        method.invoke(numberPicker, increment);
    //TODO: Before finalizing should there be back-up code in one of these cases?
    } catch (final NoSuchMethodException e) {
        e.printStackTrace();
    } catch (final IllegalArgumentException e) {
        e.printStackTrace();
    } catch (final IllegalAccessException e) {
        e.printStackTrace();
    } catch (final InvocationTargetException e) {
        e.printStackTrace();
    }

如果 changeValueByOne 方法在 NumberPicker 中不存在(我的印象是它在较旧的 API 中不存在),我可以放置一些像 numberPicker.setValue(numberPicker.getValue() - 1); 这样的代码并从 NoSuchMethodException catch 块中删除e.printStackTrace();以使其优雅地处理这个问题吗?

换句话说,如果 changeValueByOne 方法不存在,则不使用该方法,它将默认为 setValue。 如果它可用,我宁愿使用 changeValueByOne,因为它播放 NumberPicker 的旋转动画,我不相信 setValue 会这样做。

这是我的AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.skytbest.intervaltrainer.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

和我的build.gradle

apply plugin: 'android'
android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-    rules.txt'
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

NumberPicker 需要 API>=11,并且您的最低要求大于此值。因此,您不会收到NumberPicker的编译错误,因为具有 API <11 的设备无法安装它。所以你不需要担心。

如果你想改变这个最小的API,那么你可以做一些类似的事情。

if (android.os.Build.VERSION.SDK_INT<= android.os.Build.VERSION_CODES.HONEYCOMB)
{   
     // use this method
}
else
{
     // use this method
}

相关内容

  • 没有找到相关文章

最新更新