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

  1. import java.io.IOException;
  2. import java.util.Random;
  3. import okhttp3.MultipartBody;
  4. import okhttp3.OkHttpClient;
  5. import okhttp3.Request;
  6. import okhttp3.RequestBody;
  7. import okhttp3.Response;
  8. import org.json.JSONArray;
  9. import org.json.JSONObject;
  10.  
  11. public final class HiScoreOkHttpExample {
  12.  
  13.     private static final String API_URL = "http://localhost:8080/hiscore.php";
  14.  
  15.     public static void main(String[] args) throws IOException {
  16.         Random random = new Random();
  17.         String[] names = {"Паша", "Света", "Олег", "Ярик", "Виола", "Миша", "Оля", "Петя"};
  18.         HiScoreOkHttpExample hiscore = new HiScoreOkHttpExample();
  19.  
  20.         // Добавляем три результата
  21.         for (int i = 1; i <= 3; i++) {
  22.             String name = names[random.nextInt(names.length)];
  23.             int score = random.nextInt(900) + 100;
  24.             hiscore.add(name, score);
  25.         }
  26.  
  27.         // Выводим таблицу рекордов
  28.         hiscore.show();
  29.     }
  30.  
  31.     private final OkHttpClient client = new OkHttpClient();
  32.  
  33.     public void add(String name, int score) throws IOException {
  34.         RequestBody body = new MultipartBody.Builder()
  35.                 .setType(MultipartBody.FORM)
  36.                 .addFormDataPart("action", "set")
  37.                 .addFormDataPart("name", name)
  38.                 .addFormDataPart("score", Integer.toString(score))
  39.                 .build();
  40.         Request request = new Request.Builder()
  41.                 .url(API_URL)
  42.                 .post(body)
  43.                 .build();
  44.  
  45.         Response response = client.newCall(request).execute();
  46.         if (response.code() == 200) {
  47.             // HTTP 200 OK
  48.             System.out.println("Успешно добавлено");
  49.             return;
  50.         }
  51.         // Произошла ошибка
  52.         String responseText = response.body().string();
  53.         JSONObject result = new JSONObject(responseText);
  54.         System.out.println("Ошибка");
  55.         System.out.println(result.getString("error"));
  56.     }
  57.  
  58.     public void show() throws IOException {
  59.         Request request = new Request.Builder()
  60.                 .url(API_URL + "?action=get")
  61.                 .build();
  62.         Response response = client.newCall(request).execute();
  63.         String responseText = response.body().string();
  64.  
  65.         // Выводим результат
  66.         JSONArray scores = new JSONArray(responseText);
  67.         int length = scores.length();
  68.         for (int i = 0; i < length; i++) {
  69.             JSONObject score = scores.getJSONObject(i);
  70.             System.out.format("%d. %12s %8d %20s%n", i + 1,
  71.                     score.getString("name"), score.getInt("score"),
  72.                     score.getString("date"));
  73.         }
  74.     }
  75. }
  1. dependencies {
  2.     compile 'org.json:json:20160810'
  3.     compile 'com.squareup.okhttp3:okhttp:3.6.0'
  4. }
Пример обращения к серверу, для обработки игровых результатов. Используется библиотека OkHttp.
Отправляет три результата, посылая POST-запрос и проверяя успешность добавления.
Затем выводит таблицу рекордов, обращаясь к API для получения данных в формате json.

Реклама

Мы в соцсетях

tw tg yt gt