Android 将用户拾取的图像中的图像位图加载到imageview不会设置图像
这里的初学者 我正在将图像设置到用户将拾取的图像视图中,但当我拾取图像时,imageview没有加载图像 M应用程序正在打开文件选择器,我正在选择图像,它只是没有在imageview中加载拾取的图像 我的Imageview上有一个onclick侦听器 OnActivityResults方法Android 将用户拾取的图像中的图像位图加载到imageview不会设置图像,android,bitmap,imageview,bitmapfactory,startactivityforresult,Android,Bitmap,Imageview,Bitmapfactory,Startactivityforresult,这里的初学者 我正在将图像设置到用户将拾取的图像视图中,但当我拾取图像时,imageview没有加载图像 M应用程序正在打开文件选择器,我正在选择图像,它只是没有在imageview中加载拾取的图像 我的Imageview上有一个onclick侦听器 OnActivityResults方法 androdi studio可能会发出此警告方法调用“getData” 对data.getData方法生成“NullPointerException” 我也试过滑翔 Glide.with(this).load
androdi studio可能会发出此警告方法调用“getData” 对data.getData方法生成“NullPointerException” 我也试过滑翔
Glide.with(this).load(data.getData()).into(logoImage);
我得到了同样的结果,空白图像视图
代码的其余部分是保密的。初学者不能有密码吗p
注意-它在logcat中没有显示任何内容
非常感谢您的支持…:-
logoImage.setImageBitmap(BitmapFactory.decodeFile(data.getData().getPath()));
您无法获取文件,因此解码文件无法工作
到目前为止,最好的解决方案是将或添加到项目中,然后将Uri data.getData提供给库以加载到ImageView中。坦率地说:任何不这样做的人都需要一个很好的理由
当前代码最直接的等价物是使用getContentResolver.openInputStream获取Uri标识的内容上的InputStream。然后,使用BitmapFactory.decodeStream填充ImageView。这将在主应用程序线程上完成这项工作,这会激怒同级开发人员/经理,并冻结用户界面。这就是为什么你应该只使用Glide或Picasso,因为它们为你处理后台线程,以及许多其他事情,例如缓存。你弄错了onActivityResult方法中的代码。requestCode是标识您的请求的代码 从活动源代码: requestCode最初提供给startActivityForResult的整数请求代码,允许您识别此结果的来源 resultCode子活动通过其setResult返回的整数结果代码 您应该使用resultCode来确保您的请求成功 当涉及到NullPointerException警告时,在访问其字段或方法之前,您应该始终检查所使用的nullable变量实际上是否为null 因此,使用Glide的startActivityResult方法应该更像这样: @凌驾 ActivityResultant请求代码、int-resultCode、@Nullable-Intent数据上的受保护无效{ ifrequestCode==10{ 如果resultCode==RESULT\u OK&&data!=null{ Glide.withthis.loaddata.getData.intologoImage; }否则{ //可选的空数据处理 } } }
androdi studio发出此警告方法调用“getData”可能会在data.getData方法上产生“NullPointerException”。。。我还尝试了glide glide.withthis.loaddata.getData.intologimage;我得到了同样的结果,空白图像视图。谢谢你…@Monk:查看Logcat是否有来自Glide的消息,然后查看。警告只是指出,理论上,数据可能是空的。在尝试使用数据之前,您应该检查resultCode是否为RESULT_OK,以及数据是否为null。您好……它起了作用,但仅仅添加一个if条件如何解决错误?我们在If语句下有相同的代码,但那一次它不起作用为什么?呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜。。。但是什么是resultCode==RESULT\u OK我们只添加了一个if条件来检查resultCode==RESULT\u OK,然后它就工作了?但是如果不使用这个,为什么我的代码不能工作,尽管IF语句的主体是相同的。。。我们只是增加了一个条件……怎么做?谢谢编辑-值是如何为空的?我们刚刚添加了一个if条件,现在该值不是空的。。这有魔力吗?@Monk:不,将语句resultCode==10更改为requestCode==10是代码工作的原因。正如我前面所写的,您根据用于启动请求的代码检查了错误的代码。resultCode==RESULT\u OK只是一种确保处理成功响应的安全网。嘿,但我不检查这一点,那么逻辑上我的所有语句都应该运行,因为我没有任何If语句..m我错了??:-@蒙克:数据值不是空的,它可以是空的。如果为null,则不会执行If语句中的代码。在使用可为null的变量之前,您应该始终检查它们是否为null,以避免出现会使应用程序崩溃的NullPointerException。@Monk:如果我理解正确,是的,如果您没有检查任何内容,则代码在大多数情况下仍然有效。当您提出多个不同的请求或任何一个请求失败时,问题就会出现。
logoImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent fileChoosingIntent =new Intent(Intent.ACTION_OPEN_DOCUMENT);
fileChoosingIntent.setType("image/*");
startActivityForResult(fileChoosingIntent,10);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if(resultCode==10){
logoImage.setImageBitmap(BitmapFactory.decodeFile(data.getData().getPath()));
}
}
Glide.with(this).load(data.getData()).into(logoImage);
logoImage.setImageBitmap(BitmapFactory.decodeFile(data.getData().getPath()));