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

时间:2018-08-22 16:13:12

标签: android android-studio firebase-realtime-database

我正在开发一个应用,其中我要从firebase检索个人资料图片,但是当转换为bitmap格式时,它却得到了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) {

        }
    });

2 个答案:

答案 0 :(得分:1)

这本来是评论,但我的声誉还不够高,无法发表评论:

如果您的String url是Firebase存储的http网址,则Uri.parse(url)不会为您提供正确的Uri。根据我的经验,如果字符串来自Uri的Uri.parse(String stringUri)方法,您只能确信toString()将返回正确的Uri。

接收无效的Uri会导致getContentResolver().openInputStream(uri)崩溃,如您所说。

话虽如此,如果您将Uri作为字符串存储在数据库中,则需要获取该字符串值并在其上使用Uri.parse(String stringUri),而不是在http url上调用该方法。

答案 1 :(得分:0)

我认为您必须直接使用毕加索 Picasso.get()。load(uri).into(target);