Ich versuche, eine Login-Aktion auszuführen 2.0 mit Retrofit mit Dagger 2Set dynamische URL Base Retrofit 2.0 and Dagger 2
Hier ist, wie ich
@Provides
@Singleton
Retrofit provideRetrofit(Gson gson, OkHttpClient client) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson)
.client(client)
.baseUrl(application.getUrl())
.build();
return retrofit;
}
Retrofit Abhängigkeit Hier aufgebaut ist die API-Schnittstelle .
interface LoginAPI {
@GET(relative_path)
Call<Boolean> logMe();
}
Ich habe drei verschiedene Basis-URLs, in denen sich Benutzer anmelden können. Daher kann ich beim Einrichten der Retrofit-Abhängigkeit keine statische URL festlegen. Ich habe eine setUrl() - und getUrl() -Methode für die Application-Klasse erstellt. Nach der Benutzeranmeldung setze ich die URL auf Application, bevor ich den API-Aufruf aufruft.
ich faul Injektion für die Nachrüstung wie diese
Lazy<Retrofit> retrofit
auf diese Weise verwenden, spritzt Dagger Abhängigkeit nur, wenn ich
retrofit.get()
Dieser Teil gut funktioniert aufrufen können. Ich habe die URL zur Nachrüstung eingerichtet. Das Problem tritt jedoch auf, wenn der Benutzer eine falsche Basis-URL eingibt (z. B. mywifi.domain.com), versteht, dass es falsch ist, und ändert es (z. B. mydata.domain.com). Da Dagger bereits die Abhängigkeit für Retrofit geschaffen hat, wird es nicht mehr tun. Also muss ich die App wieder öffnen und die richtige URL eingeben.
Ich las verschiedene Beiträge zum Einrichten von dynamischen URLs auf Retrofit mit Dolch. Nichts hat in meinem Fall gut funktioniert. Vermisse ich etwas?
Danke für die Antwort
Jetzt können Sie Basis-URL ändern! Ich hatte eine graue Vorstellung von der zweiten Option, die Sie erwähnt haben. Ich denke, die zweite Option ist viel besser, da sie nicht jede Anfrage abfangen muss, die von der App gesendet wird. Welche Option ist Ihrer Meinung nach empfehlenswert? – Renjith
Die offizielle Empfehlung ist die erste. Eine mögliche Problemumgehung ist die zweite. Der dritte ist ein hässlicher Hack, aber ich liebe Reflexion, hah. Ehrlich gesagt, würde ich mit "RealmHolder" von einem Anbieter mit beschränkter Reichweite, was ich gemacht habe, wahrscheinlich "2" machen. – EpicPandaForce
Aber wenn Sie diese zwei Anforderungen gleichzeitig parallel ausführen? Wird es einen Fehler geben, weil zwei Anfragen im ersten Beispiel dieselbe baseUrl haben? –