[JAVA] Versuchen Sie, einen einfachen Rückruf zu tätigen

〇Übersicht

Wenn die Architektur in Android-Apps komplexer wird, werden die Klassen, die asynchrone Informationen ausführen, und die Klassen, die sie verwenden, getrennt. In diesem Fall ist es notwendig, eine andere Klasse zu dem Zeitpunkt zu unterrichten, zu dem die asynchron erhaltenen Daten erfasst werden, aber es ist ziemlich mühsam. Aus diesem Grund gibt es verschiedene Bibliotheken wie AsyncTaskLoader, eine Unterstützungsbibliothek, und Bibliotheken, die Ereignisbusse (EventBus, RxJava usw.) verarbeiten. Ich hatte jedoch nicht viele Informationen zum Erstellen primitiver Rückrufe über die Schnittstelle und habe sie daher zusammengefasst. ..

〇 Probenquelle

GitHub

〇 Klassenliste

MainActivity · Hauptklasse -Erstellen Sie Instanzen von TasksRepository und TasksBackgroundDataSource.

TasksRepository

TasksBackgroundDataSource

TasksDataSource -Eine Schnittstelle, die die Verarbeitungsbeziehungen der Datenerfassung zusammenfasst.

Task

〇Auszug aus dem Rückrufteil

(Hinweis) Zum besseren Verständnis in umgekehrter Reihenfolge wie in der obigen Klassenliste aufgeführt.

Definieren Sie eine Funktion zum Abrufen von Daten und eine Funktion, die als Rückruf aufgerufen wird

TasksDataSource


public interface TasksDataSource {

    //Funktion als Rückruf aufgerufen
    interface LoadTasksCallback {
        void onTasksLoaded(List<Task> tasks);
        void onDataNotAvailable();
    }

    //Datenerfassungsfunktion (Es ist nicht erforderlich, sie separat zu schreiben, sondern zusammen zu schreiben)
    void getTasks(@NonNull LoadTasksCallback callback);
}

Implementierte Datenerfassungsfunktion getTasks Nachdem ich es bekommen habe, werde ich die Rückruffunktion aufrufen

TasksBackgroundDataSource


public class TasksBackgroundDataSource implements TasksDataSource {

    @Override
    public void getTasks(@NonNull final LoadTasksCallback callback) {

        final Handler handler = new Handler();

        //Thread-Start
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                 //Anforderungsverarbeitung vom Hauptthread mit Handler (zum Aktualisieren der Ansicht)
                 handler.post(new Runnable() {
                     @Override
                     public void run() {

                         //Datenerfassung
                         //・
                         //・

                         if (tasks.isEmpty()) {
                             //Verarbeitung, wenn keine Daten vorhanden sind
                             callback.onDataNotAvailable();

                         } else {
                             //Verarbeitung bei Daten
                             callback.onTasksLoaded(tasks);
                         }
                     }
                 });

            }
        });
        thread.start();
    }
}

Rufen Sie getTask von TasksBackgroundDataSource auf, erstellen Sie eine Instanz von LoadTasksCallback als Argument, implementieren Sie die aufzurufende Funktion und übergeben Sie sie.

TasksRepository


        mTasksBackgroundSource.getTasks(new TasksDataSource.LoadTasksCallback() {
            //Verarbeitung nach Datenerfassung aufgerufen (wenn Daten vorhanden sind)
            @Override
            public void onTasksLoaded(List<Task> tasks) {
                MainActivity.showTextMsg(changeTasksToString(tasks));
            }
            //Verarbeitung nach Datenerfassung aufgerufen (wenn keine Daten vorhanden sind)
            @Override
            public void onDataNotAvailable() {
                Log.w("DEBUG_DATA","TaskRepository onDataNotAvailable");
            }
        });

〇Zusammenfassung

Nennen Sie das doch! Ich werfe nur eine Instanz, die den Prozess in der Funktion implementiert, die die Daten erfasst, aber das Design, um sie zu realisieren, ist kompliziert. Ich habe dies basierend auf Googles MVP-Beispiel gemacht, aber dort Der Präsentator hat die getTask des Repositorys aufgerufen, und als die getTask der DataSource aufgerufen wurde, wurde der Rückruf in einer Zeichenfolge aufgerufen. Wenn die Anzahl der Erfassungsziele zunimmt, wird es schwierig zu verstehen, daher ist es besser, die Bibliothek zu verwenden. Ich habe vorerst versucht, die Grundlagen zusammenzufassen.

〇Referenz

android/architecture-samples

Recommended Posts

Versuchen Sie, einen einfachen Rückruf zu tätigen
Versuchen Sie, einen Iterator zu erstellen, der einen Blick darauf werfen kann
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
Mach eine Sprache! (Einen einfachen Taschenrechner machen ②)
So erstellen Sie einen Java-Container
So erstellen Sie einen JDBC-Treiber
Ein einfaches Beispiel für Rückrufe in Java
Mach eine Sprache! (Einen einfachen Taschenrechner machen ①)
So erstellen Sie einen Begrüßungsbildschirm
So erstellen Sie ein Jenkins-Plug-In
Wie erstelle ich ein Maven-Projekt?
Versuchen Sie, eine Server-Client-App zu erstellen
CompletableFuture Erste Schritte 2 (Versuchen Sie, CompletableFuture zu erstellen)
So erstellen Sie ein Java-Array
Versuchen Sie, mit JRuby eine plattformübergreifende Anwendung zu erstellen (Generierung von JAR-Dateien).
Versuchen Sie, aus der Kachel des Geographical Institute eine dreidimensionale CS-Zeichnungskachel zu erstellen
Schnittstelle Versuchen Sie, Java-Problem TypeScript 7-3 zu machen
So erstellen Sie eine Java-Kalenderzusammenfassung
Wie erstelle ich einen Discord Bot (Java)
[Docker] [Nginx] Erstellen Sie mit Nginx eine einfache ALB
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
Machen Sie einen Rand links vom TextField
Java Ich habe versucht, einen einfachen Block zu brechen
Ich habe Java gemacht, um (a == 1 && a == 2 && a == 3) immer wahr zu machen
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Inkrementierungsverhalten Versuchen Sie, Java zum Problem TypeScript 3-4 zu machen
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Zeichenfolgenoperation Versuchen Sie, das Java-Problem in TypeScript 9-3 zu ändern
So erstellen Sie eine leichte JRE für den Vertrieb
Ich habe versucht, mit Javafx ein einfaches Spiel zu machen ① "Lass uns Glücksspiel finden" (unvollendet)
Versuchen Sie, mithilfe der JFR-API einen Zeitleistenbericht über die Ausführungszeit einer Methode zu erstellen
Versuche Edelstein freizugeben
Initialisierung von for Versuchen Sie, das Java-Problem in TypeScript 5-4 zu ändern
So funktioniert JavaScript auf einer bestimmten Seite
[Persönliches Memo] Erstellen Sie eine einfache, tiefe Kopie mit Java
Versuchen Sie, ein Zusatzprogramm in mehreren Sprachen zu erstellen
Lass uns einen Roboter bauen! "Eine einfache Demo von Java AWT Robot"
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Wie man ein schattiertes Glas macht
Erstellen Sie ein Reflexionsprogramm ②
Erstellen Sie ein Reflexionsprogramm ③
Versuchen Sie, ein eingeschränktes FizzBuzz-Problem in Java zu lösen
Wie man einen Cache erstellt, ohne zu viel nachzudenken
Erstellen Sie ein Reflexionsprogramm ①
Wie erstelle ich einen MOD für Slay the Spire?
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Versuchen Sie, eine Benachrichtigung zu senden.
[Einführung in die Android App-Entwicklung] Machen wir einen Zähler
Hinweise zur Überprüfung bei der Verwendung von Lombok
[JavaFX] Versuchen Sie, ein Software-MIDI-Keyboard zu erstellen. Teil 2 Schieben Sie Ihren Finger, um die Skalierung zu ändern
So stellen Sie eine einfache Java-Servlet-App auf Heroku bereit
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich wollte nur eine reaktive Eigenschaft in Java erstellen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Erstellen Sie mit SpringBoot + JPA + Thymeleaf ein einfaches CRUD ~ ~ Hallo Welt ~
Ruby mit AtCoder lernen 13 So erstellen Sie ein zweidimensionales Array