2016-10-06 4 views
2

Ich versuche, diese MVVM für meine Android-App zu verwenden. Ich habe viele Apps gemacht, aber ich versuche auf einer anderen Ebene aufzusteigen und versuche MVVM zu verwenden. Aber ich muss verstehen, wo ich die Daten aus dem Internet laden soll. Ich benutze RxJava, aber ich bin mir nicht sicher, ob ich Daten nur in ViewModel laden soll. Wenn ja, wo setze ich die Daten ein? Ich verwende Databinding von Google, aber ich möchte keine Daten in XML über ViewModel setzen. Ich möchte es aus der Java-Datei setzen.MVVM - Wo Daten aus dem Internet laden

Es tut mir leid, wenn ich etwas falsch geschrieben habe, eine Antwort posten und ich werde versuchen, alle erforderlichen Informationen auszufüllen.

Antwort

1

"Auslösen eines DataLoad" ist Teil der Präsentationslogik. Daher sollte dies in ViewModel gehören.

Details über "Wie Daten geladen werden", z. B. Netzwerklogik, gehören nicht zur ViewModel-Ebene. Ich empfehle dringend, Retrofit zu verwenden, da Sie RxJava bereits verwenden.

Da rx.Observable und databinding.ObservableField sehr ähnlich sind, können Sie sie von einem Formular in ein anderes konvertieren. Ich habe eine library geschrieben, mit der Sie dies tun können. Eine Implementierung finden Sie unter FieldUtils.java.

entweder Wege, vorausgesetzt, Sie haben eine DataService Schnittstelle/Klasse:

public interface DataService { 
    Observable<String> loadSomeData(); 
} 

Sie Ihre Ansichtsmodell aufbauen können wie folgt:

public class ExampleViewModel { 
    ObservableField<String> title; 

    public ExampleViewModel(DataService dataService) { 
     this.title = FieldUtils.toField(dataService.loadSomeData()); 
    } 
} 

Dann können Sie diese Anzeige in Ihre Ansicht mit Datenbindung syntax

<TextView 
    android:text="@{viewModel.title}" /> 

Ich vor kurzem gebloggt über die Verwendung von RxJava wi MVVM. Ich zeigte eine App, die mit Retrofit eine Liste von Ereignissen aus Github lädt und in einer RecyclerView anzeigt. Dies wurde in MVVM implementiert.

Artikel Link: MVVM using RxJava + Data Binding example: Loading data using Retrofit

Ein komplizierteres Beispiel, das auch eine Ladeanzeige und Fehler zeigt: DataLoadingViewModel.java.

+0

Vielen Dank für Ihre Antwort Ich schätze es. Leider musste ich es auf eigene Faust lernen (ich brauchte nur ein paar Tage, um andere Projekte zu studieren). Zurück zur Antwort, ich benutze das Retrofit in meinem Projekt mit RxJava. Ich verstehe jetzt, dass ich Daten in das ViewModel laden muss und die Bindung durch es gesetzt wird. Aber ich bin mir zum Beispiel nicht sicher, ob es richtig ist, RecyclerView in der Ansicht (Aktivität) einzurichten. Auch ich würde gerne wissen, warum nicht @Bindable anstelle von ObservableField verwenden (auch wenn es zumindest für mich gleich ist), wenn es einen Unterschied gibt, lass es mich auch wissen. Vielen Dank noch mal :) – Bartando

0

Es gibt zwei ähnliche Architekturmuster - MVP und MVVM. Der Hauptunterschied besteht darin, dass in MVP parttern Presenter beschreibt, wie Daten angezeigt werden, aber im MVVM-Muster empfängt View das Modell und rendert sich selbst (nimmt Daten vom Modell). Klassisches MVVM-Beispiel ist view bindig. Aber der Punkt ist - nomatter, welches Muster Sie verwenden, Sie sollten alle Daten in Model erhalten - und all Ihre Geschäftslogik auch in Model einfügen.

+0

Also, wenn ich es richtig verstehe, sollte ich Daten im ViewModel laden, bearbeiten und speichern und dann über ViewModel auf View setzen. Also hat das View selbst fast keine Operationen mit Daten? Es tut mir leid, ich versuche nur das Muster richtig zu verstehen. – Bartando

Verwandte Themen