Nest Memble Target_tempreture_f: Как использовать Java HTTP PUT для установки целевой температуры термостата гнезда в Android Code?

StackOverflow https://stackoverflow.com//questions/25085956

  •  02-01-2020
  •  | 
  •  

Вопрос

Nest Meance Target_temperature_f: Как использовать Java HTTP PUT для установки целевой температуры гнезда Thermostat по коду Android?

Это было полезно?

Решение

Вы можете использовать либо httpClient, либо httpurlconnection для вызова наведенного на API для отдыха с Android.Вот пример с использованием httpurlconnection.

Примечание. Консультируется, что вы кэшируете URL-адрес перенаправления на токен пользователя / доступа и повторно использовать его для всех последующих вызовов для этого пользователя.

  1. Предположим здесь, что база начинается с IS https://developer-api.nest.com/
  2. Если код возврата из URLConnection - это 307 (перенаправление), затем кэшируйте местоположение и используйте это для выдачи запроса на поставку.(Примечание. Кэш здесь указывает на глобальный кэш / ConsurrentMap какой-то)

    public static int setThermostatTemperatureF(int temperatureF,
        String base, String thermostatId, String accessToken) throws IOException {
    try {
        String tChangeUrl = String.format("%s/devices/thermostats/%s/target_temperature_f?auth=%s",
                base, thermostatId, accessToken);
        URL url = new URL(tChangeUrl);
        HttpsURLConnection ucon = (HttpsURLConnection) url.openConnection();
        ucon.setRequestProperty("Content-Type", "application/json");
        ucon.setRequestMethod("PUT");
        ucon.setDoOutput(true);
        // Write the PUT body
        OutputStreamWriter writer = new OutputStreamWriter(ucon.getOutputStream());
        writer.append(Integer.toString(temperatureF));
        writer.flush();
    
        int responseCode = ucon.getResponseCode();
        if (responseCode == 307) { // temporary redirect
            // cache the URL for future uses for this User
            String redirectURL = ucon.getHeaderField("Location");
            URI u = new URI(redirectURL);
            StringBuilder baseUrl = new StringBuilder(u.getScheme())
                    .append("://").append(u.getHost());
            if (u.getPort() != 0) {
                baseUrl.append(":").append(u.getPort());
            }
            baseUrl.append("/");
            cache.put(accessToken, baseUrl.toString());
            return setThermostatTemperatureF(temperatureF, baseUrl.toString(), thermostatId, accessToken);
        } else {
            return responseCode;
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    return -1;
    
    .

    }

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top