gpt4 book ai didi

android-networking - 嵌套更改 target_tempreture_f : How to use java http PUT to set target temperature of the Nest Thermostat in android code?

转载 作者:行者123 更新时间:2023-12-01 23:54:02 26 4
gpt4 key购买 nike

Nest change target_temperature_f : 如何使用 java http PUT 通过 android 代码设置 Nest Thermostat 的目标温度?

最佳答案

您可以使用 HttpClient 或 HttpURLConnection 在 Android 的其余 API 上调用 PUT。这是一个使用 HttpURLConnection 的示例。

注意:建议您缓存每个用户/访问 token 的重定向 URL,并将其重新用于该用户的所有后续调用。

  1. 这里假设开始的基数是https://developer-api.nest.com/
  2. 如果 urlconnection 的返回代码是 307(重定向),则缓存该位置并使用它来发出放置请求。 (注意这里的缓存表示某种全局缓存/concurrentMap)

    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;

关于android-networking - 嵌套更改 target_tempreture_f : How to use java http PUT to set target temperature of the Nest Thermostat in android code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25085956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com