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你不回答意味着你同意我的意见。所以你的答案不是更好。我将要求版主检查这个线程的历史记录,并请做必要的行动。