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

  1. import java.io.IOException;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;
  5. import org.apache.http.HttpResponse;
  6. import org.apache.http.NameValuePair;
  7. import org.apache.http.client.HttpClient;
  8. import org.apache.http.client.entity.UrlEncodedFormEntity;
  9. import org.apache.http.client.methods.HttpGet;
  10. import org.apache.http.client.methods.HttpPost;
  11. import org.apache.http.impl.client.BasicResponseHandler;
  12. import org.apache.http.impl.client.HttpClientBuilder;
  13. import org.apache.http.message.BasicNameValuePair;
  14. import org.json.JSONArray;
  15. import org.json.JSONObject;
  16.  
  17. public final class HiScoreApacheExample {
  18.  
  19.     private static final String API_URL = "http://localhost:8080/hiscore.php";
  20.  
  21.     public static void main(String[] args) throws IOException {
  22.         Random random = new Random();
  23.         String[] names = {"Паша", "Оля", "Олег", "Ярик", "Виола", "Миша", "Семён", "Петя"};
  24.         HiScoreApacheExample hiscore = new HiScoreApacheExample();
  25.  
  26.         // Добавляем три результата
  27.         for (int i = 1; i <= 3; i++) {
  28.             String name = names[random.nextInt(names.length)];
  29.             int score = random.nextInt(900) + 100;
  30.             hiscore.add(name, score);
  31.         }
  32.  
  33.         // Выводим таблицу рекордов
  34.         hiscore.show();
  35.     }
  36.  
  37.     private final HttpClient client = HttpClientBuilder.create().build();
  38.  
  39.     public void add(String name, int score) throws IOException {
  40.         HttpPost post = new HttpPost(API_URL);
  41.         List<NameValuePair> data = new ArrayList<>();
  42.         data.add(new BasicNameValuePair("action", "set"));
  43.         data.add(new BasicNameValuePair("name", name));
  44.         data.add(new BasicNameValuePair("score", Integer.toString(score)));
  45.         post.setEntity(new UrlEncodedFormEntity(data, "UTF-8"));
  46.         HttpResponse response = client.execute(post);
  47.         // Проверяем результат по HTTP коду
  48.         if (response.getStatusLine().getStatusCode() == 200) {
  49.             // HTTP 200 OK
  50.             System.out.println("Успешно добавлено");
  51.             return;
  52.         }
  53.         // Произошла ошибка
  54.         String responseText = new BasicResponseHandler().handleResponse(response);
  55.         JSONObject result = new JSONObject(responseText);
  56.         System.out.println("Ошибка");
  57.         System.out.println(result.getString("error"));
  58.     }
  59.  
  60.     public void show() throws IOException {
  61.         HttpGet httpGet = new HttpGet(API_URL + "?action=get");
  62.         HttpResponse response = client.execute(httpGet);
  63.         String responseText = new BasicResponseHandler().handleResponse(response);
  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 'org.apache.httpcomponents:httpclient:4.5.3'
  4. }
Пример обращения к серверу, для обработки игровых результатов. Используется библиотека Apache HttpClient.
Отправляет три результата, посылая POST-запрос и проверяя успешность добавления.
Затем выводит таблицу рекордов, обращаясь к API для получения данных в формате json.

Реклама

Мы в соцсетях

tw tg yt gt