2016-07-30 14 views
5

Ich bin neu in Firebase-Speicher. Nur damit ich es lernen konnte, machte ich eine einfache App, die einen Knopf und eine ImageView hat. Wenn ich auf die Schaltfläche klicke, wird ein Bild (from drawable) auf dem ImageView angezeigt. Ich habe auch den Code zum Hochladen des Images auf Firebase geschrieben, aber die Ausnahmebedingungsnachricht onAddFailureListener gibt die Nachricht Benutzer hat keine Berechtigung, auf dieses Objekt zuzugreifen. Was soll ich tun?Der Benutzer hat keine Berechtigung, auf dieses Objekt zuzugreifen. Firebase Speicher Android

package com.example.asad.save_photo; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.net.Uri; 
import android.os.Environment; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.google.android.gms.tasks.OnFailureListener; 
import com.google.android.gms.tasks.OnSuccessListener; 
import com.google.firebase.storage.FirebaseStorage; 
import com.google.firebase.storage.StorageMetadata; 
import com.google.firebase.storage.StorageReference; 
import com.google.firebase.storage.UploadTask; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     FirebaseStorage storage = FirebaseStorage.getInstance(); 

     StorageReference storageRef = storage.getReferenceFromUrl("gs://savephoto-a1cc3.appspot.com"); 

     final StorageReference mountainsRef = storageRef.child("asad"); 

     Button butt = (Button) findViewById(R.id.button); 


     butt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       ImageView imageView = (ImageView) findViewById(R.id.image); 
       imageView.setImageResource(R.drawable.back2); 
       //imageView.setImageResource(R.drawable.back2); 

       imageView.setDrawingCacheEnabled(true); 
       imageView.buildDrawingCache(); 
       Bitmap bitmap = imageView.getDrawingCache(); 


       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
       final byte[] data = baos.toByteArray(); 

       UploadTask uploadTask = mountainsRef.putBytes(data); 
       uploadTask.addOnFailureListener(new OnFailureListener() { 
        @Override 
        public void onFailure(@NonNull Exception exception) { 
         // Handle unsuccessful uploads 
         showToast(exception.getMessage()); 
        } 
       }); 
         uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
        @Override 
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
         // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
         //Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
         showToast("success !!!!!"); 
        } 
       }); 


      } 
     }); 

    } 

    public void showToast(String s) { 
     Toast.makeText(this,s,Toast.LENGTH_LONG).show(); 
    } 
} 

Hier sind meine Feuerbasis Lagerregeln

service firebase.storage { 
    match /b/savephoto-a1cc3.appspot.com/o { 
    allow read,write; 
    } 
} 
+0

Ihre OS-Version ist 6.0? Wenn ja dann erhalten Laufzeit-Erlaubnis von http://stackoverflow.com/questions/38141523/directory-creation-not-working-in-marshmallow-android/38141778#38141778 –

+0

Nein. Meine Betriebssystemversion ist 4.2 – ashay

+0

Haben Sie Berechtigungen in der Manifestdatei hinzugefügt? –

Antwort

13

aktualisieren Ihre Sicherheitsregeln mit match /{allPaths=**}, um anzuzeigen, dass die öffentliche Lese- und Schreibzugriff auf allen Wegen erlaubt ist:

service firebase.storage { 
    match /b/savephoto-a1cc3.appspot.com/o { 
    match /{allPaths=**} { 
     // Allow access by all users 
     allow read, write; 
    } 
    } 
} 

Verschiedene Regeln Standard sind in den Registerkarten des Sample Rules Abschnitts der Dokumentation enthalten.

+1

wo fügst du das hinzu? –

+0

@rosualin: Auf der [Firebase Console] (https://console.firebase.google.com/) für Ihr Projekt –

2

in Firebase Konsole Ihre Speicher Regeln ändern

enter image description here

service firebase.storage { 
    match /b/{bucket}/o { 
    match /{allPaths=**} { 
     allow read, write: if request.auth != null; 
    } 
    } 
}