Erstellen von Chat-App in Android mit Java und Firebase | Maid Rondić | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Erstellen von Chat-App in Android mit Java und Firebase

teacher avatar Maid Rondić, Professional Android developer

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführung in den Kurs

      3:39

    • 2.

      Gestalten des SignUp/Login

      14:54

    • 3.

      Benutzerauthentifizierung

      11:15

    • 4.

      Profile gestalten

      13:10

    • 5.

      Profilbild auf Firebase hochladen - Arbeiten mit Firebase Storage

      27:24

    • 6.

      Designing gestalten - Abrufen von Benutzern von Firebase

      20:57

    • 7.

      Messaging - ChatApp final

      56:41

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

169

Teilnehmer:innen

--

Projekt

Über diesen Kurs

In diesem Kurs lernen wir, wie du Chat-Anwendung in Android aufbauen kannst. Wir verwenden Android Studio und Java.

Hier ist eine kurze Anmerkung darüber, was wir zum Erstellen der Chat-App verwenden.

- Firebase - Echtzeit-Datenbank

- Firebase - Speicher

- Firebase - Benutzerauthentifizierung

- RecyclerView

- Individuelle Formen

Dinge, die wir lernen werden, können auch in verschiedenen Projekten und Apps angewendet werden.

Triff deine:n Kursleiter:in

Teacher Profile Image

Maid Rondić

Professional Android developer

Kursleiter:in

Hello, I'm Maid.

I am a professional Android developer. Coding and puzzle solving geek. Passionate about learning and sharing knowledge in the best possible fashion!

I have experience in many different technologies, platforms and programming languages including java, kotlin, php, python and more.

i tend to create "straight to the point" courses and keep them boring as little as possible.

Vollständiges Profil ansehen

Skills dieses Kurses

Entwicklung Programmiersprachen Java
Level: Intermediate

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Einführung in den Kurs: Hallo an alle. Vielen Dank, dass Sie Interesse an meiner Klasse gezeigt haben. In dieser Klasse werden wir lernen, wie Apps wie Chat-Apps im Allgemeinen gebaut werden. Bevor wir fortfahren, muss ich darauf hinweisen, dass diese Klasse II für die Menschen entwickelt wurde , die bereits mit der Android-App-Entwicklung in Android Studio vertraut sind. Integrierte Entwicklungsumgebung oder Java-Programmiersprache, zumindest. Und wenn Sie nicht vertraut sind, finden Sie zunächst einige Teile schwer zu verstehen. Lassen Sie uns nun eine kurze Vorschau der App sehen, die wir bauen werden und Dinge, die wir lernen werden. Hier haben wir zwei Emulatoren. Auf der rechten Seite sind wir bereits eingeloggt und wir können eine Liste aller Benutzer sehen. Und auf der linken Seite sehen Sie, dass wir hier keinen Benutzernamen haben, weil wir ihn nicht brauchen. Wir werden uns mit E-Mail und Passwort einloggen. Also lassen Sie uns jetzt einen neuen Benutzer erstellen. Nennen wir es John. Wir werden einige zufällige E-Mail setzen und wir werden hier ein Passwort einfügen. Wenn wir auf Anmelden klicken. Sobald die Anmeldung abgeschlossen ist und erfolgreich ist, wird uns der Bildschirm angezeigt. Und der Bildschirm ist tatsächlich Bildschirm, wo alle Benutzer unserer App angezeigt werden. Also hier ist John, und auf der rechten Seite haben wir es noch nicht. Aber wenn wir so etwas tun, dann haben wir auch John. So werden wir sehen, wie man dieses Ding genau hier umsetzt. Nun, wenn wir hier auf dieses Symbol klicken, können wir Profilaktivität sehen, wo wir Profilbild applaudieren können. Also werden wir eine aus der Galerie verwenden. Und wenn wir auf Foto hochladen klicken, können wir diese Fortschritte sehen. Und dann Bild hochgeladen Nachricht. Wenn wir jetzt zurück gehen, können Sie sehen, dass diese Bilder immer noch nicht aktualisiert. Wir können das auch leicht ändern, aber wir werden sehen, wie man es mit erfrischend macht, mit der Implementierung von Wisch- oder Refresh-Funktion. Also jetzt hier, wenn wir es noch einmal tun, werden wir auch dieses Bild sehen. Jetzt wird das Gespräch mit diesem Benutzer beginnen. Also hier drin werden wir John öffnen, weil auf der linken Seite oder Gerät wir als John registriert sind. Nun, ich werde eine Art Nachricht von hier senden. Und Sie können sehen, dass wir eine Nachricht bekommen. Also werde ich jetzt ein paar Smileys schicken. Und es funktioniert einwandfrei. So können Sie sehen, dass, sobald wir die Nachricht senden, automatisch hier registriert wird. Also jetzt, wenn wir zurück gehen und wenn wir diesen Chat wieder öffnen, können Sie sehen, dass Nachrichten immer noch da sind. Nachdem Sie diese Klasse abgeschlossen haben, werden Sie Fähigkeiten lernen, die sehr beliebt sind und die weit verbreitete, wenn es um die mobile App-Entwicklung geht. So werden Sie nicht nur lernen, wie Chating-App zu bauen, sondern Sie werden auch Technologien lernen, die Sie in Ihren anderen Projekten anwenden können. So werden wir zum Beispiel lernen, wie man Firebase als Online-Datenbank verwendet. Wir werden sehen, warum wir es verwenden. Wir werden eine Recycler-Ansicht, Narben Ansichten und viele andere Dinge lernen . Das war's also. Lasst uns anfangen und ich sehe euch im nächsten Video. 2. Gestalte die Anmelde/Anmelde-Bildschirm: Hey alle, jetzt ist die Zeit, unsere Chat-Anwendung zu erstellen. Also lasst uns zuerst ein neues Android Studio-Projekt erstellen. Lassen Sie uns eine leere Aktivität wählen. Und für den Namen der App. Lass uns plaudern. Sie können den Paketnamen ändern, wie Sie wollen, und klicken Sie auf Fertig stellen. Der Bau ist jetzt fertig und wir sind bereit, fortzufahren. Also zuerst, lasst uns gehen und Farben ändern, die wir in unserer App verwenden werden. Also lassen Sie uns Werte Ordner öffnen und Farben öffnen. Also lasst uns die Primärfarbe auf die 33 a2 AUS ändern. Nun lasst uns die primäre Dunkelheit auf die 3.3.1 ein FF ändern. Ändern Sie diese in die f, f, a, f, f und fügen Sie eine weitere Farbe hinzu, die als Farbe sekundär bezeichnet wird. Und Farbe wird F vier sein, 33 a bis F, F. Also haben wir hier eine Art Transparenz. Wenn wir nun die Farben geändert haben, werden wir anfangen, unsere Hauptaktivität zu erstellen, in der sich ein Benutzer anmelden und sich anmelden kann. Übrigens können Sie die Farben verwenden, die Sie mögen. Sie können tun, wie Sie denken, das ist das Beste. Also lassen Sie uns die Hauptaktivität öffnen und klicken Sie auf Split. Wir werden diese TextView löschen. Wird Editiertext mit Match-Elternteil als Breite für die Höhe setzen. Wir werden Wrap-Inhalte verwenden. Lassen Sie uns dieses Tag schließen. Dieser wird für den Benutzernamen verwendet. Also werden wir einen Hinweis setzen, um Benutzername zu sein. Wir werden nun ID hinzufügen, die ADT-Benutzername sein wird. Und wir werden es irgendwo hier drinnen bewegen. Klicken wir nun auf diese ging zu Einschränkung, diesen Text bearbeiten. Wir werden nun einen weiteren EditText hinzufügen, auch übergeordnete und umhüllende Inhalte übereinstimmen wird. Aber dieser hier wird für die E-Mail sein. Also lassen Sie uns ID, ADT E-Mail setzen. Lassen Sie uns diesen so einschränken. So wird es unter Benutzername Editiertext sein. Wir werden nun den letzten Editiertext für das Passwort hinzufügen. Also hier werden wir Hinweis-Passwort setzen. Die ID ist das EDTA-Passwort. Außerdem möchten wir den Eingabetyp in Textpasswort ändern, damit wir unser Passwort versteckt haben, wenn der Benutzer eingibt. Also wollen wir diese Punkte haben, wenn der Benutzer startet, beginnt er sein Passwort zu schreiben. Wir können das jetzt ein bisschen wie hier bewegen. Wir können hier auch manuell einige Werte setzen, aber ich werde diese behalten. Jetzt werden wir eine Schaltfläche hinzufügen, wo der Benutzer dieses Formular absenden wird. Diese Schaltfläche wird „Inhalt umbrechen“ sein. Die ID wird btn übermittelt. Ursprünglicher Text wird angemeldet sein. Und wir werden es hier einschränken. Aber es wird zentriert sein. Und wir werden hier etwas Marge hinzufügen. Wird der obere Rand sein und es wird zehn dB sein. Unterhalb dieser Schaltfläche. Wir wollen diesen Text, der sagen wird, haben bereits Konto Login. Es wird also Textansicht sein. Inhalt umbrechen. ID wird dx t Login-Info sein. Und Anfangstext wird I. Haben Sie bereits ein Konto Login. Und wir werden diesen unter diesen Knopf verschieben. So können wir es auch so einschränken. So dass es nach diesen Tasten zentriert ist. Also, wenn wir diese Schaltfläche wach hier bewegen, wird es mit diesen Button verwandt sein. Wir werden nun diesen Rand oben auf die 24 ändern, und wir werden Rand zu diesem TextView zu zehn d p hinzufügen . Jetzt müssen wir den Hintergrund in hier sowie die Form unserer Schaltfläche ändern. Lassen Sie uns also eine Datei im zeichnbaren Ordner erstellen. Nennen wir es Gradient. Hier anstelle von Selektor wollen wir Form haben. Und wir werden jetzt den Farbverlauf deklarieren , der Startfarbe haben wird. Akzent, und Endfarbe wird sein. Sekundäre Farbe wie diese. Nun lassen Sie uns diesen Farbverlauf auf unser Root-Layout anwenden, das Constraint-Layout ist. Lassen Sie uns es nun für das Hintergrundattribut so setzen. Und jetzt müssen wir die Textfarbe in Weiß und Droidenweiß ändern. Und wir müssen die Form dieser Schaltfläche ändern. Also werden wir eine weitere Datei in diesem zeichnbaren Ordner erstellen. Wir werden es runde blaue Form nennen. Also hier werden wir dies in die Form ändern. Es wird in sekundärer Farbe gefärbt, und die Ecken haben einen Radius von 90 dB. Wir werden dies nur auf das Hintergrundattribut der Schaltfläche anwenden. Und wir haben unseren Knopf. So können Sie jetzt auch Textfarbe in weiß ändern. Und ich glaube, dass wir unseren Hauptbildschirm entworfen haben. Lassen Sie uns also die App ausführen, um zu sehen, wie es aussieht. Jetzt können Sie sehen , dass dieser Winkel der Farbe irgendwie falsch ist. So haben wir diese rosa Farbe auf der linken Seite und blau auf der rechten Seite. Also ist es wegen des Rendering-Problems in Android Studio, wir bekommen gefälschte Bilder. So werden wir den Winkel dieser Farbe auf die 270 ändern, um diese genaue Farbverlaufsfarbe zu erreichen. Also hier können Sie verschiedene Dinge ausprobieren. Also zum Beispiel, wenn wir 19 setzen, werden wir an der Unterseite haben. Wenn wir 135 setzen, werden wir von unten rechts haben. Also im Grunde können wir Winkel zu den Zahlen setzen, die durch 45 geteilt werden können. Wenn Sie zum Beispiel 5454 setzen , sehen Sie, dass wir nichts haben. So können Sie mit 4726 und ähnlichen versuchen. Wir werden 270 benutzen. Wir werden nun die App erneut ausführen, um zu sehen, ob wir jetzt die richtige Farbe haben. Also, jetzt funktioniert es gut. Lassen Sie uns nun in der Haupttätigkeit gehen, um diese Ansichten zu erklären. Lassen Sie uns also Editiertexte deklarieren. Wir haben EDTA-Benutzernamen, Passwort und ADT-E-Mail. Wir werden es haben. Knopf. Und wir haben eine Textansicht, bei der es um Protokollierungsinformationen geht. Wir werden sie jetzt initialisieren. Er ist hier drin. Jetzt werden wir die Schaltfläche initialisieren. Und schließlich TextView, so. Also jetzt wollen wir irgendwie unterscheiden, ob der Benutzer sich anmelden oder sich einloggen wird. Also werden wir eine Variable haben, die vom Typ Boolean sein wird. Und es wird Leichtigkeit Anmeldung genannt werden. Also standardmäßig wird es gleich dem true sein, weil wir unsere App öffnen, wollen wir zuerst die Anmeldeseite präsentieren. Und wenn der Benutzer hier auf die Textansicht klickt, möchten wir diesen Bildschirm in den Login-Bildschirm ändern, also möchten wir Text innerhalb der Schaltfläche aktualisieren. Wir möchten diesen Text hier aktualisieren. Und wir wollen Benutzername Feld verstecken. Also, wie geht man das? Wir werden OnClickListener zuerst auf die Textansicht in hier setzen, also lassen Sie es uns so machen. Und wenn wir klicken, wenn der Bildschirm für die Anmeldung war, wollen wir es jetzt auf den Anmeldebildschirm ändern und wir werden diese Variable auf false setzen. Und wenn wir auf der Anmeldeseite waren, möchten wir es jetzt auf die Anmeldeseite ändern, und diese Variable wird jetzt wahr sein. Wir müssen jetzt auch Text aktualisieren. Jetzt muss die Schaltfläche Text haben, der Login sein wird. Und hier drinnen wollen wir sagen, melden Sie sich an. Wir wollen auch Text ändern. Hier drin. Text wird nicht über ein Konto registrieren. Und hier wollen wir den Text auf die bereits ein Konto haben setzen. Einloggen. Aktualisiert diesen Text auch hier. So wie das. Und auch, was wir erreichen wollen, ist, diesen Text zu verbergen. Also werden wir hier die Sichtbarkeit dieser EDTA-Benutzernamen auf weg setzen. Und hier wollen wir sichtbar sein. Lassen Sie uns nun die App ausführen und sehen, ob es funktioniert. Wenn wir auf diesen Text klicken, haben wir jetzt diesen Bildschirm, der uns melden wird. Und wenn wir kein Konto haben und wir uns anmelden wollen, können wir hier klicken und wir werden mit diesem Feld präsentiert. Also, wenn Sie sich fragen, warum haben wir diese Variable? Variable wird verwendet, um zu bestimmen, wann wir auf die Schaltfläche Anmelden klicken, ob wir starten wollen, in Prozess oder Anmeldung. So werden Sie sehen, dass, wenn wir mit der Implementierung von Logik für die Benutzerauthentifizierung beginnen. Das ist also für dieses Video. Und in der nächsten werden wir diese App mit der Firebase verbinden und wir werden unsere ersten Benutzer registrieren. So sehen wir uns im nächsten Video. 3. Benutzerauthentifizierung: Hey alle, in dieser Vorlesung werden wir Firebase in unser Projekt integrieren. So einfacher Weg, Firebase in unserem Projekt zu implementieren ist, klicken Sie auf Tools, Firebase, und klicken Sie auf Authentifizierung, E-Mail und Passwort Authentifizierung. Und dann lassen Sie uns eine Verbindung zu Firebase herstellen. Jetzt sehen Sie vielleicht diese Art von Bildschirm nicht , wenn Sie nicht bereits angemeldet sind, in Android Studio. Aber da ich mit diesem Konto eingeloggt bin, wird mir der Bildschirm angezeigt. Und es kennt bereits einige meiner Projekte, die in Firebase sind , die mit diesem Konto verknüpft sind. Wenn Sie also so etwas nicht sehen, glaube ich, dass Sie aufgefordert werden, sich im Formular anzumelden. Und ich schlage vor, dich anzumelden. So wird es viel einfacher sein, Firebase auf diese Weise zu integrieren. Hier sehen Sie, dass ich bereits mit dem Namen des Projekts vorgeschlagen werde, der dem Projekt in Android Studio entspricht. Also werde ich jetzt auf Verbindung zu Firebase klicken. Die Verbindung ist jetzt im Gange. Jetzt werde ich meinen Internet-Browser öffnen. Öffnen Sie Firebase. Ich werde jetzt meine Firebase-Konsole öffnen, aber mit dem Konto, das mit Android Studio verknüpft ist. Und ich werde jetzt auf gehen Sie zur Konsole klicken. Mei. Sie können sehen, dass ich Chat-App habe, die gerade erstellt wird. Hier drin. Es besagt, dass Firebase-Projekt erstellt wird und wir jetzt verbunden sind. Hier ist nun die Zeit, die Authentifizierung in unsere App zu integrieren. Also lasst uns hier klicken und Änderungen akzeptieren. Es wird nun die Abhängigkeiten in unseren Gradle-Skripten in der Build-up-Gradle-Datei injizieren , um genauer zu sein. Da jedoch neuere Versionen der Android Firebase-Authentifizierung verfügbar sind, ändern wir sie auf die neueste und klicken auf Synchronisierung. Jetzt. Jetzt können wir diesen Assistenten schließen und Haupttätigkeit öffnen. Um Benutzer authentifizieren zu können, müssen wir zunächst die Authentifizierung in unserem Projekt aktivieren. Also werden wir das Projekt in der Konsole öffnen. Und wir werden zur Authentifizierung gehen und wir werden Signaturmethode einrichten. Wir werden E-Mail-Passwort aktivieren. Und wir können jetzt Benutzer erstellen. Da diese Aktivität sowohl für die Registrierung als auch für die Anmeldung verwendet wird, werden wir hier zwei Methoden erstellen. Einer wird Handle Login genannt, und der zweite wird als Handle bezeichnet. Melden Sie sich an. Handle Login wird aufgerufen, wenn wir auf die Schaltfläche klicken. Und wir melden uns nicht an. Also hier und hier werden wir uns mit der Anmeldung beschäftigen, weil es bedeutet, dass wir uns derzeit im Anmeldemodus befinden. Nun, lassen Sie uns diese Methode implementieren. Also werden wir Firebase-Authentifizierung aufrufen. Dot Instanz Punkt erstellen Benutzer mit E-Mail und Passwort. E-Mail wird von diesem Editiertext und Passwort genommen. Von diesem hier. Wir werden auch onComplete Listener hinzufügen. Und hier werden wir überprüfen, ob die Aufgabe erfolgreich war. Wir werden dosiert erstellen, die sagen wird erfolgreich angemeldet. Andernfalls werden wir sagen, dass der Ask Punkt erhalten Ausnahme, die lokalisierte Nachricht erhält. Es wird uns sagen, was schief gelaufen ist. Und das ist es für die Anmeldemethode. Und in Handle Login-Methode. Wir wollten eine ähnliche Sache sagen, aber jetzt anstatt Benutzer mit E-Mail und Passwort zu erstellen, wollen wir die Anmeldung mit E-Mail und Passwort verwenden. Wir werden dieselben Edit-Texte für diesen und gleichen onComplete Listener verwenden. Und wenn es schief gelaufen ist, wollen wir die Nachricht bekommen. Das war's also. Nun möchten wir sicherstellen, dass der Benutzer korrekte Eingaben hat. Wenn der Benutzer zum Beispieleinige der Felder leer lässt, einige der Felder leer lässt, wollen wir nicht mit der Anmeldung oder Anmeldung umgehen. Es wird zunächst hier überprüfen, ob die E-Mail. Ist leer oder das Kennwort ist leer. Und hier, wenn wir uns im Anmeldemodus befinden, müssen wir auch nach dem Benutzernamen suchen. Wir möchten also nicht zulassen, dass der Benutzer sich anmelden muss, ohne Benutzernamen zu setzen. Also hier müssen wir überprüfen, ob wir im Anmeldemodus sind und eDD-Benutzername leer ist. Wir werden diejenigen setzen, die ungültige Eingabe sagen. Und wir werden die Rückkehr hören. Der folgende Code wird also nicht ausgeführt. Lassen Sie uns das jetzt genauer erklären. Wenn wir also in der Login-Aktivität sind, zum Beispiel im Login-Modus, ist dies tatsächlich die gleiche Aktivität. Wir haben kein Benutzername Feld, und es wird standardmäßig leer sein. Deshalb müssen wir die CIF-Anweisung von hier trennen. Also konnten wir nicht sagen oder EDTA-Benutzername ist leer, weil der Benutzername leer sein muss, wenn wir in suchen. Deshalb hören wir genau prüfen, ob wir uns im Anmeldemodus befinden, nur dann prüfen, ob der Benutzername leer ist. Lassen Sie uns also die App ausführen und sehen, wie sie sich verhält. Also hier sagt es, dass die Datei Google services.js oder fehlt. Um diese Datei zu erhalten, müssen wir Chrome öffnen. Sie müssen auch unser Projekt öffnen und hier auf diese Projekteinstellungen klicken. Und diese Datei kann von hier heruntergeladen werden. Und das werden wir tun. Wir werden diese Datei nun kopieren. Ich habe es bereits kopiert, und ich werde es einfach in diesen App-Ordner einfügen. Lassen Sie uns zunächst ein Projekt wählen, um es klarer zu machen. Öffnen Sie diesen App-Ordner und fügen Sie ihn hier ein. Stellen Sie also sicher, dass es so genannt wird. Deshalb brauchen wir diese Datei, weil sie Schlüssel enthält, enthält sie im Grunde Informationen über Project und über Firebase, damit unser Projekt erfolgreich mit der Firebase kommunizieren kann. Lassen Sie uns nun versuchen, die App erneut auszuführen. Stellen Sie außerdem sicher, dass Sie Internetberechtigungen innerhalb der Manifestdatei hinzufügen. Denn manchmal wird es nicht funktionieren. Wenn wir keine Internet-Berechtigung haben, da unsere App Internet verwendet , um Operationen mit der Firebase durchzuführen. Also jetzt muss ich diese App noch einmal ausführen, damit diese Internetberechtigung angewendet wird. Ich werde es jetzt laufen lassen. Wenn wir jetzt anfangen, hier etwas einzugeben und auf „Registrieren“ klicken, erhalten wir eine ungültige Eingabenachricht. Wenn wir einen Benutzer wie diesen erstellen, und wenn wir auf registrieren klicken, haben wir eine Nachricht, die besagt, dass der Benutzer erfolgreich angemeldet ist. Und lasst uns diese Konsole hier aktualisieren. Und wir haben unseren Benutzer erfolgreich authentifiziert. Also lassen Sie uns jetzt überprüfen, ob der Login funktioniert. So werden wir nun auf Login klicken. Wenn wir nun auf Login klicken, heißt es, dass wir erfolgreich eingeloggt sind. Das ist also nett. Das ist also für diesen Vortrag. 4. Profile gestalten: In dieser Vorlesung werden wir lernen, wie Sie Profilbild auf die Firebase hochladen und mit dem Benutzer verbunden. Aber zuerst lassen Sie uns Freunde-Aktivität erstellen, die Aktivität sein wird, bei der alle Benutzer hier angezeigt werden. Also werden wir zuerst diese Aktivität erstellen, weil wir auf die Profilaktivität gehen wollen , wo wir Bild von der Aktivität des Freundes applaudieren wollen, Freund. Und erstens, erstellen Sie diese Aktivität. Sie brauchen Freunde Aktivität. Und klicken Sie auf Fertig. Lasst uns nun darauf klicken. Ich klicke auf System-UI anzeigen. Und im Grunde, was wir hier haben wollen, eine Art von Symbol, wo wir tippen und gehen Sie auf das Profil. Also, um das zu tun, müssen wir Menü erstellen. Um ein Menü zu erstellen, gehen wir mit der rechten Maustaste auf den Rest Ordner. Und lassen Sie uns jetzt auf neue und Android-Ressourcenverzeichnis gehen. Ändern Sie dies in das Menü und klicken Sie auf OK. Jetzt hier drin, lassen Sie uns eine neue Menü-Ressourcendatei erstellen. Und nennen wir es. Profilmenü teilt sich. Und hier wollen wir Element hinzufügen, die ID des Menüpunktes Profil haben wird. Es wird das Symbol heilen, das jetzt erstellt wird. Lassen Sie uns also weiter zeichnen und ein Vektorobjekt erstellen. Beginnen wir mit der Suche nach dem Konto. Also wählte das hier. Damit wir es so lassen können, wie es ist. Ändern Sie einfach den Namen in das Kontobild und fügen Sie ihn hier hinzu. Und wir wollen es als Aktion immer zeigen. Also jetzt sind wir hier mit Warnung, das ist, dass wir einen Titel haben sollten, aber wir wollen keinen Titel, da er immer hier eingefügt wird. Lassen Sie uns nun in die Aktivität eines Freundes gehen und das Menü aufblasen. Also werden wir auf Create Options Menü tatsächlich aufrufen, wir werden diese Methode überschreiben, die vom System automatisch aufgerufen wird. Wir werden Menü-Inflator bekommen und wir werden das Menü aufblasen, das wir gerade erstellt haben. Und hier wollen wir es in dieses Menü setzen, das Parameter hier ist. Und wir werden wahr zurückkehren. Also wollten wir zu verschiedenen Aktivitäten gehen, sobald wir erfolgreich eingeloggt sind. Und wir werden die Haupttätigkeit dafür öffnen. Und wenn wir Login behandeln, wenn es erfolgreich abgeschlossen ist, werden wir Aktivität von der Hauptaktivität bis zur Aktivität des Freundes starten . Wir werden auch dasselbe tun, wenn wir, wenn wir erfolgreich angemeldet sind. Wir wollen also nicht, dass der Benutzer auf dem Bildschirm ist. Wenn wir uns anmelden, möchten wir es sofort in die Aktivität des Freundes übersetzen. Lassen Sie uns nun die App ausführen und sehen, was los ist. Also lasst uns zum Login wechseln. Lassen Sie uns Anmeldeinformationen und klicken Sie auf Login. Also sind wir jetzt in der Aktivität des Freundes und wir haben unseren Artikel hier drin. Da wir also in der Haupttätigkeit sind, lasst uns noch eine Sache machen. Und es wird sein, wenn diese Aktivität erstellt wird. Wir wollen hier überprüfen, ob der Benutzer bereits eingeloggt ist. Und wenn es so ist, wollen wir es schicken. Wir möchten es an die Aktivität des Freundes senden. Um zu überprüfen, ob der Benutzer bereits angemeldet ist, müssen wir nur überprüfen, ob der aktuelle Benutzer nicht gleich null ist. So funktioniert es also. Und dann hier wollen wir Haupttätigkeit beenden. Also jetzt, wenn Sie App ausführen, wieder, werden wir mit dieser Aktivität sofort präsentiert. So wie so. Also lassen Sie uns nun auf Klick-Listener zu diesem Menüpunkt setzen. Und wir werden das tun, indem wir auf Optionen Menüpunkt ausgewählt überschreiben. Und hier wollen wir überprüfen, ob der Punkt, den wir ausgewählt haben, Menüpunkt Profil ist. Und wenn dies der Fall ist, starten wir dann eine neue Aktivität, die von der Freunde-Aktivität bis zur Profilaktivität sein wird. Aber wir müssen jetzt Profilaktivität erstellen, da sie nicht existiert. Also gehen wir und machen das. Nennen Sie es Profil, und klicken Sie auf Fertig stellen. Also, wenn du hier gehst, ist der Fehler verschwunden. Lassen Sie uns nun die App ausführen, um zu testen, ob es funktioniert. Okay, jetzt, wenn wir auf diesen Artikel klicken, sind wir jetzt in der Profilaktivität. Lassen Sie uns nun die Profilaktivität entwerfen. Hier wollen wir das um ihn herum Bild haben. Wir möchten zwei Schaltflächen zum Applaudieren und Abmelden haben. Und wir möchten hier Texte haben, die verwendet werden, um Informationen über aktuelle Benutzer, wie E-Mail, zu präsentieren. Also müssen wir Karten herunterladen Sie. Erstens, jetzt können wir zurück zu der Gestaltung. Wir werden Karten legen, die 180 DP breit und 180 dB Höhe sein werden. Es wird den Eckenradius von 90 haben. Und wir werden nun Tag wie dieses schließen, so dass wir die Bildansicht hier einfügen können. Es wird match_parent ID des Bildes wird Profilbild sein. Und wir können es so einschränken. Wir brauchen hier eine Art Platzhalter. Und zu diesem Zweck können wir das Bild verwenden, das wir für das Profil-Menü erstellt haben. Also werden wir hier dieses Account-Bild als Quellbild dieser Bildansicht verwenden . Und wir wollen Skalentyp zentriert Ernte werden. Öffnen wir nun dieses Bild und lassen Sie uns tatsächlich die Farbe in den Farbakzent ändern . Und lasst uns diese Tönung entfernen, so dass wir es können, damit wir den Gelehrten wie hier haben. Jetzt werden wir Schaltfläche hinzufügen, die Wrap Content sein wird. Die ID wird btn sein. Bild hochladen. Der Hintergrund wird dieser sein. Text wird Upload Foto und Farbe des Textes wird weiß sein. Also werden wir es hier reinlegen. So wie das. Wir werden diesen Button Bettwäsche hinzufügen. Wir werden nun eine weitere Schaltfläche für den Login hinzufügen oder sorry, für den Login OUT Zweck. Der Hintergrund wird gleich sein, und die ID wird btn Logout sein. Wir werden das hier reinziehen. Also lassen Sie uns jetzt einige Ränder hinzufügen. Wir werden hier hinzufügen. Wir werden hier auch etwas Marge hinzufügen. Und wir können diese Karte nach oben bewegen, indem wir die vertikale Verzerrung auf die 0,4 ändern. Wenn Sie also 0,5 setzen, werden Sie es zentriert haben. Wenn Sie einen setzen, wird es unten sein. Und wenn Sie 0 setzen, wird es an der Spitze sein. Also können wir so etwas verwenden. Also, jetzt lassen Sie uns TextView hinzufügen. Farbe wird schwarz sein. Die ID wird dxdy, Benutzer-Info oder Benutzer-E-Mail sein. Wir werden Ihnen diesen Text schicken, um hier zu sein. Wir werden Rand unten, dB, 30 dB, wie folgt hinzufügen . Lassen Sie uns nun die App ausführen, um zu sehen, wie es auf unserem Emulator aussieht. Also habe ich einen Fehler, weil ich vergessen habe, das P hier hinzuzufügen. Lass es uns nochmal laufen. Ok, also lasst uns auf diesen Artikel klicken und wir haben unsere Profilaktivität entworfen. Also dieses Video wird lange und aus diesem Grund werden wir im nächsten Video fortfahren, wo wir sehen werden, wie man Daten unseres Benutzers in Firebase-Datenbank hochlädt . So sehen wir uns dann. 5. Upload von Profilbild in Firebase – Arbeiten mit Firebase Storage: Jetzt möchten wir Benutzerdaten wie Benutzername, E-Mail und Profilbild in unsere Datenbank hochladen wie Benutzername, E-Mail . So müssen wir zunächst Echtzeit-Datenbank aktivieren. Und wir werden auf Datenbank erstellen klicken. Und wir werden es im Testmodus starten. Jetzt werden wir Android Studio öffnen. Wir werden diesen Assistenten öffnen. Und wir werden jetzt Echtzeit-Datenbank integrieren. Also klicken wir auf Speichern und Abrufen von Daten. Fügen Sie nun Echtzeit-Datenbank zur App hinzu. Und lassen Sie uns diesen Assistenten vorerst schließen. Öffnen Sie Build-up Gradle, so dass wir Firebase-Datenbankversion auf die neueste aktualisieren können , wie diese. Und klicken Sie auf Synchronisieren. Also im Grunde, wenn wir uns hier anmelden, wollen wir einige zusätzliche Daten in unsere Datenbank einfügen. Und diese zusätzlichen Daten werden tatsächlich Benutzerobjekt sein. Also werden wir eine Klasse namens user erstellen. Benutzerobjekt, wird Benutzername haben. Wenn wir eine E-Mail haben. Und es wird Profilbild haben. So Profilbild ist auch eine Zeichenfolge, die tatsächlich eine URL zu dem Profilbild sein wird, das wir später hochladen werden. Also werden wir erstellen, wird tatsächlich Konstruktor wie diesen erzeugen. Wir werden auch einen leeren Konstruktor erstellen. Wegen Firebase. Es benötigt es, um Objekte direkt zu verwenden. In. Datenbank. Operationen werden auch Getter und Setter wie diese generieren. Also, hier, wenn wir die Anmeldung behandeln, wenn die Aufgabe erfolgreich ist, wollen wir Firebase-Datenbank Punkt Instanz Punkt Referenz erhalten zugreifen. Und diese Referenz wird Benutzer sein. Also, wenn wir Benutzer hier als Referenz setzen, wird es Benutzerknoten in hier erstellen. Und das darauf wird Wert gesetzt, ein neues Benutzerobjekt mit dem Benutzernamen sein wird , der hier in dieser Methode übergeben wird. Es wird diese E-Mail haben. Und für das Profilbild wird es zunächst eine leere Zeichenfolge sein. Daher möchten wir, dass der Benutzer später Profilbild hinzufügen kann. Und zunächst wird es einen Standardwert wie diesen haben. Aber hier, als Dereferenz, ist jeder Benutzer einzigartig. Und so wollen wir einen zentralen Knoten haben, der Benutzer sein wird. Und danach wollen wir eine Art von Zweig haben, in dem jeder Benutzer durch irgendeine Art von Bezeichner von jedem getrennt wird. Und der Bezeichner ist eigentlich eine, die wir von der Firebase bekommen können , sollte Objekt mit dem aktuellen Benutzer erhalten, UID erhalten. Und jetzt, wenn wir unsere App ausführen, aber zuerst, lassen Sie uns zuerst Abmeldefunktion hinzufügen, damit wir unseren Benutzer abmelden können. So werden wir für jetzt nur initialisieren Logout Button. Und sobald der Abmelde-Button angeklickt ist, möchten wir uns abmelden. Und wir wollen auch eine neue Aktivität beginnen, die Haupttätigkeit ist. Aber wir wollen auch alle Aktivitäten klären, damit wir es können, damit wir nicht wirklich zurückkehren können. Und wir werden diesen schließen. Lassen Sie uns nun die App ausführen, um dies zu testen. Ok, also lasst uns auf dieses Profil klicken. Lassen Sie uns ausloggen. Und lassen Sie uns jetzt einen neuen Benutzer erstellen. Also ein zufälliger Benutzer. Und lasst uns auf Anmelden klicken. Und mal sehen, was in der Datenbank passieren wird. Also haben wir hier einen neuen Benutzer. Dieser Benutzer hat jetzt E-Mail, Benutzername und Profilbild, das im Moment leer ist. Jetzt verstehen Sie, warum wir hier Benutzer verwendet und dann haben wir mit dieser UID angehängt. Auf diese Weise können wir hier mehrere Benutzer haben. Und wenn wir diesen Teil hier weglassen würden, würden wir nur diesen Benutzer löschen und jedes Mal einen neuen erstellen. Also lassen Sie uns abmelden und einen weiteren Benutzer erstellen. Sagen wir so etwas. Klicken Sie auf Anmelden. Und dann haben wir andere Benutzer hier drin. Okay, so funktioniert es. Jetzt ist es an der Zeit, auf applaudieren Fototeil zu arbeiten. Gehen wir also zurück in Code und öffnen Sie die Profilaktivität. Was wir also tun wollen, ist, dass, wenn der Benutzer auf dieses Bild klickt, wir die Galerie mit unseren Fotos öffnen möchten. Und wenn der Benutzer ein bestimmtes Foto auswählt, wollen wir es hier drin. Und wenn wir dann auf Upload klicken, wollen wir, dass es irgendwo auf Firebase hochgeladen wird. Konzentrieren wir uns nun auf den ersten Teil, wo wir das Bild aus der Galerie hier bekommen werden. Also zuerst gehen wir und initialisieren diese Bildansicht. Also werden wir es zuerst erklären. Okay, das ist also, das ist es. Lassen Sie uns onClickListener für dieses Bild setzen. Und hier werden wir Galerie Solids öffnen, sehen, wie es gemacht wird. Wir müssen ein neues Intent Objekt erstellen, das Foto-Intent genannt wird. Es wird gleich der Absicht sein. Aber dieses Mal spezifizieren wir etwas, das Aktion genannt wird. Und diese Aktion ist Aktionsspitze. Es wird also wissen, dass wir etwas aus diesem Absichtsobjekt auswählen wollen. Und das wird Bild sein. Aus diesem Grund müssen wir den Typ angeben , der abgebildet wird. Schrägstrich Asterix. Jetzt werden wir Aktivität starten, aber Aktivität für Ergebnis, weil wir ein bestimmtes Bild mit Anforderungscode eins erhalten möchten. Also sagt dieser String hier im Grunde unserem System, dass wir Galerie öffnen wollen. Lassen Sie uns also die App ausführen und testen Sie sie aus. Was ist offene Profilaktivität und klicken Sie auf das Bild. Sie können sehen, dass es uns in die Galerie schickt, wo wir ein Foto auswählen können. Aber wir haben kein Foto auf unserem Gerät. Und deshalb müssen wir später ein paar Fotos machen. Aber jetzt müssen wir mit diesem Ergebnis umgehen. Also müssen wir mit unserem Peaked Image umgehen. Wir müssen es irgendwie hier reinbringen. Dafür werden wir Methode auf Aktivität Ergebnis aufgerufen überschreiben. Hier werden wir überprüfen, ob der Anforderungscode gleich eins ist. Und Ergebniscode ist in Ordnung. Wir müssen auch überprüfen , ob die Daten nicht gleich null sind, da diese Daten tatsächlich Bild sein werden. Und wenn all dies der Fall ist, erhalten wir ein Bild von diesen Daten mit data.dat. Daten. Und jetzt müssen wir es irgendwo aufbewahren. Dafür müssen wir hier eine globale Variable haben. Wenn Sie sich fragen, was ist die Art dieser Daten, die wir erhalten? Es ist URI. Also ist es im Grunde eine Art von Datei in unserem Gerät Pad. Und wir werden es hier erklären, private URI, Bild Pat. Und hier drinnen werden wir diese Daten diesem Bild Pat zuweisen, so. Nun als nächstes, was wir tun müssen, ist Bild in der Bildansicht zu bekommen. Und wir werden diese Methode hier erstellen. Es wird also ungültig sein. Wir müssen Bitmap haben. Und diese Bitmap wird im Grunde ein Bild sein, das wir von diesen Bild-Wette bekommen werden. Also, um das zu tun, müssen wir Media Store, images.me, dot get bitmap aufrufen . Und hier drin müssen wir Content-Resolver bekommen. Und wir werden unsere Bild-Wette verwenden, um es zu bekommen. Es ist also schwer, sich an all diese zu erinnern. Du musst dich nicht mal daran erinnern. Einfach Google darüber, wie man URI in eine Bitmap transformiert , und Sie werden so etwas finden. Und jetzt, wenn wir unser Bild hier drin haben, wollen wir es auf unser Image-Profil setzen. So werden wir auf das Bildprofil verweisen und wir werden Bild Bitmap setzen. Diese Bitmap. Jetzt können Sie diesen Basiswert hier sehen. Und das sagt uns, dass wir mit Ausnahme umgehen müssen, wenn im Grunde unser Bild nicht gefunden wird. Was wir also tun werden, ist, dass wir einfach mehr Aktionen ausführen können, und wir können dies umgeben. Wir versuchen Fang-Block. Und das war's. Wenn das Bild nicht gefunden wird, wird unsere App nicht abstürzen. Lassen Sie uns nun unsere App ausführen und testen, wie es funktioniert. Erstens müssen wir einige Bilder machen, um sie in unserer Galerie zu haben. Also werden wir die Kamera unseres Emulators öffnen. Okay, lasst uns, okay, lasst uns das einfangen. Jetzt gehen wir zurück und wir werden unsere App öffnen. Also, wenn wir Profil öffnen und darauf klicken, werden wir jetzt Fotos haben. Also werden wir eins wählen. Und Sie können sehen, dass unser Foto hier drin ist. So haben wir die erste Aufgabe erfolgreich gelöst. Und das zweite ist, dieses Foto auf Firebase zu applaudieren. Also, wie wir das machen, wo wir tun, applaudieren wir dieses Foto. Dafür müssen wir Firebase-Speicher verwenden. Also tatsächlich, Speicher ist etwas, wo wir Dateien auf Firebase hochladen können. Und dafür müssen wir zuerst Abhängigkeiten einbeziehen. Öffnen wir also unseren Firebase-Assistent. Und lasst uns auf Speicher klicken. Und klicken Sie darauf. Und lassen Sie uns Cloud-Speicher zu unserem Projekt hinzufügen. Während es gebaut wird, öffnen wir einen Web-Browser und lassen Sie uns Speicher aktivieren. So werden wir auf „Erste Schritte“ klicken. Klicken wir auf Weiter. Klicken Sie auf Fertig. Und das wird unser Datenbankspeicher sein. Und hier können wir Dateien hochladen. Also, jetzt gehen wir zurück zum Code und sehen, wie das über die Anwendung zu tun ist. Jetzt werden wir onClickListener auf diese Upload-Foto-Button setzen. Aber wir müssen es zunächst deklarieren und initialisieren. Also werden wir es hier einfügen, und wir werden es hier initialisieren. Wir werden onClickListener auf diese Schaltfläche setzen. Und wenn wir auf diese Schaltfläche klicken, wollen wir Bild hochladen. Also lassen Sie uns diese Methode unten erstellen. Nun, wenn wir anfangen, die Aufgabe zu applaudieren, möchten wir dem Benutzer eine Art Fortschritt dieser Aufgabe zeigen, und das wird ProgressDialog sein. Wir werden also einen Fortschrittsdialog schaffen. Kontext wird diese Klasse sein. Wir werden diesen Fortschritt auf die Beifall drei Punkte setzen. Und wir wollten diesen Dialog zeigen. Endlich. Jetzt hier wollen wir Referenz des Speichers erhalten, so dass wir dieses Bild applaudieren können und wir hören rufen Firebase, Speicher, dot getInstance, erhalten Referenz und Referenz. Und werden Bilder mit einer Art zufälliger Zeichenfolge sein, die auf diese Weise generiert wird. Das wird uns also eine zufällige Zeichenfolge geben. Welches wird der Name des Fotos sein, das wir hochladen möchten. Und auf diese Weise können wir mehrere Fotos ohne zu überschreiben. Es gibt also keine Chance, dass wir denselben Namen für ein Foto haben werden. Und wenn wir dieses Foto dem Speicher applaudieren, müssen wir es irgendwie mit unseren Benutzern verknüpfen. Und Sie werden in einem Moment sehen, wie wir das tun werden. Also hier jetzt sagen wir, legen Sie Datei. Datei wird unser Bild PET sein. Und wir wollen auf den vollständigen Listener setzen, so dass wir wissen, wann abgeschlossen ist, wenn das Hochladen Aufgabe abgeschlossen ist. Und wenn die Aufgabe erfolgreich war. Wir werden nun unseren Fortschrittsdialog schließen. Und dann werden wir doest Nachricht ausgeben, die sagen, Bild hochgeladen. Sonst. Wir werden sagen, dass etwas mit der entsprechenden Nachricht schief gegangen ist. Aber auch wir müssen ProgressDialog trotzdem ablehnen. Und deshalb werden wir das einfach hier reinziehen, damit auch unsere Aufgabe erfolgreich war oder nicht. Wir werden sicher sein, dass der Fortschrittsdialog abgewiesen wird. Lassen Sie uns nun die App ausführen und testen, wie das funktioniert. Nun lassen Sie uns öffnen Profil Aktivität. Lassen Sie uns ein Bild hier reinbringen. Und lasst uns auf Upload klicken. Foto. App ist abgestürzt. Und mal sehen, warum das so ist. So Fehler ist wahrscheinlich, weil, wenn wir die Abhängigkeit des Firebase-Speichers setzen, es veraltet ist. Und wir sollten es auf die neueste mögliche Version aktualisieren. Weil Sie sehen können, dass es keine Methode gibt, die innerhalb von Firebase-Speicher verwendet wird. Und wir werden dies auf die neueste Version ändern. Und nachdem wir synchronisieren Projekt wird es erneut versuchen. Also lassen Sie uns die App jetzt ausführen und sehen, wie wir arbeiten werden. Wählen wir also Foto aus. Wieder mal. Lassen Sie uns auf Foto hochladen klicken. Und es sagt, dass Bilder hochgeladen. Lassen Sie uns diese Seite in unserem Webbrowser aktualisieren. Sie können sehen, dass es Ordnerbilder, die wir erstellt haben. Jede Seite gibt es ein Bild mit diesen zufälligen Strings, die wir generiert haben. So funktioniert es, es funktioniert. Okay. Nun, was wir tun wollen, ist, dass wir verfolgen wollen wie viel von unserem Foto hochgeladen wird. Wir wollen also einen Prozentsatz der hochgeladenen Daten. Um das zu tun, müssen wir hier auf Fortschrittszuhörer setzen. Und wenn sich dieser Fortschritt ändert, werden wir unseren Fortschrittsdialog mit diesem Text aktualisieren , so dass der Fortschritt doppelt variabel sein wird, was gleich 100 multipliziert mit Snapshot-Punkt ist. Holen Sie Bytes übertragen. Geteilt durch Snapshot-Punkt erhält die Gesamtbyteanzahl. Und wenn wir diesen Fortschritt erhalten, werden wir die Nachricht auf so etwas aktualisieren . Und wir werden diesen Fortschritt in Ganzzahl umwandeln. Wir werden auch Prozentzeichen hinzufügen. Lassen Sie uns nun die App ausführen und sehen, ob das funktioniert. Nun, es ist jetzt öffnen dieses Profil. Lassen Sie uns noch einmal etwas applaudieren, das Sie hier sehen können, dass wir Fortschritte haben, aber Sie können feststellen, dass es direkt durch sprang, bis zu 100%. Dies wahrscheinlich, weil unser Bild zu klein ist, so dass es schnell fertig ist. Ich glaube, dass, wenn das Bild größer ist, es gut funktionieren wird. Jetzt ist der Teil, wenn wir dieses Bild einem bestimmten Benutzer zuordnen möchten , der dieses Bild hochgeladen hat. Also, um das hier zu tun, wenn die Aufgabe erfolgreich ist, müssen wir die URL dieses Bildes erhalten. Und dann werden wir diese URL in unsere Datenbank anstelle der leeren Zeichenfolge, die wir hier drin haben, setzen. Also hier haben wir eine leere Zeichenfolge. Wir werden dieses Feld mit der entsprechenden URL aktualisieren, um Download, Download-URL zu erhalten. Um die URL zu erhalten, von der dieses Bild geladen werden kann, werden wir auf diese Aufgabe verweisen. Wir werden ein Ergebnis bekommen. Dann werden wir Speicher erhalten und Download-URL erhalten. Das dauert also auch einige Zeit. Grundsätzlich wird diese Download-URL nur verfügbar sein, wenn diese Aufgabe, Speicher zu erhalten und diese URL zu erhalten, abgeschlossen ist. Also müssen wir noch ein weiteres auf vollständig Center hier hinzufügen. Und wenn dies abgeschlossen ist, wenn die Aufgabe erfolgreich ist, werden wir das Profilbild unseres Benutzers aktualisieren. Und wir werden hier Argument setzen, was die genaue URL sein wird. Und jetzt ist die URL einfach ein Ergebnis dieser Aufgabe, und diese Aufgabe ist tatsächlich Download-URL zu bekommen. Also jetzt werden wir hier eine Methode erstellen und wir werden sehen, wie es funktioniert. Also übergeben wir String-URL. Also jetzt müssen wir diese String-URL hier einfügen. Und so wird es gemacht werden. Also müssen wir irgendwie in unserer Datenbank zu diesem Profilbildfeld klopfen. Und dieser Pat ist dieser hier. So werden wir zuerst auf die Firebase Database GetInstance verwiesen und Referenz erhalten. Hier drin. Wir werden Haustier auf dieses Profilbild setzen und diese Fledermaus ist Benutzer. Also haben wir Benutzer Schrägstrich. Wir müssen jetzt die UID eines bestimmten Benutzers erhalten. Wir werden das aus dem Firebase alten Objekt erhalten und aktuellen Benutzer erhalten, UID erhalten. Und jetzt müssen wir nur Profilbild schreiben. Also sind wir jetzt hier. Und um endlich diese URL zu setzen, werden wir nur Wert setzen und wir werden URL schreiben. Lassen Sie uns nun die App ausführen und sehen, ob sie funktioniert oder nicht. Öffnen wir das Profil. Nun, es ist jetzt Bild hochladen. Klicken Sie auf Foto hochladen. Und wenn das Bild hochgeladen wird, haben wir unser Bild hier drin. Warum haben wir hier drin eine Schnur, warum haben wir das getan? Das liegt daran, dass wir später unsere Bildansicht des Profils unseres Benutzers mit dieser Zeichenfolge aufblasen werden. Also werden wir glide Bibliothek verwenden, um unsere Ansicht mit diesem Bild aufzublasen. Und wenn Sie diesen Link kopieren und ihn hier einfügen, können Sie sehen, dass wir das Bild haben. So lernen Sie jetzt, wie Sie ein Foto oder eine Datei so ziemlich auf die Firebase hochladen und es unserem Benutzer zuordnen. Im nächsten Video werden wir sehen, wie man eine Liste aller Benutzer abruft. Also sehe ich dich dann. 6. activity gestalten – Fetching von Firebase: Jetzt ist es an der Zeit, die Aktivitäten unseres Freundes zu entwerfen und eine Liste aller Benutzer in Firebase zu holen. Also werden wir Recycler-Ansicht brauchen, wo wir alle Benutzer setzen werden. Aus diesem Grund müssen wir zunächst Recycler View Komponente herunterladen. Jetzt gehen wir zurück zur Codierung hier drin. Für den Hintergrund unseres Root-Layouts wird Gradienten setzen. In hier wollen wir Fortschrittsbalken, die 200 dp groß und breit sein wird, wird ID als Fortschrittsbalken setzen. Und wir werden es in die Mitte bringen. Und das war's. Jetzt werden wir Recycler-Ansicht setzen. Recycler-Ansicht wird im Grunde übereinstimmen Eltern-ID davon recycler sein. Aber anfangs wollen wir Recycler-Ansicht weg sein, weil wir zuerst einen Fortschrittsbalken anzeigen möchten. Und wenn wir Daten erhalten, werden wir diesen Fortschrittsbalken ausblenden und wir werden Recycler-Ansicht anzeigen. Nun lassen Sie uns gehen und erstellen Adapter für unsere Recycler-Ansicht wird eine neue Klasse erstellen, die Benutzer Adapter genannt wird. Es wird Recycler Ansicht Punkt-Adapter erweitern. Wir werden hier Interclass erstellen, die unser View-Halter sein wird. Es ist Benutzerhalter und es erweitert. Edu-Halter. Hier müssen wir Konstruktor generieren. Und wir werden bei Typ von unserem Benutzer Inhaber hören. Jetzt müssen wir Methoden implementieren, die erforderlich sind, um die Fehler loszuwerden. Innerhalb dieses Adapters benötigen wir ArrayList der Benutzer. Es wird Benutzer genannt werden. Wir werden Benutzerobjekte hier speichern. Wir werden Kontext brauchen. Und wir werden auch eine Art Schnittstelle für Klick-Ereignis benötigen. Zuhören werden tatsächlich Klick-Events an unsere Freunde Aktivitäten übergeben, so dass wir onclick-Ereignisse reagieren können. Und wir werden hören, erstellen Sie eine neue Schnittstelle, die aufgerufen wird On Benutzer Klick-Listener. Es wird Methode aufgerufen, auf Benutzer geklickt haben. Und wir werden Position des Benutzers übergeben, der angeklickt wird, Position innerhalb dieser ArrayList. So dass wir in der Aktivität eines Freundes wissen, welcher Benutzer tatsächlich angeklickt wird. Wir werden nun diese Schnittstelle hier hinzufügen. Und wir werden jetzt Konstruktor mit diesen drei Parametern erstellen. Wir werden jetzt View-Halter erstellen. Es wird View sein, die gleich dem Layout Inflator aus Kontext Punkt aufblasen ist. Und wir müssen unseren Benutzerhalter innerhalb des Layouts erstellen. Lassen Sie uns nun eine Zeile entwerfen, die in der Aktivität unseres Freundes angezeigt wird. Root-Layout werden Karten, die Sie sein. Es wird Wrap-Inhalt sein. Für die Höhe. Wir werden hier einige Margen geben. horizontale Rand wird also zehn dB sein. Rand oben wird zehn dB sein. Also wollen wir Raum zwischen Benutzerzeilen und Eckenradius wird 40 DP, 14. In hier werden wir lineares Layout haben, das übergeordnete Weizen Polsterung von 70 b. Wir werden Tag auf diese Weise schließen. Und hier drinnen wollen wir eine weitere Kartenansicht haben , weil wir unser Profilbild um sie herum haben wollen. Also werden wir tarik mit Descartes-Ansicht und Eckenradius verwenden, um Bodenbild zu erhalten. Also, hier wird das Bild sein, das unser Profil halten wird, wie wir von der Firebase holen werden. Idee davon wird Bild prof und Maßstab Typ dieses Bildes werden zentriert beschnitten, so dass wir unser Bild innerhalb des Kreises Hintergrund dieser Kartenansicht abgeschnitten haben. Eigentlich Hintergrundfarbe wird Primärfarbe sein. Und wir müssen auch hier Textansicht haben, die einen Benutzernamen unseres Benutzers anzeigt. Also werden wir es hier unter Verwerfungsansicht setzen. Es wird Wrap Content sein. ID, Techniker dx, t, Benutzername. Textfarbe wird weiß sein. Wir setzen hier einen linken Rand. Und die Schwerkraft wird Mitte sein, so dass sie jetzt zu unserem Adapter zurückgeht. Wir werden aufgeblasen hören dieser Benutzerhalter Eltern stellen wird, und wir wollen es nicht anfügen geschrieben. Und wir werden einen neuen Benutzerhalter mit dieser Ansicht zurückgeben. Hier möchten wir die Punkt-Punkt-Punkt-Größe eines Benutzers erhalten. Und in OnBind View-Halter, werden wir die Daten auf unser Layout setzen, das wir gerade entworfen haben. Also zuerst, lassen Sie in diesem View-Halter gehen und setzen Textansicht und Bildansicht, die wir gerade in unserer XML-Datei hinzugefügt haben . Also hier werden wir diese TXT-Benutzernamen initialisieren. Dies ist also die Textansicht, und jetzt müssen wir diese Bildansicht initialisieren. Und bei der Bindung wird die Holder-Methode aufgerufen, wenn wir die Daten in unserem Layout aufblasen wollen. Also werden wir uns auf diese beziehen. Der Benutzername. Wir werden Text an Benutzer Punkt get Position setzen, dot get username. Lassen Sie uns hier ein Semikolon. Wenn du es nicht tust. Wenn Sie sich jetzt fragen, wie Sie es aufblasen, diese Bildansicht mit Profilbild, müssen wir Glide verwenden. Öffnen Sie also Ihren Webbrowser und suchen Sie nach Gleitabhängigkeit. Öffnen Sie also diesen Link und kopieren Sie diese, um zurück zu Android Studio zu gehen. Und hier, fügen Sie es einfach ein und klicken Sie auf Synchronisieren. Nun, gehen wir zurück zum Adapter und beziehen sich auf diese gleiten twit Kontext dot load. Um die Bild-URL zu erhalten, müssen wir auf Benutzer ArrayList beziehen. Wir werden bestimmte Benutzer, die Position bekommen und wir werden Profilbild bekommen. Wenn Sie, wenn Sie sich nicht erinnern, das ist das Metall, das wir beziehen. Also holen wir es im Grunde aus dem Benutzerobjekt, das sich in Firebase befindet. Hier werden wir angeben, welches Bild aufgeblasen wird, falls der Fehler auftritt. Das Bild wird also dieses Bild sein. Jetzt hier, wir müssen einen Platzhalter setzen. Und es ist, Ich glaube, dass Es keinen Fehler, aber Bild wird nicht geholt, weil es nicht existiert. Oder wenn die URL ungültig ist. Wir werden es das gleiche Bild setzen. Und schließlich werden wir es in Halter-Punkt-Bildansicht aufblasen. Das war's also. Unser Adapter ist fertig. Gehen wir zurück auf die Aktivität des Freundes und L. In Frankreich Aktivität müssen wir Recycler-Ansicht erklären. Wir werden Array eine Liste von Benutzern benötigen. Und dann Fortschrittsleiste Benutzeradapter , die wir gerade erstellt haben. Benutzer Adapter Punkt onClickListener. Also beziehen wir uns auf die Schnittstelle, die wir hier eingefügt haben. Jetzt in onCreate Methode, werden wir einige davon initialisieren. So werden wir den Fortschrittsbalken initialisieren. Benutzer ArrayList, Recycler-Ansicht. Und auf Benutzerklick-Listener wird gleich dem neuen Benutzeradapterpunkt auf dem neuen Benutzerklick-Listener sein. Wir haben vergessen, den Sampling-Hörer grundsätzlich auf unseren Artikel zu setzen. Und wir werden es hier in diesem Konstruktor tun. Also werden wir hier nur sagen Element Ansicht Punkt setOnClickListener, neuer onClickListener. Und hier werden wir diese auf Benutzer angeklickt aufrufen , so. Auf Benutzer geklickt und Adapterposition abrufen. Also beziehen wir uns auf diese Schnittstelle, auf diese Benutzer klicken Listener. Und weil die Aktivität abschließt, werden wir diesen Klick-Listener an den Konstruktor unseres Adapters übergeben. Wenn wir hier etwas anklicken, wird dies hier ausgelöst und wir werden wissen, dass der Benutzer angeklickt wird. So werden wir für jetzt setzen Toast Nachricht, die auf Benutzer angezapft sagen wird. Und wir werden Benutzer durch diese Position bekommen, und wir werden den Benutzernamen dieses Benutzers erhalten. Jetzt müssen wir Benutzer irgendwie holen und wir werden eine neue Methode für erstellen, zu diesem Zweck. Wir beziehen uns auf die Firebase-Datenbank Punkt GetInstance erhalten Benutzer referenzieren . Und wir werden hinzufügen. Ein Listener für ein einzelnes Ereignis, wie so. Also hier, werden wir for-Schleife verwenden, um unsere Benutzer zu bekommen. Also für Daten-Snapshot, in diesem Snapshot, Dot bekommen Kinder. Grundsätzlich bekommen Kinder geben uns eine Liste dieser Elemente. Das ist also, das wird erste Kinder sein, das wird zweite Kinder in dieser for-Schleife sein. Also werden wir diese Kinder hinzufügen, aber wir müssen den Wert erhalten und dieser Wert wird Objekt selbst sein. Also auf diese Weise, wenn diese zuerst in for-Schleife kommt , werden wir dieses Benutzerobjekt haben. Von hier aus. Nächstes Mal werden wir diesen haben, und so weiter. Wenn dies abgeschlossen ist, erstellen wir Benutzer Adapter, Weizen, Benutzer ArrayList. Wir würden Listener klicken, die hier angegeben ist. Und Aktivität ist diese. Mal sehen, ob die Bestellung korrekt ist. Also müssen wir hier drinnen die Plätze wechseln. Es wird so sein. Jetzt möchten wir den Layout-Manager unserer Recycler-Ansicht auf den linearen Layout-Manager setzen. Und wir werden den Adapter so einstellen, dass er dieser ist. Nun, was wir tun müssen, ist, dass wir die Sichtbarkeit der Fortschrittsleiste auf Waffe und die Sichtbarkeit der Recycler-Ansicht auf sichtbar setzen müssen . Also, wenn wir unsere App öffnen, wenn wir diese Aktivität öffnen, werden wir get Benutzer wie folgt aufrufen. Lassen Sie uns also die App ausführen und sehen, ob es funktioniert. Jetzt läuft die App und Sie können sehen, dass sich der Fortschrittsbalken dreht, weil er die Daten immer noch nicht abgerufen hat. Und sobald die Daten abgerufen wurden, verschwand der Fortschritt und wir haben zwei Benutzer aus unserer Datenbank. Lassen Sie uns nun sehen, wie man Swipe implementiert, um etwas zu aktualisieren. Wenn wir ziehen, wenn wir angerufen klicken und ziehen von oben nach unten, wollen wir Benutzer noch einmal holen. So können Sie auch sehen, dass, wenn wir auf Benutzer klicken, wir haben Toast Nachricht, die wir hier gesetzt haben. Also, um den Swipe zu implementieren, um zu aktualisieren , müssen wir, müssen wir für das auf Google suchen, weil es Bibliothek ist. Wenn wir darauf klicken, können wir leicht finden. Implementierungscode und das wird in Build-up Gradle gesetzt werden. Wir werden dies auf die neueste Version aktualisieren und synchronisieren. Jetzt. Jetzt gehen wir zurück zu den Aktivitäten von Freunden. Und hier, wir müssen diese Streichen verwenden, um Layout zu aktualisieren. Und es muss Root-Layout sein. Also lassen Sie uns einfach mit der Eingabe Swipe Refresh-Layout. Und wir müssen unser Constraint-Layout so verschieben, dass es unten ist. Es wird also match_parent sein und alle darin umgibt. Aber das Beschränkungslayout selbst wird mit Swipe umgeben, um zu aktualisieren, mit Swipe Refresh-Layout. Also hier haben wir Fehler. Wir haben, Wir haben kein tatsächliches Bild, weil o hier nur injiziert diese 5p Refresh-Layout und Android Studio ist noch nicht bereit, aber vertrauen Sie mir, es funktioniert. Lassen Sie uns eine ID in hier setzen , so dass wir darauf Bezug nehmen Aktivität, lasst uns erklären hören, überleben, aktualisieren Layout. Wir werden es hier einleiten. Und wir werden auf Refresh Listener setzen. Grundsätzlich, wenn wir von oben nach unten gezogen haben, wird dieses Metall hier ausgelöst. Und was wir tun werden, werden wir wieder rufen Benutzer bekommen. Aber mal sehen, was passiert, wenn wir die App jetzt ausführen. Wenn wir so ziehen, beginnt es unbegrenzt zu drehen. Und die, wir haben duplizierte Werte hier drin. Um also das erste Problem mit unbestimmter Drehung zu lösen, nach dem Aufruf dieser Methode müssen wir nach dem Aufruf dieser Methodedas Swipe Refresh-Layout setzen und die Aktualisierung auf false setzen. Und jetzt wird es aufhören zu erfrischen, nachdem wir es gezogen haben. Aber um zu verhindern, dass diese Daten dupliziert werden. Hier müssen wir zunächst alle Daten aus unserer Benutzerdatenbank löschen. Weil Rückruf Benutzer bekommen, sagen wir dies ist, dass wir nur unsere Benutzerliste mit den gleichen Daten anhängen. Wenn wir nun die App ausführen, wird sie behoben. Also mal sehen. Okay, also lasst uns jetzt ziehen und du kannst sehen, dass alles wie erwartet funktioniert. Im nächsten Video werden wir an der Nachrichtenaktivität arbeiten, und wir werden endlich sehen, wie man Nachrichten von Benutzer zu Benutzer sendet. 7. Messaging – ChatApp endgültig: Jetzt ist es an der Zeit, Nachrichtenaktivität zu erstellen. Also lasst uns hier reingehen und eine neue leere Aktivität erstellen. Nennen wir es Nachrichtenaktivität. Und klicken Sie auf Fertig stellen oder drücken Sie die Eingabetaste. Und lassen Sie uns zuerst XML entwerfen. Hintergrund wird Gradienten sein. Wir werden ein lineares Layout hier einfügen, das übereinstimmt Elternteil, und die Höhe wird 75 dp sein. Also, was wir mit diesem LinearLayout tun wollen, und im Grunde wollen wir dieses lineare Layout statt dieser hier Toolbar sein. Also zuerst müssen wir diese Symbolleiste hier entfernen. Zu diesem Zweck müssen wir hier einen neuen Stil definieren. Dieser Stil wird Stil sein. Wir erzählen Symbolleiste. Eltern werden tatsächlich dieser sein. Farben werden die gleichen wie Farben aus diesem Team sein. Aber der Unterschied ist nur, dass wir keine Aktionsleiste wollen. Jetzt in der Manifestdatei, hier, werden wir uns bewerben. Und dieses Team, das wir gerade erstellt haben. Also, um dieses Layout zu aktualisieren, alles, was Sie tun müssen, ist, klicken Sie hier und klicken Sie auf Erzwingen aktualisieren Layout. Unser Layout wird aus irgendeinem Grund immer noch nicht aktualisiert, wahrscheinlich wegen einiger Fehler in Android Studio. Aber wenn wir zur Aktivität von Freunden zurückkehren, lassen Sie uns diese Nachrichtenaktivität starten, um zu sehen, ob es wirklich keine ActionBar hat, oder es ist in diesem, oder es ist wie in dieser Vorschau. Also werden wir es einfach von hier aus öffnen, wenn wir auf einen Benutzer klicken. Also lassen Sie uns die App starten. Wenn wir auf den Benutzer klicken, sehen wir, dass es keine Symbolleiste wie erwartet. Aber aus irgendeinem Grund ist Android Studio fehlerhaft. So können Sie versuchen, Android Studio zu schließen und zu öffnen. Wieder, wenn es dir auch passiert. Also werde ich einfach so arbeiten, wie es ist, weil es mich nicht zu sehr stört. Ich weiß, dass es gut funktionieren wird. Also werde ich einfach weitermachen. Wir arbeiten daran. Hintergrund dieser LinearLayout wird also sekundäre Farbe sein. Seine Ausrichtung wird horizontal sein. Und ich muss es auf diese Weise schließen, weil ich ein paar Dinge hier reinlegen möchte. Diese Elemente werden Kartenansicht sein. Wir würden 55 DP für Breite und Höhe. Schwerkraft wird im Mittelpunkt stehen. Und hier möchte ich Bildansicht, die übergeordnete übereinstimmt. Und dieses Bild wird im Grunde Profilbild des Benutzers sein , der mit uns chatte. Wir fügen den Eckenradius 44 DP hinzu, um ihn zum Beispiel zu runden. ID der Bild-Symbolleiste Und Skalierungstyp wird zentriert Zuschnitt. Standardmäßig wird das Quellbild dieses sein. So können wir es auf diese Weise tun. Auch. Neben diesem Profilbild möchten wir Ihnen Text haben, der den Benutzernamen des Benutzers anzeigt, mit dem wir mit ihm chatten. So können wir Inhalte eingewickelt werden. Wir werden einen Rand links hinzufügen, und wir werden es in der Mitte sein. Sie können auch auf diesem Blueprint sehen, wo er positioniert wird. Jetzt müssen wir Steuernummer hinzufügen, die TXT sein wird, zum Beispiel mit chatten. Jetzt müssen wir diesen Teil hier entwerfen. Also werden wir einen Fortschrittsbalken setzen, der 200 dp sein wird. Es wird in der Mitte zentriert sein. Wir werden es einschränken. Wir werden es so einschränken. ID davon wird Fortschrittsnachrichten sein. Wir müssen auch hier die Recycler-Ansicht einfügen, die 0 dP sein wird. Weit und hoch, weil wir es später auf eine Komponenten-ID beschränken werden, werden Recycler-Nachrichten sein. Und unter diesem Recycler wollen wir Text bearbeiten. Lassen Sie uns eine zufällige Breite für jetzt setzen, weil wir auch einschränken, es ist etwas ID EdD-Text sein wird. Und für jetzt wird es eine Einschränkung wie diese sein. Wir müssen etwas Hintergrund, einen benutzerdefinierten Hintergrund zu diesem Editiertext geben . Und wir werden es hier schaffen. So werden wir setzen, wir werden es Nachrichteneingabe, Hintergrund nennen. Es wird Form sein. Wir würden einfarbig des Gelehrten. Wir werden einen Radius hinzufügen 13 dp sein. Wir werden dies anwenden. Also brauchen wir hier auch eine Bildansicht, die zum Senden von Nachrichten verwendet wird. Also werden wir ein Vektor-Asset dafür erstellen. Lassen Sie uns klicken und nach Sinn suchen. Also wird es dieser sein. Sandbild wird der Name sein. Und fertig. Jetzt werden wir hier die Bildansicht mit 40 dB Abmessungen setzen. Wir werden es hierher bringen. Wir müssen Quelle dieses Bildes setzen, um Sandbild zu sein. Also werden wir es so einschränken. Nun werden wir bearbeiten Text auf diese Bildansicht beschränken. Jetzt für die Breite setzen wir 0 für die Höhe. Es wird eine interessante Sache sein. Also werden wir diese Höhe verlassen, um Wrap-Inhalt zu sein. Aber wir werden minimale Höhe einstellen, dieser Text bearbeiten 45 dp, und die maximale Höhe wird 100 dB sein. Also, was bedeutet es? Es bedeutet, dass dieser EditText nicht weniger sein kann, kann kleiner als 45 dp sein. Und wenn wir mit der Eingabe von Nachrichten beginnen, wird es erweitert, weil dieses Attribut hier Wrap-Inhalt ist. Einmal erweitert. Erreichen Sie 100 dp. Es wird nicht mehr erweitert. Deshalb verwenden wir die minimale und maximale Höhe. Polsterung vertikal wird zehn dp und Polsterung horizontal und B wird 20 db sein. Also, was wir jetzt auch tun müssen, ist die Marge unten auf zehn dp zu setzen. Und auch werden wir unten Rand zu dieser Bildansicht auf so etwas setzen. So können Sie es auch ein wenig ändern, so dass Sie horizontale Ränder auf neun DP setzen können, zum Beispiel, um dieses Aussehen zu erreichen. Oder wie Sie möchten, können Sie sogar erweitern. Sie können sogar diesen Eckenradius erhöhen, um so etwas zu erreichen. Jetzt gehen wir zurück zu dieser Recycler-Ansicht. Wir wollten, dass diese Recycler-Ansicht eine Einschränkung unten ist und oben sollte hier sein. So können wir nun die Breite dieser Recycler-Ansicht ändern, um Eltern zu entsprechen. Und hier werden wir Nachrichten haben. Aber anfangs wird die Sichtbarkeit verschwunden sein. Denn wenn wir die Nachrichten erhalten, werden wir es erweitern und wir werden Fortschrittsbalken ausblenden. Lassen Sie uns nun die App ausführen und sehen, wie es aussieht. Lasst uns das öffnen. Und das ist das Layout. Es wird, es wird sich für immer drehen, weil wir keine Logik in unserer Nachrichtenaktivität in Java-Code haben . Also werden wir jetzt daran arbeiten. Lassen Sie uns also Nachrichtenaktivität öffnen und lassen Sie uns alle Komponenten initialisieren. Also haben wir Recycler-Ansicht. Dann haben wir EditText für die Eingabe einer Nachricht. Wir haben TextView. Dieser Wein hier. Wir werden es dxdy nennen, mit dem chatten. Wir werden Fortschrittsbalken haben. Wir werden nun all diese initialisieren. Ma, wir werden ADT-Text initialisieren. Ich glaube. Das ist derjenige, also ja. Jetzt schreibe dir eine SMS. Und Fortschrittsbalken. Also ist es dieser hier. Nun, was wir tun müssen, ist, dass wir Nachrichtenobjekt erstellen müssen. So Nachrichtenobjekt wird folgende Attribute haben. Absender, der eine Zeichenfolge sein wird. Es wird Nachrichtenempfänger und den Nachrichteninhalt haben. Also lassen Sie uns jetzt Konstruktor erstellen. Lassen Sie uns Getter und Setter erstellen. Und lassen Sie uns einen leeren Konstruktor wegen Firebase wie folgt erstellen. Also hier werden wir auch ArrayList von Nachrichten haben. Wir werden es hier einleiten. Wir haben vergessen, diese Bildansicht hier hinzuzufügen. Also werden wir es jetzt tun. Und wir werden es hier drinnen initialisieren. Wir haben auch dieses Bild zum Senden von Nachrichten. Es ist dieser hier. So wird es seine ID in die IMG-Sendenachricht ändern. Ändern Sie das auch hier. Und wir werden es hier drinnen initialisieren. Jetzt müssen wir zur Aktivität des Freundes zurückkehren. Und wenn wir auf einen bestimmten Benutzer klicken, werden wir diese Toastnachricht löschen. Und was wir tun wollen, ist, dass wir die Nachrichtenaktivität starten wollen, aber wir müssen auch einige Elemente hier übergeben. Also werden wir einen zusätzlichen Benutzernamen von, sagen wir, einen Raumkameraden setzen. Weil wir im Grunde Chatrooms haben. Sie werden sehen, wie wir die später erstellen und dies wird gemacht werden, sagen wir. Dies wird users.js noch Position erhalten und erhalten, Benutzernamen ihres Mitbewohners erhalten. Denn wenn wir Benutzer Liste holen, wenn wir auf bestimmte Benutzer klicken, wollen wir seinen Benutzernamen auf unsere Nachrichtenaktivität übertragen. Grundsätzlich, wenn Sie mit John chatten möchten, wenn wir auf John, John klicken, wird der Benutzername hier übertragen. Und wir können diesen Benutzernamen zum Beispiel hier einfügen. Aber lassen Sie uns zuerst hier alle Daten, die wir brauchen. Wir brauchen auch E-Mail des Mitbewohners. Und wir werden es so bekommen. Dann werden wir Bild von Mitbewohner setzen . Und wir wollen unser eigenes Image bekommen. Und jetzt mit der Frage, wie man unser eigenes Image bekommt. So werden wir angegebene String-Variable hören, die mein Bild, URL sein wird. Und hier, wenn wir die Daten holen, werden wir dieses Bild einstellen. Und wie man das macht. müssen wir in diesen Get-Benutzermethode gehen. Und nachdem wir all das getan haben, wird einfach durch alle Benutzer, die wir geholt haben, Schleife . Und wir werden überprüfen, ob Benutzer dot E-Mail gleich Firebase ist sollte Punkt, Instanz, Punkt bekommen aktuellen Benutzer. Wir bekommen eine E-Mail. Das ist also unsere E-Mail. Und hier überprüfen wir, ob unsere E-Mail gleich der E-Mail des Benutzers aus der Benutzerliste ist. Und das liegt daran, dass diese Benutzerliste, die Liste dieses Benutzers. Wenn es aufgeblasen wird, wird es passieren, dass auch unser Objekt, unser eigenes Profil hier gespeichert wird. Also später hier, werden wir alle diese Objekte durchlaufen und wir wollen uns selbst finden. Und wenn dies der Fall ist, ist mein Bild gleich Profilbild dieses Benutzers, weil das wir sind. Und wir werden Rückkehr hören, denn wenn wir uns selbst finden, wollen wir keine Schleife mehr machen. Um etwas Speicher zu sparen. Und wegen der Leistung, müssen wir nicht später Lope, wenn wir uns bereits gefunden. So werden wir setzen, so werden wir dieses Bild auch setzen. So wie so. So können wir jetzt zu unserer, zu unserer Nachrichtenaktivität zurückkehren . Hier werden wir einige Saiten setzen. Es wird sein, es wird Benutzername oder der Mitbewohner sein. Dann werden wir mit dem Benutzer chatten. Und wir werden Chatroom-ID haben. Und Sie werden später sehen, wie wir die Raumkennung bekommen und was es eigentlich ist. Für jetzt, lassen Sie uns zuerst Benutzernamen oder einen Mitbewohner von get Intent dot GetString extra bekommen. Und das ist die Schnur. Jetzt können wir erhalten Chatten mit Benutzer. Eigentlich werden wir dies in eine E-Mail eines Mitbewohners ändern. Wir haben Tippfehler hier, also müssen wir das auch beheben. Und jetzt werden wir hier die Breite auf Benutzername, die Mitbewohnerin. Also haben wir jetzt im Grunde diesen Text hier mit dem Benutzer gesetzt, mit dem wir chatten. Also ist jetzt der schwierige Teil, zu begreifen, vielleicht müssen wir den Raum für die Klappe aufstellen. Also, warum wir das tun und was es ist. So Logik, unsere Nachrichten in Firebase zu halten, wird die folgende sein. Also hier neben dem Benutzer, werden wir keine Nachrichten aufgerufen haben. Und wenn wir das nicht erweitern, werden wir ein Zimmer IDs haben. Stellen wir uns also vor, dass wir Max haben und Alex haben, und sie plaudern, die miteinander. Also müssen wir im Grunde eine Art von ID generieren, die ID des Chatrooms sein wird. Für max und Alex brauchen wir nur ein Zimmer für zwei verschiedene Nutzer. Und es spielt keine Rolle, ob Lx Nachrichten an max zuerst oder max an Alex sendet, diese Zeile muss eindeutig sein. Um diese Art von ID zu generieren, das einfachste, was zu tun ist. Machen Sie etwas mit Namen unserer Benutzer. Grundsätzlich sollte unsere Chatroom-ID aus Benutzernamen der Benutzer in diesem Chatroom bestehen. Wie kann man diesen Namen einzigartig machen? Also im Grunde werden wir einen Namen unserer Benutzer vergleichen und alphabetisch, wir werden diese Art von Namen generieren. Also, wenn wir Max und Alex haben, plaudern, sollte der Name unseres Zimmers wie Macks sein. Und dann gehen wir zurück auf die Firebase , hören Nachricht ist nicht. Es ist besser, wenn ich Ihnen zeige, wie es in der App funktioniert, die ich erstellt habe, bevor ich diese Tutorials aufnehme. Also das ist, wir haben Benutzer und Nachrichten nicht und wenn wir diese erweitern, das sind im Grunde Chatrooms. Also, wenn wir John Wayne haben oder Max kommuniziert, werden wir John Wayne max Chatroom generieren, und es wird Nachrichten Objekte enthalten. Es enthält Nachrichtenobjekte. Jedes davon sind also Nachrichtenobjekte, die wir erstellt haben, die wir zuvor erstellt haben. So haben wir Sender, Empfänger und den Nachrichteninhalt. So ist es so. Wenn John begann Gespräch zuerst, werden wir diese falsch mit dieser ID erstellt, die im Grunde Name ist, die aus zwei Benutzernamen besteht. Und wenn Max mit der Polarisation beginnt , wird dieser Romain erstens auch gleich sein. Auf diese Weise vermeiden wir das Duplizieren von Räumen und sparen Speicherplatz in der Datenbank. Es scheint also vielleicht ein bisschen schwer zu fassen. Aber wenn wir anfangen, es zu erstellen, und wenn Sie sehen, wie es tatsächlich in der Praxis funktioniert, wird es viel einfacher sein. Also werden wir eine Methode namens Setup Chatter erstellen. Oh, so werden wir hören der Benutzer verwiesen wird. Wir müssen hier UID von uns selbst bekommen. Wir werden Listener für einzelne Ereignis hinzufügen. Also jetzt, wenn wir auf die ID gehen, werden wir den Benutzernamen von uns selbst bekommen. Benutzername lautet. Snapshot dot erhalten Wert Benutzer, diese Klasse, user_data Klasse tatsächlich und erhalten Benutzernamen. Also hier haben wir unseren Benutzernamen. Dann müssen wir diesen Benutzernamen mit dem Benutzernamen unseres Mitbewohners vergleichen , damit wir wissen können, welcher Name zuerst geht und welcher Name zuletzt geht. Und wir werden es so vergleichen. Also, wenn der Benutzername von roommate.com, mein Benutzername größer als 0 ist, bedeutet dies, dass unser Benutzername zuerst und der Benutzername des Mitbewohners zuletzt sein wird. Also Chatroom-ID wird gleich diesem sein. Andernfalls, wenn der Benutzername des Mitbewohners mit unserem Benutzernamen gleich 0 ist, bedeutet dies, dass im Grunde Benutzernamen gleich sind und alphabetisch ihre Reihenfolge gleich ist. Also ist es im Grunde zu vergleichen. Wenn wir hier Macs im Vergleich zu Alex haben, Es wird 0s vor einem im Alphabet sehen. Also zunächst kann es sehen, dass dies nicht der Fall ist, ist, dass wir Nummer zurückgeben, die höher als 0 ist. Und wir werden dies als Benutzernamen bekommen. Hier. Das wird passieren, wenn wir Benutzer haben, Alex, Alex. So wird es a mit a vergleichen, dann wird es L2, l und so weiter vergleichen . Wenn es feststellt, dass alle die gleiche Reihenfolge haben, wird 0 zurückgegeben. In diesem Fall spielt es keine Rolle, wie wir diese verketten. Wir können das Gleiche tun, wie wir es vorher getan haben. Und sonst. Es bedeutet, dass die Chatroom-ID so zusammengesetzt werden muss. Ihr Benutzername des Benutzers, mit dem wir chatten, muss also zuerst sein. Nun, was wir tun müssen, ist, dass wir Nachricht, Listener anhängen und es wird auch diese Gruppe initialisieren. Bisher bekommen wir nur die Daten und wir schreiben nichts an Firebase. Und was ich meine, indem ich Zuhörer anhege, ist, dass wir einen Zuhörer auf bestimmte NADH setzen müssen. Und wenn die Nachricht hier geändert wird, wenn wir einige Daten erhalten, müssen wir unsere Aktivität benachrichtigen und es wird neue Nachrichten holen. Also werden wir diese Methode erstellen. Es wird bekommen, es wird im Grunde Chatroom-ID benötigen. Wir werden setzen und zumindest in unseren beiden Nachrichten plus Chatroom ID Punkt hinzufügen. Jetzt brauchen wir, wir sind jetzt wollen wir einen Wert Event Listener nicht Single bekommen. Denn wenn Sie einzelne setzen, Wir werden nicht über Datenänderungen benachrichtigt werden. Und auf diese Weise wird bei Datenänderungen jedes Mal ausgelöst, wenn eine neue Nachricht empfangen wird. Also, wenn wir neue Nachrichten bekommen, Erstens, wir wollen vorherige Nachrichten löschen. Und für Daten-Snapshots. In Snapshot erhalten Kinder. Wir werden Nachricht zu unserer Nachrichten ArrayList hinzufügen. Also machen wir ähnliche Dinge, wie wir es getan haben, als wir Benutzer hinzugefügt haben. Nach jedem Abrufen neuer Nachrichten möchten wir zur letzten empfangenen Nachricht scrollen. So ist es die Größe aller Nachrichten minus1. Also wollen wir Nachrichten am unteren Rand halten. Also wollen wir, wenn wir eine neue Nachricht erhalten, Recycler-Ansicht wird automatisch nach unten gescrollt werden. Sie werden sehen, dass wir in der Praxis die Sichtbarkeit unserer Recycler-Ansicht auf sichtbar setzen möchten und der Fortschrittsbalken verschwunden sein muss. Nun, was wir auch tun müssen, ist, dass wir diesen Nachrichtenadapter erstellen müssen. Also hier lassen Sie uns Semikolon hinzufügen, um Fehler zu vermeiden. Wir werden diese Methode nennen. Nach all diesen Berechnungen mit Chatroom ID und Chatroom einrichten aufgerufen werden, wenn wir diese Aktivität öffnen. Okay, jetzt müssen wir einen Nachrichtenadapter erstellen. Also werden wir eine neue Klasse erstellen. Es wird Recycler Ansicht Dot Adapter erweitern wird Interclass von denen Nachrichtenhalter aufgerufen werden. Es erweitert View-Halter wurde Konstruktor generiert. Hier drin. Der Typ wird Nachrichtenhalter sein. Und lassen Sie uns alle Metalle umsetzen. Wir wollen Felder haben, ArrayList Nachricht. Dann wollen wir Absenderbild haben. Wir wollen ein Empfängerbild haben, und wir wollen Kontext haben. Also, warum wir brauchen Absender und Empfänger Bild dies, weil wir wollen rechts, direkt an der rechten Seite unsere Bilder haben . Neben der Sprechblase, die die Nachricht enthält. Und Sander Bild wird auf der linken Seite unseres Bildschirms sein. Sie werden sehen, wie wir das später machen. Jetzt lassen Sie uns Konstruktor erstellen. Mit all denen. Hier möchten wir Nachrichten Größe zurückgeben. Und jetzt müssen wir Nachrichtenhalter erstellen. Also werden wir ein neues Layout erstellen. Und wir werden hier den Code innerhalb aufteilen. Wir werden Constraint Layout setzen. Es wird vernetzt übergeordnete und die Höhe wird Wrap Content sein. ID davon wird CC-Layout sein, da es sich um Beschränkungslayout handelt. Im Inneren, wo Sie haben Sie 35 DP, 35-Tage-Strahl genannt , weil wir abgerundete Bild des Absenders und Empfängers haben wollen. Sie werden also diese Bildansicht hören. Die ID wird klein sein. Profilbild, Maßstabstyp wird zentriert zuschneiden. Und Quelle. Wir können sagen, dass es standardmäßig dieser ist. Also lassen Sie uns Corner Radius 35 hinzufügen. Lassen Sie uns auch Rand horizontal hinzufügen. Jetzt unter Kartenansicht möchten wir TextView hinzufügen, die tatsächlich Nachrichteninhalte halten wird. So wird es Wrap-Inhalt mit Rand horizontal von neun DEP sein. Hintergrund wird dieser sein. Wir können es später ändern. Lassen Sie uns ein paar Tools Text, nur um zu sehen, wie es real. Nun, es ist wichtig. Lassen Sie uns einige zufällige Texte setzen, um zu sehen, wie gut Nachricht aussehen. Jetzt können Sie sehen, dass unsere Botschaft weiß wird. Und um das zu beheben, müssen wir auch drei quid max width verwenden. Dieses Mal, bevor wir mit maximaler Höhe verwendet, als wir an der Bearbeitung von Text in hier arbeiteten. Jetzt sehen Sie also, dass unsere Botschaft breiter sein kann. Wir werden hier etwas Polsterung hinzufügen. Lasst uns diese Bettwäsche stellen. Und wir wollen den oberen Rand setzen. Damit wir einen gewissen Abstand zwischen Ihren Nachrichten haben können. Wir brauchen auch ID für die Narbenansicht. Du wirst es später sehen. Warum? Wenn Sie sich fragen, warum sieht es so aus? Warum hat Beschränkung nichts geändert? Nun, das liegt daran, dass wir in der Laufzeit Profilbild nach links oder rechts verschieben möchten. Und dieser Text, je nachdem, ob es von uns oder von unserem Mitbewohner gesendet wird. Wenn wir also eine Nachricht senden, wollen wir, dass Profilbild hier ist und Textnachricht hier ist. Und wenn wir eine Nachricht erhalten, wollen wir, dass das Profil hier ist und SMS daneben steht. Also werden wir all das in diesen OnBind View-Halter tun. Also zuerst, lassen Sie uns in Nachricht Halter definiertes Constraint-Layout. Textansicht, die Nachricht, ImageView, die Profilbild sein wird. Initialisieren Sie diese jetzt. Lassen Sie uns überprüfen, was die Idee davon war? Wir haben es nicht hinzugefügt. wir also TXT-Nachrichteninhalte. Dieses Bild ist ein kleines Profilbild. Und lasst uns zuerst gehen. Und hier erstellen Sie unsere Ansicht und geben Sie neuen Nachrichtenhalter zurück. Und das werden Sie streiten. Jetzt ist der interessante Teil. In OnBind View-Halter möchten wir zunächst eine Nachricht erhalten. Und diese Nachricht wird von dieser ArrayList nach Position genommen und Inhalt erhalten. Und hier müssen wir mit Einschränkungen durch den Java-Code manipulieren. Also, wie geht man das? Wir müssen Constraint-Layout verwenden. Und es ist Halter dot LL, Halter dot, cc. Alle. Jetzt wollen wir Scheck hören. Wenn die Nachricht nicht erhalten Position. Vergiss den Absender nicht. Ist gleich dem Firebase-Authentifizierungspunkt GetInstance Punkt erhalten aktuellen Benutzer, der E-Mail erhalten. Dies bedeutet, dass wir Absender dieser Nachricht sind und wir alle diese nach rechts beschränken wollen. Mal sehen, wie es gemacht wird. Wir wollen Constraint Set verwenden, die gleich neuen Constraint Set ist. Dann müssen wir Constraints klonen gesetzt dot clone Constraint Layout, das heißt, das ist diese Einschränkung, diese ganze Zeile, im Grunde. Damit wir in diesem Moment Informationen über Einschränkungen haben können. Dann möchten wir Einschränkungen aus der Kartenansicht löschen. Also lassen Sie uns überprüfen, welche Kartenansicht das ist. Wir wollen von dieser Wachsicht frei machen. Also müssen wir diese ID tatsächlich verwenden, wir wollen Einschränkungen zwischen dieser Profilkartenansicht löschen. Von der linken Seite. Wir möchten auch den Nachrichteninhalt von der linken Seite löschen. Und wir wollen Kartenansicht von seiner rechten Seite verbinden . 2d linear zum Abhängigkeitslayout und Constraint rechts? Marge 0. Also, was bedeutet es? Lassen Sie es uns klarer machen. Also, wenn Sie hier gehen, bedeutet es im Grunde, dass wir Einschränkungen von hier nach dort gezogen haben. Mit anderen Worten, durch diesen Code haben wir dies getan. Also E haben Beschränkung geschrieben, richtig, um Elternteil abzuschreiben. Also von der rechten Seite der Kartenansicht auf die rechte Seite des Beschränkungslayouts mit 0 Rändern. Dann möchten wir diese TextView auf diese Kartenansicht beschränken. Und wir werden das tun, indem wir dies in Nachrichteninhalt ändern, richtig? Auf der rechten Seite der Profilkartenansicht. Und jetzt, nachdem all das abgeschlossen ist, werden wir das im Grunde haben. Und so wird es aussehen. Also lassen Sie uns diese Änderungen rückgängig machen und wir müssen hören. Abhängigkeiten legen einen Punkt fest, der auf das Abhängigkeitslayout angewendet wird. Sonst. Jetzt bedeutet es, dass wir nicht Absender der Nachricht sind. Wir haben die Nachricht erhalten. Und wir wollen im Grunde etwas anderes tun. Also lasst uns all diese kopieren. Wir wollen das Gegenteil tun. Also hier werden wir die richtigen Einschränkungen klären, diejenigen, die hier festgelegt sind. Grundsätzlich haben wir hier die richtigen Einschränkungen gesetzt. Dann hier drin wollen wir linke Einschränkungen anstelle von rechts setzen. Aber hier wollen wir von links nach rechts setzen, denn was wir jetzt erreichen wollen, ist dies. Also linke Seite dieses Textes auf der rechten Seite der Kartenansicht. Jetzt müssen wir setzen, wir müssen das Bild aufblasen, indem wir gleiten. Und hier werden wir Mittelbild aufblasen. Fehler wird, wird aufblasen. Dieses Bild. Spielt ganz. Halter wird auch dieses Bild sein. Und wir werden die Ds in Halter Punkt-Profilbild erlauben. Wir werden das gleiche tun hier, aber anstelle von Absenderbild, wollen wir Empfängerbild aufblasen. Das war's also. Gehen wir nun zurück zur Nachrichtenaktivität. Und hier innerhalb der onCreate-Methode möchten wir einen Nachrichtenadapter initialisieren. Aber zuerst, lasst es uns hier erklären. Was wir also übergeben müssen, ist Messages ArrayList. Wir müssen Sander Bild setzen, das wir von GetInt bekommen und Punkt String extra bekommen. Gehen wir zurück zu der Aktivität und dem Bild des Mitbewohners des Freundes. Grundsätzlich ist meine Bilder tatsächlich Absenderbild und Empfängerbild Bild von Mitbewohner. Jetzt müssen wir Kontext setzen. Das wird es sein. Nachrichtenaktivität. Das hier. Jetzt haben wir Fehler, weil wirdies so trennen müssen dies so trennen müssen und stellen Sie sicher, dass Sie es setzen, dass, nachdem wir Nachrichten initialisiert haben, wir jetzt auch das Bild in der Symbolleiste hier aufblasen wollen. Also werden wir das so machen. So ist es Bild ihrer Mitbewohnerin. Wenn ich mich nicht irre, wird der Platzhalter dieser sein. Fehler wird dieser sein. Und wir werden diese in die Bild-Symbolleiste laden. Also, was wir noch tun müssen, ist hier, nachdem wir erfolgreich Nachrichten erhalten, müssen wir Adapter benachrichtigen. Das Dataset hat sich geändert. Also lassen Sie uns jetzt die App starten und sehen, was los ist. Lasst uns jetzt auf Alex klicken, was übrigens ist, US. Und aus irgendeinem Grund sehen wir hier kein Bild. Also lasst uns hören. Lx hat ein Bild. Und hier haben wir Tippfehler und weil und deshalb haben wir kein passendes Bild hier drin. Lassen Sie uns die App erneut ausführen. Also lasst uns jetzt auf Alex klicken. Sie können sehen, dass wir hier ein Bild haben. Es funktioniert gut. Lassen Sie uns eine Art Nachricht setzen. Wir haben vergessen, SetOnClickListener auf diese Bildansicht hier. Also müssen wir diese zuerst in Ordnung bringen, okay, also lassen Sie uns onClickListener auf dieses Bild senden. Und wenn wir auf diese Nachricht klicken wird auf diese Weise gesendet werden. Also Firebase Database GetInstance erhalten Referenz. Referenz ist Nachricht ist plus Chatroom-ID. Wir verwenden jetzt Dot Push, weil wir zufällige, zufällige Strings wie diese hier, wie diese erzeugen wollen . Und dann werden wir Wert auf diese zufällige Zeichenfolge setzen. Neue Nachricht, Firebase, ot, die GetInstance, erhalten aktuellen Benutzer, erhalten E-Mail. Jetzt müssen wir E-Mail des Empfängers setzen. Diese E-Mail des Empfängers wird von Freunden Aktivität genommen. Es ist E-Mail von Mitbewohner. Also hier bekommen wir es hier rein und verweisen es einfach so. Und Nachrichteninhalte werden aus diesem Editiertext entnommen. Das war's also. Und nachdem wir die Nachricht gesendet haben, möchten wir unseren Editiertext leeren, damit wir anfangen können, neue Nachricht einzugeben. letzte Sache ist, dass wir diesen Adapter auf diese Recycler-Ansicht setzen müssen . Und diese Recycler-Ansicht muss Layout-Manager haben. Führen Sie nun die App aus und sehen Sie, was passieren wird. Also werden wir jetzt anfangen, mit max zu chatten. Wir werden hallo sagen. Und hier haben wir einige Probleme mit der Benutzeroberfläche. Mal sehen, wie das schief gelaufen ist. Lassen Sie uns Adapter öffnen, und lassen Sie uns diese Einschränkungen hier überprüfen. Also hier sollten wir sagen, links, weil wir wollen, um diese Nachricht auf der linken Seite der Karte verbinden Sie. Also lassen Sie uns die App noch einmal ausführen. Und jetzt in hier können Sie sehen, dass wir Nachrichten haben nicht Chatroom ID ist Alex Max und Nachricht Objekt ist diese. Wenn wir jetzt wieder auflaufen, wenn wir das Chatten mit Max öffnen, sehen wir diese Nachricht. Wir können sogar Emojis schicken. Sie können sehen, jetzt haben wir ein anderes Problem. Und das liegt daran, dass dieses Denken im Nachrichtenhalter umhüllt worden sein sollte. Also lassen Sie uns App ein letztes Mal ausführen. So können Sie sehen, wie kompliziert es wird, eine App wie diese zu erstellen. Es gibt viele Versuche und Fehler. Aber am Ende ist das Wichtigste zu verstehen, warum wir etwas in der Art getan haben, wie wir es getan haben. So können wir jetzt beginnen, einige andere Nachrichten zu senden. Es funktioniert einwandfrei. Also lassen Sie uns diese App auf einem weiteren Gerät ausführen um zu testen, wie es sich verhält Skaten mit einem anderen Benutzer. Lassen Sie uns einen Benutzer hier registrieren. Melden wir uns an. Fangen wir an, mit Alex zu plaudern. Hier. Wenn wir Benutzer und OpenGL-Konversation aktualisieren, sehen wir, dass wir Nachricht von Jill haben und wir chatten können. Es funktioniert einwandfrei. Wenn Sie sich fragen, wie Sie eine Benachrichtigung machen. Wenn wir eine neue Nachricht erhalten oder im Grunde, wenn unsere App geschlossen ist und wir senden Nachricht, wie Sie den Benutzer wissen lassen, dass es neue Nachricht. Wir verwenden Push-Benachrichtigungen in diesem Zweck und das ist Thema. Für einige andere Vorträge. werden wir auch lernen. Aber für jetzt ist es ein bisschen fortgeschrittenes Thema, weil wir über Benachrichtigungen im Allgemeinen wissen müssen, und wir müssen über Server und APIs wissen. Ich glaube, dass Sie es genossen haben, diese App zu erstellen. Es war ein bisschen schwierig mit vielen Fehlern. Aber wenn Sie Fragen oder Zweifel haben, bin ich hier, um all Ihre Fragen zu beantworten. Das war's also für mich. Wir sehen uns in der nächsten Vorlesung.