【问题标题】:Why I can't get data from Firebase Storage?为什么我无法从 Firebase 存储中获取数据?
【发布时间】:2022-02-18 00:33:59
【问题描述】:

我需要从 Firebase 存储和 Firestore 数据库中获取数据。我从 Firestore 数据库(Firebase 存储中的图像和歌曲链接)获取文本数据,但我无法检索歌曲并将其流式传输到我的应用程序中。我收到一个错误表单 logcat:

E/StorageUtil:获取令牌时出错 java.util.concurrent.ExecutionException:com.google.firebase.internal.api.FirebaseNoSignedInUserException:请先登录,然后再尝试获取令牌。

但我没有在我的应用中登录用户。

logcat 也写错误:

E/StorageException: {  "error": {    "code": 404,    "message": "Not Found."  }}
    java.io.IOException: {  "error": {    "code": 404,    "message": "Not Found."  }}

日志猫:

2022-02-17 06:03:27.264 14195-14268/com.example.clearmind1 E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.internal.api.FirebaseNoSignedInUserException: Please sign in before trying to get a token.
2022-02-17 06:03:27.265 14195-14268/com.example.clearmind1 W/NetworkRequest: no auth token for request
2022-02-17 06:03:27.265 14195-14268/com.example.clearmind1 W/NetworkRequest: No App Check token for request.
2022-02-17 06:03:27.272 14195-14270/com.example.clearmind1 E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.internal.api.FirebaseNoSignedInUserException: Please sign in before trying to get a token.
2022-02-17 06:03:27.273 14195-14270/com.example.clearmind1 W/NetworkRequest: no auth token for request
2022-02-17 06:03:27.273 14195-14270/com.example.clearmind1 W/NetworkRequest: No App Check token for request.
2022-02-17 06:03:27.277 14195-14276/com.example.clearmind1 E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.internal.api.FirebaseNoSignedInUserException: Please sign in before trying to get a token.
2022-02-17 06:03:27.277 14195-14276/com.example.clearmind1 W/NetworkRequest: no auth token for request
2022-02-17 06:03:27.277 14195-14276/com.example.clearmind1 W/NetworkRequest: No App Check token for request.
2022-02-17 06:03:27.799 14195-14270/com.example.clearmind1 E/StorageException: StorageException has occurred.
    Object does not exist at location.
     Code: -13010 HttpResult: 404
2022-02-17 06:03:27.799 14195-14276/com.example.clearmind1 E/StorageException: StorageException has occurred.
    Object does not exist at location.
     Code: -13010 HttpResult: 404
2022-02-17 06:03:27.801 14195-14276/com.example.clearmind1 E/StorageException: {  "error": {    "code": 404,    "message": "Not Found."  }}
    java.io.IOException: {  "error": {    "code": 404,    "message": "Not Found."  }}
        at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:445)
        at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:462)
        at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:453)
        at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
        at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:289)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:76)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:68)
        at com.google.firebase.storage.GetDownloadUrlTask.run(GetDownloadUrlTask.java:77)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:920)
2022-02-17 06:03:27.801 14195-14264/com.example.clearmind1 E/StorageException: StorageException has occurred.
    Object does not exist at location.
     Code: -13010 HttpResult: 404
2022-02-17 06:03:27.802 14195-14264/com.example.clearmind1 E/StorageException: {  "error": {    "code": 404,    "message": "Not Found."  }}
    java.io.IOException: {  "error": {    "code": 404,    "message": "Not Found."  }}
        at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:445)
        at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:462)
        at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:453)
        at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
        at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:289)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:76)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:68)
        at com.google.firebase.storage.GetDownloadUrlTask.run(GetDownloadUrlTask.java:77)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:920)
2022-02-17 06:03:27.809 14195-14270/com.example.clearmind1 E/StorageException: {  "error": {    "code": 404,    "message": "Not Found."  }}
    java.io.IOException: {  "error": {    "code": 404,    "message": "Not Found."  }}
        at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:445)
        at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:462)
        at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:453)
        at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
        at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:289)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:76)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:68)
        at com.google.firebase.storage.GetDownloadUrlTask.run(GetDownloadUrlTask.java:77)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:920)
2022-02-17 06:03:27.955 14195-14268/com.example.clearmind1 E/StorageException: StorageException has occurred.
    Object does not exist at location.
     Code: -13010 HttpResult: 404
2022-02-17 06:03:27.955 14195-14268/com.example.clearmind1 E/StorageException: {  "error": {    "code": 404,    "message": "Not Found."  }}
    java.io.IOException: {  "error": {    "code": 404,    "message": "Not Found."  }}
        at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:445)
        at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:462)
        at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:453)
        at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
        at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:289)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:76)
        at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:68)
        at com.google.firebase.storage.GetDownloadUrlTask.run(GetDownloadUrlTask.java:77)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:920)

这里我从服务器获取文本数据:

ArrayList childItemList = new ArrayList<>();
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection(category).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            progressDialog.dismiss();
            for (QueryDocumentSnapshot document : task.getResult()) {
                Log.d(TAG, document.getId() + " => " + document.getData());
                ChildItem childItem = new ChildItem();
                childItem.setTrackTitle(document.getString("title"));
                childItem.setAuthor(document.getString("author"));
                childItem.setDuration(document.getString("duration"));
                childItem.setImage(document.getString("image"));
                childItem.setTrack(document.getString("track"));
                childItemList.add(childItem);
            }
        } else {
            Log.w(TAG, "Error getting documents.", task.getException());
            Toast.makeText(BrowseTracksActivity.this, task.getException() + "", Toast.LENGTH_SHORT);
        }
        childItemList.add(getDefaultChildItem());
        setAdapter();
    }
});

在这里我正在尝试流式传输歌曲(我正在通过意图将歌曲的链接发送到另一个活动):

Intent intent=getIntent();
music= new MediaPlayer();
music.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
    String s=intent.getStringExtra("track");
    music.setDataSource(intent.getStringExtra("track"));
    music.prepare();
    music.start();

    Toast.makeText(this, "Audio started playing..", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
    // this line of code is use to handle error while playing our audio file.
    Toast.makeText(this, "Error found is " + e, Toast.LENGTH_SHORT).show();
}

【问题讨论】:

  • 您确定您的用户已登录吗?
  • 我没有在我的应用中登录用户。我不需要这样做
  • 在您共享的代码中,我看不到您调用 Cloud Storage for Firebase SDK 的任何地方,因此很难说比错误消息已经做的更多:您正在尝试加载一个不存在的文件。

标签: java android firebase firebase-storage


【解决方案1】:

该错误告诉您需要先登录您的用户。如果您不想让用户登录,但希望他们访问数据库,您可以通过匿名登录给他们一个令牌。这样,您就不必收集身份验证数据,例如电子邮件、密码、社交登录等。

您可以在不中断流程的情况下在主要活动中登录您的用户。

这里是代码

mAuth.signInAnonymously()
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                // Sign in success, User can now write and read the database.
                Log.d(TAG, "signInAnonymously:success");
                FirebaseUser user = mAuth.getCurrentUser();
                updateUI(user);
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInAnonymously:failure", task.getException());
                Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                        Toast.LENGTH_SHORT).show();
                updateUI(null);
            }
        }
    });

在 onCreate 方法中初始化 FirebaseAuth。

这里是 firebase 文档Firebase anonymous log in Android

别忘了更改你的数据库规则

"rules": {
".read": "auth != null",
".write": "auth != null"

} }

或者...

您可以允许所有用户读取和写入您的数据库(不推荐),只需将您的规则更改为

"rules": {
".read": "auth == null",
".write": "auth == null"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多