因此,我的应用使用Firebase存储包含头像的用户数据。我让用户从库中选择一个图像,然后将我的ImageView设置为该文件的Uri,这样可以正常工作。
然后我推送那个Uri.toString();到Firebase,然后尝试再次阅读(为了让Avatar在会话中保持不变),我得到“resolveUri在坏位图uri上失败”错误。
这是我设置从图库中选择的图像的代码:
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == 1 && intent != null && resultCode == Activity.RESULT_OK) {
Uri uri = intent.getData();
Firebase usersRef = firebase.child("users").child("dummyUID").child("avatar");
usersRef.setValue(uri.getPath());
avatarIV.setImageURI(uri);
} else {
Log.d("Status:" , "Photo Picker Cancelled");
}
}
然后这是我用来尝试从Firebase中拉出相同的Image Uri的代码,它失败了:
avatarRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Uri uri = Uri.parse(dataSnapshot.getValue().toString());
avatarIV.setImageURI(uri);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
我已经输入了日志语句来确定路径可能有什么不同,但是在两个位置都是完全相同的。
以下是我在清单中的权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
我已经尝试了其他线程中建议的几乎所有修复,但我发现无济于事。我认为这是一个略有不同的情况,因为我正在从Firebase读回Uri。
提前致谢, 杰夫
答案 0 :(得分:1)
Uri.getPath()
不返回完整的URI,只返回路径组件。您需要使用Uri.toString()
代替。请参阅https://stackoverflow.com/a/17356461/1532344。
另请注意,此方法不适用于多个设备,因为您从意图中获取的URI将指向仅在该设备上可用的本地文件。