2016-07-30 4 views
1

Ich bin Lagerung Feuerbasis. Nur damit ich es lernen kann, versuche ich ein Bild von ImageView auf Firebase-Speicher hochzuladen. Meine App hat eine Schaltfläche. Wenn ich auf die Schaltfläche klicke, wird das Bild (aus dem Zeichensatz) in der Bildansicht angezeigt, und das Bild sollte beim Klicken auf die Schaltfläche in den Firebase-Speicher hochgeladen werden. Bisher habe ich das Bild per Knopfdruck angezeigt, kann es aber nicht auf den Firebase-Speicher hochladen. Die addOnFilureListener wird genannt (ich bin Überprüfung, welche durch einen Toast genannt wird) Hier ist meine Haupt-Java-Datei und Fehler Ich bin reeiving. Ich habe meinen Firebase-Speicher auch für den Fall der Fälle veröffentlicht. Welche Änderungen muss ich machen?addOnFilureListener genannt zu werden, wenn ich versuche Bilder zu Feuerbasis Speicher laden 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("images"); 

     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); 
       byte[] data = baos.toByteArray(); 

       UploadTask uploadTask = mountainsRef.putBytes(data); 
       uploadTask.addOnFailureListener(new OnFailureListener() { 
        @Override 
        public void onFailure(@NonNull Exception exception) { 
         // Handle unsuccessful uploads 
         showToast("unsuccessful"); 
        } 
       }).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_SHORT).show(); 
    } 
} 

Und das ist der Fehler, den ich

erhalten
07-29 20:18:50.034 2888-3011/com.example.asad.save_photo E/NetworkRqFactoryProxy: NetworkRequestFactoryProxy failed with a RemoteException: 
    com.google.android.gms.internal.zzsj$zza: No acceptable module found. Local version is 0 and remote version is 0. 
     at com.google.android.gms.internal.zzsj.zza(Unknown Source) 
     at com.google.android.gms.internal.zzaml.<init>(Unknown Source) 
     at com.google.android.gms.internal.zzaml.zzi(Unknown Source) 
     at com.google.firebase.storage.StorageReference.zzcyb(Unknown Source) 
     at com.google.firebase.storage.UploadTask.zzcyn(Unknown Source) 
     at com.google.firebase.storage.UploadTask.run(Unknown Source) 
     at com.google.firebase.storage.StorageTask$5.run(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
     at java.lang.Thread.run(Thread.java:818) 
07-29 20:18:50.034 2888-3011/com.example.asad.save_photo E/UploadTask: Unable to create a network request from metadata 
    android.os.RemoteException 
     at com.google.android.gms.internal.zzaml.<init>(Unknown Source) 
     at com.google.android.gms.internal.zzaml.zzi(Unknown Source) 
     at com.google.firebase.storage.StorageReference.zzcyb(Unknown Source) 
     at com.google.firebase.storage.UploadTask.zzcyn(Unknown Source) 
     at com.google.firebase.storage.UploadTask.run(Unknown Source) 
     at com.google.firebase.storage.StorageTask$5.run(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
     at java.lang.Thread.run(Thread.java:818) 
07-29 20:18:50.034 2888-3011/com.example.asad.save_photo E/StorageException: StorageException has occurred. 
    An unknown error occurred, please check the HTTP result code and inner exception for server response. 
     Code: -13000 HttpResult: 0 
07-29 20:18:50.034 2888-3011/com.example.asad.save_photo E/StorageException: null 
android.os.RemoteException 
    at com.google.android.gms.internal.zzaml.<init>(Unknown Source) 
    at com.google.android.gms.internal.zzaml.zzi(Unknown Source) 
    at com.google.firebase.storage.StorageReference.zzcyb(Unknown Source) 
    at com.google.firebase.storage.UploadTask.zzcyn(Unknown Source) 
    at com.google.firebase.storage.UploadTask.run(Unknown Source) 
    at com.google.firebase.storage.StorageTask$5.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
    at java.lang.Thread.run(Thread.java:818) 
07-29 20:18:52.389 2888-2961/com.example.asad.save_photo E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaa384ed0 

Hier sind meine Feuerbasis Lagerregeln:

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

Hier ist mein activity_main Layout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.asad.save_photo.MainActivity"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/button" 
     android:id="@+id/image" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/button" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 
+0

Ist das immer noch ein ungelöstes Problem? Ist Ihre [neue Frage] (http://stackoverflow.com/q/38671444/4815718) ein Hinweis darauf, dass Sie nicht mehr die Ausnahme erhalten und stattdessen einen Fehlerrückruf erhalten? –

+0

In beiden Fragen wird Fehler Ausnahme aufgerufen, aber mit unterschiedlichen Nachrichten. Ich erhielt das http-Ergebnis: 0, aber wenn ich Google-Dienste aktualisierte, gibt es diese Ausnahme nicht mehr. Stattdessen gibt es jetzt "Benutzer hat keine Berechtigung, auf dieses Objekt zuzugreifen" – ashay

Antwort

2

es Gelöst . Zum Aktualisieren der Google Play-Dienste und zum Ändern meiner Firebase-Speicherregeln auf diese Art und Weise:

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

Es ist hilfreich zu wissen, dass eine ältere Version von Google Play Services die ursprüngliche Ausnahme verursachte. –

+0

In welcher Datei müssen Sie diesen Code hinzufügen? – mercury0114

0

es funktionierte für mich. erste, sollten Sie Regeln wie dies überprüfen:

service firebase.storage { 
    match /b/fbstorage-fd9ef.appspot.com/o { 
    match /{allPaths=**} { 
     allow read, write; 
    } 
    } 
} 

Sekunde, müssen Sie überprüfen und aktualisieren Sie Ihre Google Play-Dienste über den Link: (wichtig)

https://play.google.com/store/apps/details?id=com.google.android.gms&hl=en 

dann erneut ausführen App. Viel Glück!

+0

In welcher Datei müssen Sie diesen Code hinzufügen? – mercury0114

+0

Lese docs hier @ mercury0114 https://firebase.google.com/docs/storage/security/start#sample-rules –

0

Für mich fand ich, dass der Emulator keine Spieldienste hat. So installiere ich es von sdk Manager von android Studio und erstelle einen neuen Emulator. Schließlich läuft es auf diesem Emulator. Hoffe es wird helfen.

Verwandte Themen