预棒棒糖设备上的Android Ripple Drawable Error - Android SDK 25

时间:2017-04-03 07:19:21

标签: android android-5.0-lollipop

我是Android编程和StackOverflow的新手。这是我的第一个问题,但我之前使用过StackOverflow平台来寻求解决方案。现在,我的问题。我有一个Android应用程序曾经在SDK 11的所有Android设备上正常运行。但是,在SDK 25的更新中,它会在棒棒糖前设备上崩溃。

我的日志猫如下:

Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering

我已将vectorDrawables.useSupportLibrary = true包含在我的gradle中。我的minSdkVersion = 11targetSdkVersion = 25supportLibraryVersion = 25.2.0

我已经尝试了我在这里找到的所有建议但没有效果。所以,伙计,我需要你的帮助。我渴望学习,以便我能解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:2)

调试有时会很痛苦,上面的问题是我原始代码中的一个简单错误的结果。人类会犯错......

现在解决方案。我的初始代码如下所示,如果你看起来很敏锐,你会注意到如果设备低于版本23,检查Build.Version的if语句之间的初始化代码就不会运行。

        if(Build.VERSION.SDK_INT >= 23) {
        if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            // Storage permissions is already available, save profile photo

            initialization();
        } else {
            // Providing additional rational to the user if permission was not granted
            if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                Toast.makeText(this, "Storage permission is needed to save your profile photo.", Toast.LENGTH_LONG).show();
            }

            requestPermissions(new String[] {Manifest.permission.READ_CONTACTS}, WRITE_EXTERNAL_STORAGE);
        }
    }

这是初始化方法。在Android版本低于23的设备中,它没有运行从而触发Could not find class错误。但是我仍然无法弄清楚这与Ripple Drawable有什么关系,因为我的代码中没有使用Vector Drawables。因此,任何阅读此内容的人都可能会对原因有所了解

    private void initialization() {

    hoverView = (View) findViewById(R.id.hoverView);
    hoverView.setVisibility(View.GONE);

    mExitAppDialog = new HookUpDialog(this);
    mExitAppDialog.setMessage(getString(R.string.exit_app_message));
    mExitAppDialog.setOnButtonClickListener(HookUpDialog.BUTTON_OK,
            new OnClickListener() {

                @Override
                public void onClick(View v) {
                    mExitAppDialog.dismiss();

                    if (WallActivity.getInstance() != null) {
                        WallActivity.getInstance().finish();
                    }
                    sInstance.finish();

                    /* Informing the user, to press back again to exit */
                    Toast.makeText(getApplicationContext(),
                            R.string.press_back_again_to_exit,
                            Toast.LENGTH_SHORT).show();

                }
            });
    mExitAppDialog.setOnButtonClickListener(HookUpDialog.BUTTON_CANCEL,
            new OnClickListener() {

                @Override
                public void onClick(View v) {
                    mExitAppDialog.dismiss();

                }
            });
    mLlRecentActivity = (LinearLayout) findViewById(R.id.llRecentActivity);
    mNoActivitiesView = (TextView) findViewById(R.id.tvNoRecentActivities);
}

现在到完整的代码包括一个其他的,如果修复Android版本23及以下的设备。

            if(Build.VERSION.SDK_INT >= 23) {
        if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            // Storage permissions is already available, save profile photo

            initialization();
        } else {
            // Providing additional rational to the user if permission was not granted
            if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                Toast.makeText(this, "Storage permission is needed to save your profile photo.", Toast.LENGTH_LONG).show();
            }

            requestPermissions(new String[] {Manifest.permission.READ_CONTACTS}, WRITE_EXTERNAL_STORAGE);
        }
    } else if (Build.VERSION.SDK_INT < 23 ) {
        // Storage permissions is already available, save profile photo

        initialization();

    }

感谢@Anurag Singh,经过数小时的测试和重新测试,我能够看到这一点。谷歌搜索和谷歌搜索。