Retrofit 2. Отправка результата и получение таблицы рекордов

  1. import java.io.IOException;
  2. import java.util.List;
  3. import java.util.Random;
  4. import retrofit2.Call;
  5. import retrofit2.Response;
  6. import retrofit2.Retrofit;
  7. import retrofit2.converter.gson.GsonConverterFactory;
  8. import retrofit2.http.Field;
  9. import retrofit2.http.FormUrlEncoded;
  10. import retrofit2.http.GET;
  11. import retrofit2.http.POST;
  12.  
  13. public final class HiScoreRetrofitExample {
  14.  
  15.     private static final String API_URL = "http://localhost:8080";
  16.  
  17.     public static void main(String[] args) throws IOException {
  18.         Random random = new Random();
  19.         String[] names = {"Паша", "Света", "Олег", "Ярик", "Виола", "Миша", "Оля", "Петя"};
  20.  
  21.         Retrofit retrofit = new Retrofit.Builder()
  22.                 .baseUrl(API_URL)
  23.                 .addConverterFactory(GsonConverterFactory.create())
  24.                 .build();
  25.         HiScoreApi api = retrofit.create(HiScoreApi.class);
  26.  
  27.         // Добавляем три результата
  28.         for (int i = 1; i <= 3; i++) {
  29.             String name = names[random.nextInt(names.length)];
  30.             int score = random.nextInt(900) + 100;
  31.             Call<Void> setCall = api.set(name, score);
  32.             Response<Void> response = setCall.execute();
  33.             if (response.isSuccessful() && response.code() == 200) {
  34.                 System.out.println("Успешно добавлено");
  35.             } else {
  36.                 // Произошла ошибка
  37.                 System.out.println(response.errorBody());
  38.             }
  39.         }
  40.  
  41.         // Выводим таблицу рекордов
  42.         Call<List<Score>> getCall = api.get();
  43.         Response<List<Score>> response = getCall.execute();
  44.         response.body().forEach(System.out::println);
  45.     }
  46.  
  47.     public interface HiScoreApi {
  48.         @GET("/hiscore.php?action=get")
  49.         Call<List<Score>> get();
  50.  
  51.         @FormUrlEncoded
  52.         @POST("/hiscore.php?action=set")
  53.         Call<Void> set(@Field("name") String name, @Field("score") int score);
  54.     }
  55.  
  56.     public static class Score {
  57.         private final String name;
  58.         private final int score;
  59.         private final String date;
  60.  
  61.         public Score(String name, int score, String date) {
  62.             this.name = name;
  63.             this.score = score;
  64.             this.date = date;
  65.         }
  66.  
  67.         @Override
  68.         public String toString() {
  69.             return String.format("%12s %8d %20s", name, score, date);
  70.         }
  71.     }
  72. }
  1. dependencies {
  2.     compile 'com.squareup.retrofit2:retrofit:2.2.0'
  3.     compile 'com.squareup.retrofit2:converter-gson:2.2.0'
  4. }
Пример обращения к серверу, для обработки игровых результатов. Используется библиотека Retrofit2.
Отправляет три результата, посылая POST-запрос и проверяя успешность добавления.
Затем выводит таблицу рекордов, обращаясь к API для получения данных в формате json.
В этом примере парсинг json происходит автоматически, благодаря маппингу Gson, который ассоциирует название поля в классе Score с соответствующим ему полем в объекте json.

Реклама

Мы в соцсетях

tw tg yt gt