Slik laster du opp bilder til Firebase fra en Android-app

Firebase er en mobil og webapplikasjonsutviklingsplattform, og Firebase Storage gir sikker filopplastinger og nedlastinger for Firebase apps. I dette innlegget vil du bygge et Android-program med muligheten til å laste opp bilder til Firebase Storage.

Firebase Setup

Hvis du ikke har en Firebase-konto, kan du opprette en på Firebase-startsiden.

Når kontoen din er konfigurert, går du til Firebase-konsollen din, og klikker på Legg til prosjekt knappen for å legge til et nytt prosjekt.

Skriv inn prosjektdetaljer og klikk på Opprett prosjekt knappen når du er ferdig. På neste side, klikk på linken til Legg til Firebase i Android-appen din.

Skriv inn pakkenavnet ditt. Min søknadspakke er com.tutsplus.code.android.tutsplusupload. Merk at pakkenavnet er navngitt med en unik streng som identifiserer deg eller din bedrift. En enkel måte å finne dette på er å åpne din Hoved aktivitet fil og kopier pakkenavnet fra toppen.

Når du er ferdig, klikk på Registrer App. På neste side vil du bli gitt en google-services.json å laste ned til datamaskinen din. Kopier og lim den filen inn i appmappen til programmet. (Banen skal være noe som helst TutsplusUpload / app.)

Angi Firebase Tillatelser

For å tillate appen din tilgang til Firebase Storage, må du sette opp tillatelser i Firebase-konsollen. Fra konsollen din, klikk på Oppbevaring, og klikk deretter på regler.

Lim inn regelen nedenfor og publiser. 

service firebase.storage match / b / bucket / o match / allPaths = ** tillate lese, skrive: hvis sant; 

Dette vil tillate lese og skrive tilgang til brannbase lagring.

Opprett søknaden

Åpne Android Studio, og opprett et nytt prosjekt. Du kan ringe prosjektet ditt alt du vil. Jeg ringte min TutsplusUpload.

Før du fortsetter, må du legge til et par avhengigheter. På venstre panel i Android Studio klikker du på Gradle Scripts.

Åpen bygge.Gradle (Prosjekt: TutsplusUpload), og legg til denne linjen med kode i avhengighetsblokken.

 classpath 'com.google.gms: google-tjenester: 3.0.0'

Deretter åpne bygge.Gradle (Modul: app) å legge til avhengighetene for Firebase. Disse går i avhengighetsblokken også. 

 kompilere 'com.google.firebase: firebase-storage: 9.2.1' compile 'com.google.firebase: firebase-auth: 9.2.1'

Til slutt, utenfor avhengigheten blokkere, legg til plugin for Google Services.

 bruk plugin: 'com.google.gms.google-tjenester'

Lagre når du er ferdig, og den skal synkroniseres.

Sette opp Hoved aktivitet Oppsett

Søknaden vil trenge ett aktivitetsoppsett. To knapper vil være nødvendig - en for å velge et bilde fra enheten, og den andre for å laste opp det valgte bildet. Etter å ha valgt bildet du vil laste opp, vil bildet bli vist i oppsettet. Med andre ord, vil bildet ikke settes fra oppsettet, men fra aktiviteten.

I din Hoved aktivitet layout, vil du bruke to layouter - nesting den lineære oppsettet i det relative oppsettet. Begynn med å legge til koden for din relative layout.

  

De RelativeLayout tar opp hele plassen som leveres av enheten. De LinearLayout vil leve inne i RelativeLayout, og vil ha de to knappene. Knappene skal plasseres side ved side, og dermed retningen som skal brukes til LinearLayout vil være horisontal.

Her er koden for den lineære oppsettet.

  

Fra ovenstående kode kan du se at begge knappene har ids tildelt. Iidene vil bli brukt til å målrette på knappen fra hovedaktiviteten slik at når en knap blir klikket, startes en interaksjon. Du vil se det snart.

Under LinearLayout, legg til koden for Imageview.

Du kan også se at Imageview har en id; Du vil bruke dette til å fylle oppsettet til det valgte bildet. Dette vil bli gjort i hovedaktiviteten.

Få Hoved aktivitet Opp

Naviger til din Hoved aktivitet, og begynn med å deklarere felt. Disse feltene vil bli brukt til å initialisere visningene dine (knappene og Imageview), samt URI som indikerer hvor bildet skal hentes fra. Legg dette til hovedaktiviteten din, over onCreate metode.

 privat knapp btnChoose, btnUpload; privat ImageView imageView; privat Uri filPath; privat endelig int PICK_IMAGE_REQUEST = 71;

PICK_IMAGE_REQUEST er forespørselskoden definert som en instansvariabel.

Nå kan du initialisere visningen din slik:

 // Initialiser visninger btnChoose = (Button) findViewById (R.id.btnChoose); btnUpload = (Button) findViewById (R.id.btnUpload); imageView = (ImageView) findViewById (R.id.imgView);

I ovennevnte kode lager du nye forekomster av Knapp og Imageview. Instansene peker på knappene du opprettet i oppsettet ditt.

Du må sette en lytter som lytter etter samspill på knappene. Når et samspill skjer, vil du ringe en metode som utløser enten valg av et bilde fra galleriet eller opplasting av det valgte bildet til Firebase.

Under de initialiserte visningene, sett lytteren for begge knappene. Lytten ser slik ut.

 btnChoose.setOnClickListener (ny View.OnClickListener () @Override public void onClick (Vis v) chooseImage ();); btnUpload.setOnClickListener (new View.OnClickListener () @Override public void onClick (Vis v) uploadImage (););

Dette burde være i onCreate () metode. Som nevnt ovenfor, kaller begge knappene en annen metode. De Velge knappen ringer chooseImage () metode, mens Laste opp knappen ringer Last opp bilde() metode. La oss legge til disse metodene. Begge metodene bør implementeres utenfor onCreate () metode.

La oss starte med metoden for å velge et bilde. Slik ser det ut:

 privat tomt chooseImage () Intent intention = new Intent (); intent.setType ( "image / *"); intent.setAction (Intent.ACTION_GET_CONTENT); startActivityForResult (Intent.createChooser (intensjon, "Velg bilde"), PICK_IMAGE_REQUEST); 

Når denne metoden heter, en ny Intent forekomst er opprettet. Formålet er satt til bilde, og handlingen er innstilt for å få noe innhold. Formålet er å skape en bildevelgerdialog som lar brukeren bla gjennom enhetens galleri for å velge bildet. startActivityForResult brukes til å motta resultatet, som er det valgte bildet. For å vise dette bildet bruker du en metode som kalles onActivityResult.

onActivityResult mottar en forespørselskode, resultatkode og dataene. I denne metoden vil du sjekke for å se om forespørselskoden er lik PICK_IMAGE_REQUEST, med resultatkoden lik RESULT_OK og data tilgjengelig. Hvis alt dette er sant, vil du vise det valgte bildet i Imageview.

Under chooseImage () metode, legg til følgende kode.

 @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) super.onActivityResult (requestCode, resultCode, data); hvis (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data! = null && data.getData ()! = null) filePath = data.getData (); prøv Bitmap bitmap = MediaStore.Images.Media.getBitmap (getContentResolver (), filePath); imageView.setImageBitmap (bitmap);  fangst (IOException e) e.printStackTrace (); 

Laster opp filen til Firebase

Nå kan vi implementere metoden for å laste opp bildet til Firebase. Først erklærer du feltene som trengs for Firebase. Gjør dette under de andre feltene du har oppgitt for din klasse.

 // Firebase FirebaseStorage storage; StorageReference storageReference;

Oppbevaring vil bli brukt til å lage en FirebaseStorage eksempel, mens storageReference vil peke på den opplastede filen. Inne i din onCreate () metode, legg til koden for å gjøre det - opprett en FirebaseStorage forekomst og få lagringsreferansen. Referanser kan sees som pekere til en fil i skyen.

 lagring = FirebaseStorage.getInstance (); storageReference = storage.getReference ();

Her er hva Last opp bilde() metoden skal se ut.

 privat tomt uploadImage () if (filePath! = null) siste ProgressDialog progressDialog = ny ProgressDialog (dette); progressDialog.setTitle ("Uploading ..."); progressDialog.show (); StorageReference ref = storageReference.child ("images /" + UUID.randomUUID (). ToString ()); ref.putFile (filePath) .addOnSuccessListener (ny OnSuccessListener() @Overtrid offentlig tomgang onSuccess (UploadTask.TaskSnapshot taskSnapshot) progressDialog.dismiss (); Toast.makeText (MainActivity.this, "Uploaded", Toast.LENGTH_SHORT) .show (); ) .addOnFailureListener (ny OnFailureListener () @Override public void onFailure (@NonNull Exception e) progressDialog.dismiss (); Toast.makeText (MainActivity.this, "Mislyktes" + e.getMessage (), Toast.LENGTH_SHORT ) .show ();) .addOnProgressListener (ny OnProgressListener() @Overtrid offentlig tomgang påProgress (UploadTask.TaskSnapshot taskSnapshot) dobbel fremgang = (100.0 * taskSnapshot.getBytesTransferred () / taskSnapshot .getTotalByteCount ()); progressDialog.setMessage ("Uploaded" + (int) fremgang + "%"); ); 

Når Last opp bilde() Metoden heter, en ny forekomst av ProgressDialog er initialisert. En tekstmelding som viser brukeren at bildet lastes opp, vises. Deretter en referanse til det opplastede bildet, storageReference.child (), brukes til å få tilgang til den opplastede filen i Bilder mappe. Denne mappen blir opprettet automatisk når bildet lastes opp. Lyttere er også lagt til, med toastmeldinger. Disse meldingene vises, avhengig av tilstanden til opplastingen.

Angi tillatelse i appen

Til slutt må du be om tillatelse som søknaden din vil benytte seg av. Uten dette vil brukere av din søknad ikke kunne bla gjennom enhetens galleri og koble til Internett med søknaden din. Å gjøre dette er enkelt - lim inn følgende i din AndroidManifest fil. Lim inn det like over applikasjon elementetikett.

  

Dette ber om tillatelse til å bruke internett og lese ekstern lagring.

Testing av appen

Nå gå videre og kjør din søknad! Du bør kunne velge et bilde og laste det opp til Firebase. For å bekrefte bildet lastet opp, gå tilbake til konsollen din og sjekk inn filer en del av lagringsplassen din.

Konklusjon

Firebase gir utviklere mange fordeler, og filopplasting med lagring er en av dem. Når du laster opp bilder fra Android-applikasjonen, må du jobbe med aktiviteter og hensikter. Ved å følge med denne opplæringen har din forståelse av aktiviteter og hensikter blitt forsterket. jeg håper du likte det!

!