2016-05-23 35 views
6

我试图拉入已添加到Android设备的Firebase存储中的图像。每次运行时,我都会从onFailure监听器收到此错误:FirebaseStorage在请求图像时返回未知错误

E/StorageException(9646):发生未知错误,请检查HTTP结果代码和服务器响应的内部异常。 E/StorageException(9646):代码:-13000 HttpResult:0

我也更改了存储的权限以便暂时读/写以确保不存在问题。

在此先感谢您的帮助。

final ImageView test = (ImageView) findViewById(R.id.test_image); 
StorageReference ref = storage.getReferenceFromUrl("gs://my-project.appspot.com/test_image.png"); 
    ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { 
     @Override 
     public void onSuccess(Uri uri) { 
      Log.d(TAG, "Successfully loaded uri"); 
      test.setImageURI(uri); 
     } 
    }).addOnFailureListener(new OnFailureListener() { 
     @Override 
     public void onFailure(@NonNull Exception e) { 
      Log.d(TAG, "Failed loaded uri: " + e.getMessage()); 
     } 
    }); 
+0

实际上你是否正在运行该代码,或者是否用实际的“桶”(如“projectid.appspot.com”)和图像路径替换了“gs://bucket/image.png”? –

+0

是的,我用我的实际存储桶名称和文件替换了它。编辑代码以更好地反映这一点。 – johnsoe

+0

您能指出内存异常是否在StorageException中? 我只注意到httpresult为零。这表明获取下载网址的请求从未做出。这种情况发生的一种方式是如果您的手机没有更新播放服务。 你会知道这是错误的,因为adb logcat会显示错误,导致“存储网络层无法加载”。 –

回答

5

我刚刚注意到httpresult为零。这表明获取下载网址的请求从未做出。这种情况发生的一种方式是如果您的手机没有更新播放服务。你会知道这是错误的,因为adb logcat将显示一个错误,导致“存储网络层无法加载”。

要解决此问题,请更新手机上的播放服务。有几种方法可以做到这一点。我发现最简单的是安装应用程序“播放服务信息”在播放商店中查看播放服务,然后在可用时点击更新。

+0

这是问题!谢谢。 – johnsoe

2

我有同样的问题,这个解决方案是:

  • 创建存储参考 - >
StorageReference storageRef = storage.getReferenceFromUrl("gs:<bucket address>"); 
  • 创建一个孩子的存储参考

StorageReference spaceRef = storageRef.child("child name");

0

你需要有最新的谷歌游戏服务,以避免这一点。

另外,在Firebase控制台中启用匿名身份验证。

3

在您的设备上更新Google Play服务,不在您的gradle脚本中(虽然也这样做)。

因为只是撇取本杰明沃尔夫的回答以及其他人在互联网上的回应,我的头靠在墙上约一个小时后,我回来仔细阅读。希望这会帮助别人避免我的错误!

0

我在使用quickstart firebase存储示例时遇到同样的问题。问题在于该应用没有在Android M上请求存储运行时权限。因此,请尝试检查存储权限。

0

在我的情况下,我从创建StorageRef下载URL不与存储位置

String storageLocation="gs://bbeplayer.appspot.com/heart.png"; 
    String downloadURL="https://firebasestorage.googleapis.com/v0/b/bbeplayer.appspot.com/o/heart.png?alt=media&token=41a22961-daf1-433e-a580-e65144d34ab3"; 
    StorageReference reference; 
reference=FirebaseStorage.getInstance().getReferenceFromUrl(downloadURL); 

因此,我改变reference=FirebaseStorage.getInstance().getReferenceFromUrl(downloadURL);

reference=FirebaseStorage.getInstance().getReferenceFromUrl(storageLocation); 
-1

你需要上传其他文件与较具规模KB,那是为我工作!