Firebase är en mobil och webbapplikationsutvecklingsplattform, och Firebase Storage tillhandahåller säkra filuppladdningar och nedladdningar för Firebase-appar. I det här inlägget bygger du en Android-applikation med möjlighet att ladda upp bilder till Firebase Storage.
Om du inte har ett Firebase-konto än, kan du skapa en på Firebase-hemsidan.
När ditt konto har konfigurerats, gå till din Firebase-konsol och klicka på Lägg till projekt knappen för att lägga till ett nytt projekt.
Ange dina projektuppgifter och klicka på Skapa projekt knappen när du är klar. På nästa sida klickar du på länken till Lägg till Firebase i din Android-app.
Ange ditt programpaketnamn. Mitt applikationspaket är com.tutsplus.code.android.tutsplusupload. Observera att paketnamnet är namnfält med en unik sträng som identifierar dig eller ditt företag. Ett enkelt sätt att hitta detta är att öppna din Huvudaktivitet
fil och kopiera paketets namn från toppen.
När du är klar klickar du på Registrera App. På nästa sida får du en google-services.json att ladda ner till din dator. Kopiera och klistra in den filen i app-mappen i din ansökan. (Banan ska vara något liknande TutsplusUpload / app.)
För att låta din app få tillgång till Firebase Storage måste du konfigurera behörigheter i Firebase-konsolen. Klicka på på din konsol Lagring, och klicka sedan på regler.
Klistra in regeln nedan och publicera.
service firebase.storage match / b / bucket / o match / allPaths = ** tillåt läs, skriv: om sant;
Detta gör det möjligt att läsa och skriva åtkomst till din Firebase-lagring.
Öppna Android Studio och skapa ett nytt projekt. Du kan ringa ditt projekt allt du vill ha. Jag ringde min TutsplusUpload.
Innan du fortsätter måste du lägga till ett antal beroenden. Klicka på på den vänstra panelen i din Android Studio Gradle Scripts.
Öppna bygga.gradle (Projekt: TutsplusUpload), och lägg till den här raden av kod i beroendet block.
classpath 'com.google.gms: google-tjänster: 3.0.0'
Nästa, öppna bygga.gradle (Modul: app) för att lägga till beroenden för Firebase. Dessa går också i beroendet.
kompilera "com.google.firebase: firebase-storage: 9.2.1" compile "com.google.firebase: firebase-auth: 9.2.1"
Slutligen lägger du till plugin för Google Services.
tillämpa plugin: "com.google.gms.google-services"
Spara när du är klar, och den ska synkronisera.
Huvudaktivitet
LayoutApplikationen behöver en aktivitetslayout. Två knappar behövs-en för att välja en bild från din enhet och den andra för att ladda upp den valda bilden. Efter att ha valt bilden du vill ladda upp visas bilden i layouten. Med andra ord kommer bilden inte att ställas in från layouten men från aktiviteten.
I din Huvudaktivitet
layout, kommer du att använda två layouter-nesting den linjära layouten i den relativa layouten. Börja med att lägga till koden för din relativa layout.
De RelativeLayout
tar upp hela utrymmet som tillhandahålls av enheten. De Linear
kommer att leva inom RelativeLayout
, och kommer att ha de två knapparna. Knapparna ska placeras sida vid sida, så den riktning som ska användas för Linear
kommer att vara horisontellt.
Här är koden för den linjära layouten.
Från ovanstående kod kan du se att båda knapparna har ids tilldelade. Idsna kommer att användas för att rikta in knappen från huvudaktiviteten så att en interaktion initieras när knappen klickas. Du kommer att se det snart.
Under Linear
, lägg till koden för Imageview
.
Du kan också se att Imageview
har en id
; Du kommer att använda detta för att fylla layouten för den valda bilden. Detta kommer att göras i huvudaktiviteten.
Huvudaktivitet
Upp Navigera till din Huvudaktivitet
, och börja med att deklarera fält. Dessa fält kommer att användas för att initiera dina åsikter (knapparna och Imageview
), liksom URI-indikeringen där bilden ska plockas från. Lägg till detta till din huvudaktivitet, ovanför onCreate
metod.
privat knapp btnChoose, btnUpload; privat ImageView imageView; privat Uri-filPath; privat slutlig int PICK_IMAGE_REQUEST = 71;
PICK_IMAGE_REQUEST
är begärankoden definierad som en instansvariabel.
Nu kan du initiera dina åsikter så här:
// Initiera visningar btnChoose = (Button) findViewById (R.id.btnChoose); btnUpload = (Button) findViewById (R.id.btnUpload); imageView = (ImageView) findViewById (R.id.imgView);
I ovanstående kod skapar du nya instanser av Knapp
och Imageview
. Instanserna pekar på de knappar du skapade i din layout.
Du måste ställa in en lyssnare som lyssnar på interaktioner på knapparna. När en interaktion händer, vill du ringa en metod som utlöser antingen valet av en bild från galleriet eller uppladdningen av den valda bilden till Firebase.
Under de initialiserade vyerna ställer du in lyssnaren för båda knapparna. Lyssnaren ser ut så här.
btnChoose.setOnClickListener (ny View.OnClickListener () @Override public void onClick (Visa v) chooseImage ();); btnUpload.setOnClickListener (ny View.OnClickListener () @Override public void onClick (Visa v) uploadImage (););
Detta borde vara i onCreate ()
metod. Som jag nämnde ovan kallar båda knapparna en annan metod. De Välja knappen ringer på chooseImage ()
metod, medan Ladda upp knappen ringer på ladda upp bild()
metod. Låt oss lägga till dessa metoder. Båda metoderna bör genomföras utanför onCreate ()
metod.
Låt oss börja med metoden att välja en bild. Så här ska det se ut:
privat tomt chooseImage () Intent intention = new Intent (); intent.setType ( "image / *"); intent.setAction (Intent.ACTION_GET_CONTENT); startActivityForResult (Intent.createChooser (avsikt, "Välj bild"), PICK_IMAGE_REQUEST);
När den här metoden heter, en ny Avsikt
Exempel skapas. Avsikten är inställd på bild, och dess åtgärd är inställd på att få lite innehåll. Avsikten skapar en dialogruta för bildväljare som gör det möjligt för användaren att bläddra igenom galleriet för att välja bilden. startActivityForResult
används för att ta emot resultatet, vilket är den valda bilden. För att visa den här bilden använder du en metod som heter onActivityResult
.
onActivityResult
tar emot en förfrågan kod, resultatkod och data. I den här metoden kommer du att kolla för att se om förfrågningskoden är lika med PICK_IMAGE_REQUEST
, med resultatkoden lika med RESULT_OK
och tillgängliga data. Om allt detta är sant, vill du visa den valda bilden i Imageview
.
Under chooseImage ()
metod, lägg till följande kod.
@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) super.onActivityResult (requestCode, resultCode, data); om (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data! = null && data.getData ()! = null) filePath = data.getData (); prova Bitmap bitmap = MediaStore.Images.Media.getBitmap (getContentResolver (), filePath); imageView.setImageBitmap (bitmap); fånga (IOException e) e.printStackTrace ();
Nu kan vi genomföra metoden för att ladda upp bilden till Firebase. Förklara först de fält som behövs för Firebase. Gör detta under de andra fälten du förklarade för din klass.
// Firebase FirebaseStorage storage; StorageReference storageReference;
lagring
kommer att användas för att skapa en FirebaseStorage
exempel, medan storageReference
kommer att peka på den uppladdade filen. Inuti din onCreate ()
metod, lägg till koden för att göra det - skapa a FirebaseStorage
exempel och få lagringsreferensen. Referenser kan ses som pekare till en fil i molnet.
lagring = FirebaseStorage.getInstance (); storageReference = storage.getReference ();
Här är vad ladda upp bild()
Metoden ska se ut.
privat tomt uploadImage () if (filePath! = null) slutlig ProgressDialog progressDialog = new ProgressDialog (this); progressDialog.setTitle ("Uploading ..."); progressDialog.show (); StorageReference ref = storageReference.child ("images /" + UUID.randomUUID (). ToString ()); ref.putFile (filePath) .addOnSuccessListener (ny OnSuccessListener() @Override public void onSuccess (UploadTask.TaskSnapshot taskSnapshot) progressDialog.dismiss (); Toast.makeText (MainActivity.this, "Uploaded", Toast.LENGTH_SHORT) .show (); .addOnFailureListener (new OnFailureListener () @Override public void onFailure (@NonNull Exception e) progressDialog.dismiss (); Toast.makeText (MainActivity.this, "Misslyckades" + e.getMessage (), Toast.LENGTH_SHORT ) .show ();) .addOnProgressListener (ny OnProgressListener () @Override public void onProgress (UploadTask.TaskSnapshot taskSnapshot) dubbla framsteg = (100.0 * taskSnapshot.getBytesTransferred () / taskSnapshot .getTotalByteCount ()); progressDialog.setMessage ("Uploaded" + (int) framsteg + "%"); );
När ladda upp bild()
Metoden heter, en ny instans av ProgressDialog
initieras. Ett textmeddelande som visar användaren att bilden laddas upp visas. Då en hänvisning till den uppladdade bilden, storageReference.child ()
, används för att komma åt den uppladdade filen i bilder mapp. Den här mappen skapas automatiskt när bilden laddas upp. Lyssnare läggs också till, med toast-meddelanden. Dessa meddelanden visas beroende på uppladdningstillståndet.
Slutligen måste du begära tillåtelse att din ansökan kommer att utnyttja. Utan detta kommer användare av din ansökan inte att kunna bläddra i deras galleri och ansluta till Internet med din ansökan. Att göra det här är enkelt - klistra in följande i din AndroidManifest fil. Klistra in det precis ovanför Ansökan
element tagg.
Detta ber om tillåtelse att använda internet och läsa externt lagringsutrymme.
Nu fortsätt och kör din ansökan! Du ska kunna välja en bild och överföra den till Firebase. För att bekräfta den uppladdade bilden, gå tillbaka till konsolen och kolla in filer en del av din lagring.
Firebase ger utvecklare många fördelar, och filuppladdning med lagring är en av dem. Överföring av bilder från din Android-applikation kräver att du arbetar med aktiviteter och avsikt. Genom att följa med den här handledningen har du förstått din förståelse av aktiviteter och intentioner. Jag hoppas att du tyckte om det!
!