2017-06-24 1 views
1

Je fais une requête réseau dans une classe Repository de mon application Android. Je le fais à des fins d'apprentissage, donc j'essaie de comprendre, sans utiliser RXJava, comment pourrais-je mettre à jour l'interface utilisateur à partir de mon référentiel?Mise à jour de l'interface utilisateur sur une demande de mise en réseau Android à l'aide de MVP

Le sentier des appels va comme si MainActivity -> Présentateur -> Interactor -> Dépôt -> Réseau

Et voici mon code dans le référentiel

WeatherRepository { 
    WeatherNetwork network = new WeatherNetwork(); 

    public CurrentWeather getCurrentWeather(float lat, float lng) { 
     network.getDailyWeather(lat, lng, new Callback() { 
      @Override 
      public void onFailure(Request request, IOException e) { 

      } 

      @Override 
      public void onResponse(Response response) throws IOException { 
       try{ 
        String jsonData = response.body().string(); 
        if (response.isSuccessful()) { 
         CurrentWeather currentWeather = getCurrentWeatherData(jsonData); 

        } 
       } catch(JSONException e) { 
        Log.d("DWPresen" + " JSONEXCEPTION", e.getMessage()); 
       } catch(IOException e){ 
        Log.d("DWPresent" + " IOEXCEPTION", e.getMessage()); 
       } 

      } 
     }); 
    } 
} 
+0

J'ai donné un +1 mais vous devriez peut-être accepter l'une des réponses ou écrire la vôtre. – trocchietto

Répondre

1

Imho il y a deux façons classiques de faire une telle chose:

Une façon serait de passer un objet de rappel vers le référentiel et d'appeler l'action de rappel lorsque vous obtenez votre réponse.

La seconde (et de plus élégante) serait d'utiliser local broadcasts dans votre application. Ils peuvent être utilisés pour transférer des messages (comme si quelque chose se passait dans votre service et vous souhaitez en informer d'autres threads - comme le thread de l'interface utilisateur.)

Il y a beaucoup de tutoriels sur (local) broadcasts dans android. Les diffusions normales sont utilisées pour communiquer entre les applications (et entre le système et une application), tandis que les diffusions locales peuvent être utilisées pour envoyer des informations au sein de votre application.

+0

est allé la voie de rappel dans ce cas, mais bon de savoir les deux options! – Rafa

0

Il existe une bibliothèque appelée EventBus qui fonctionne très bien avec la structure MVP.

En bref, il transmet l'événement (un objet avec des données) d'une classe à l'autre. Dans votre cas, vous pouvez passer un événement avec l'objet CurrentWeather à l'intérieur de celui-ci, de Référentiel à Presenter, puis mettre à jour l'interface utilisateur.