android 将Firebase uri转换为位图时出现FileNotFound异常?

fiei3ece  于 2023-04-10  发布在  Android
关注(0)|答案(2)|浏览(127)

我正在开发一个应用程序,其中我检索一个配置文件图像从firebase,但同时转换成位图格式,它得到FileNotFoundException所以任何解决方案?

databaseReference.child(uid).child("Profile_image").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

        String url= (String) dataSnapshot.getValue();

         Uri uri;
             try {
                 uri = Uri.parse(url);
                 InputStream inputStream =getContentResolver().openInputStream(uri);   //this line
                 Bitmap bitamp = BitmapFactory.decodeStream(inputStream);
                 String bitmap=saveToInternalStorage(bitamp);
                 loadImageFromStorage(bitmap);

            }catch (NullPointerException e){
            } catch (FileNotFoundException e) {
                Toast.makeText(MainActivity.this, "File not Found", Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
c90pui9n

c90pui9n1#

这是一个评论,但我还没有足够高的声誉来评论:
如果你的String url是Firebase存储的http url,那么Uri.parse(url)不会得到正确的Uri。根据我的经验,如果字符串来自Uri的toString()方法,你只能确信Uri.parse(String stringUri)会返回正确的Uri。
收到一个无效的Uri会导致getContentResolver().openInputStream(uri)崩溃,就像你说的那样。
话虽如此,如果您将URI作为String存储在数据库中,那么您需要获取该String值并对其使用Uri.parse(String stringUri),而不是对http url调用该方法。

uklbhaso

uklbhaso2#

我认为你必须直接使用Picasso Picasso.get().load(uri).into(target);

相关问题