Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getDrawable(int)已弃用,可能会产生NullPointerException_Java_Android_Imageview_Android Drawable - Fatal编程技术网

Java getDrawable(int)已弃用,可能会产生NullPointerException

Java getDrawable(int)已弃用,可能会产生NullPointerException,java,android,imageview,android-drawable,Java,Android,Imageview,Android Drawable,我在网上进行了研究,找到了有关比较图像和引用drawable文件夹中图像的相关但不太相似的信息 然而,通过遵循我在stackoverflow中找到的一个答案,我能够比较两个图像,并通过单击按钮在它们之间切换 我只是关心我在getDrawable(int)中收到的不推荐使用的消息 获取可绘制图像并进行比较的正确方法或语法是什么?似乎getDrawable()不是该位置上的正确选项 这是我工作程序的代码和屏幕截图 private class myButtonListener implements V

我在网上进行了研究,找到了有关比较图像和引用
drawable
文件夹中图像的相关但不太相似的信息

然而,通过遵循我在stackoverflow中找到的一个答案,我能够比较两个图像,并通过单击按钮在它们之间切换

我只是关心我在
getDrawable(int)
中收到的不推荐使用的消息

获取可绘制图像并进行比较的正确方法或语法是什么?似乎
getDrawable()
不是该位置上的正确选项

这是我工作程序的代码和屏幕截图

private class myButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            if(myImageView.getDrawable().getConstantState() ==
                    MainActivity.this.getResources().getDrawable(R.drawable.corgi).getConstantState() ){
                myImageView.setImageResource(R.drawable.goldenretriever);
            }else{
                myImageView.setImageResource(R.drawable.corgi);
            }
        }
    }
划掉的getDrawable()方法的屏幕截图

虽然我的程序正在运行,但我希望确保将来避免不推荐的方法实例出现错误

我认为这很重要,因为正如我提到的,我在谷歌上搜索并获得了关于使用哪种方法或语法的不同信息

以下是针对可能遇到相同问题的其他用户的修改解决方案

 private class myButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            if(myImageView.getDrawable().getConstantState().equals(
                    ContextCompat.getDrawable(MainActivity.this,R.drawable.corgi).getConstantState() ) ){
                myImageView.setImageResource(R.drawable.goldenretriever);
            }else{
                myImageView.setImageResource(R.drawable.corgi);
            }
        }
    }
getDrawable()
在API级别22中不推荐使用

使用
ContextCompat
访问此网站:

用这种方式

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

正如这里提到的

是,您需要更改不推荐使用的代码:-

ContextCompat.getDrawable(getActivity(), R.drawable.name);
关于详细信息和其他答案,请查看

这对我很有用

ResourcesCompat.getDrawable(getResources(), R.drawable.name, null));

谢谢。:)我用ContextCompat修改了代码。我不再收到警告,程序仍在运行。谢谢。它起作用了。现在我不必使用不推荐的语法/方法。我很感激你的帮助。我很高兴帮助你。如果您有任何问题,请免费咨询。非常感谢。我刚从JavaSwing(我的第一语言)开始学习Android。我想我会更喜欢Android而不是Swing,因为我可以在手机或平板电脑上随身携带应用程序。不管怎样,我会问我是不是被什么事缠住了。B-)我对你的答案没有个人问题,但你能解释一下为什么你的答案比ContextCompat.getDrawable(getActivity(),R.drawable.name)更好吗;两者在内部都在做同样的事情。我建议用一行文字代替四行文字。如果安卓为你自己编写代码,为什么你建议重写和重新发明轮子。@Ironman你不回答意味着你同意我的意见。所以你的答案不是更好。我将要求版主检查这个线程的历史记录,并请做必要的行动。