由Volley的onResponse设置的访问变量

时间:2018-08-08 04:22:46

标签: android request android-volley

我有两个全局变量currentTempcurrentHum,它们在调用Volley的onResponse方法时设置。我的代码如下:

// Request a string response from the provided URL.
    private JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, WEATHER_URL, null, new Response.Listener<JSONObject>() {
        public void onResponse(JSONObject response) {
            try {
                JSONObject main = new JSONObject(response.getString("main"));
                currentTemp = main.getString("temp");
                currentHum = main.getString("humidity");
                Log.i("RES", "Temp: " + main.getString("temp") + " Hum: " + main.getString("humidity"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }}, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(appContext, "An error occurred while retrieving weather info", Toast.LENGTH_LONG).show();
            Log.e("ERR", "ERROR RET WEATHER DATA");
        }
    });


    // Call the OpenWeatherMap API and get data such as temperature and humidity
    private String getWeatherInfo(String key) {
        // Add the request to the RequestQueue to invoke the API
        queue.add(jsonObjectRequest);
        // Access variables set by Volley's onResponse here.
        switch (key) {
            case "temp":
                return String.valueOf(Float.parseFloat(currentTemp) - 273.15);
            case "hum":
                return currentHum;
            default:
                return " ";
        }
    }

我希望能够在调用它的onResponse方法中访问由getWeatherInfo方法设置的全局变量的值。然后将值传递给switch语句进行处理。如何在不获取currentTempcurrentHum的空值的情况下进行操作?

1 个答案:

答案 0 :(得分:0)

该工作旨在通过使用界面来完成。如果您不知道接口回调,请通过 this answer 进行。这将帮助您理解界面,并且还可以指导您处理截击响应。

也不建议您使用全局变量来设置任何响应,而是可以从凌空类传递整个JsonObject。并在您拨打电话的地方进行解析。您可以使用 Gson 来解析对 Model ArrayList 的响应。