无法解析符号“response”

h9vpoimq  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(757)

赏金两天后到期。回答此问题可获得+50声望奖励。中国希望引起更多的注意**这个问题。

我是新的改装,我有一个活动托管3个气象应用程序片段。我的第一个片段是使用OpenWeatherMapOne调用api显示当前天气数据的地方https://openweathermap.org/api/one-call-api. 我注意到不能在fragment类上进行改装请求调用,因此我尝试使用我的activity类,除了以下几行之外,其他所有内容都正常工作:

call.enqueue(new Callback<WeatherResponse>() {
        @Override
        public void onResponse(@NonNull Call < WeatherResponse > call, @NonNull Response < WeatherResponse > response) {
            if (response.code() == 200) {
                WeatherResponse weatherResponse = response.body();
                assert weatherResponse != null;

            time_zone.setText(response.body().getTimezone());
            time_field.setText(response.body().getCurrent.getDt());
            current_temp.setText(response.body().getCurrent().getTemp()+" ℃");
            current_output.setText(response.body().getCurrent().getWeather().getDescription);
            rise_time.setText(response.body().getCurrent().getSunrise()+" AM");
            set_time.setText(response.body().getCurrent().getSunset()+" PM");
            temp_out.setText(response.body().getCurrent().getTemp()+" ℃");
            Press_out.setText(response.body().getCurrent().getPressure()+" hpa");
            Humid_out.setText(response.body().getCurrent().getHumidity()+" %");
            Ws_out.setText(response.body().getCurrent).getWind_speed()+" Km/h");
            Visi_out.setText(response.body().getCurrent().getVisibility()+" m");
            UV_out.setText(response.body().getCurrent().getUvi());

显示错误 Cannot resolve Symbol "response" . 请问能做些什么来修理它?我的完整代码:homeactivity.java

public class HomeActivity extends AppCompatActivity {
    public static String BaseUrl = "http://api.openweathermap.org/";
    public static String AppId = "";
    public static String lat = "9.0574";
    public static String lon = "7.4898";
    // User Timezone name, current time, current temperature, current condition, sunrise, sunset, temperature, pressure, humidity, wind_speed, visibility, UV Index
    TextView time_zone, time_field, current_temp, current_output, rise_time, set_time, temp_out, Press_out, Humid_out, Ws_out, Visi_out, UV_out;
    ConstraintLayout constraintLayout;
    public static int count=0;
    int[] drawable =new int[]{R.drawable.dubai,R.drawable.central_bank_of_nigeria,R.drawable.eiffel_tower,R.drawable.hong_kong,R.drawable.statue_of_liberty};
    Timer _t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        time_zone = findViewById(R.id.textView9);
        time_field = findViewById(R.id.textView4);
        current_temp = findViewById(R.id.textView10);
        current_output = findViewById(R.id.textView11);
        rise_time = findViewById(R.id.textView25);
        set_time = findViewById(R.id.textView26);
        temp_out = findViewById(R.id.textView28);
        Press_out = findViewById(R.id.textView29);
        Humid_out = findViewById(R.id.textView30);
        Ws_out = findViewById(R.id.textView33);
        Visi_out = findViewById(R.id.textView34);
        UV_out = findViewById(R.id.textView35);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView);
        NavController navController = Navigation.findNavController(this, R.id.fragment);
        NavigationUI.setupWithNavController(bottomNavigationView, navController);

        constraintLayout = findViewById(R.id.layout);
        constraintLayout.setBackgroundResource(R.drawable.dubai);
        _t = new Timer();
        _t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() { // run on ui thread
                    @Override
                    public void run() {
                        if (count < drawable.length) {

                            constraintLayout.setBackgroundResource(drawable[count]);
                            count = (count + 1) % drawable.length;
                        }
                    }
                });
            }
        }, 5000, 5000);
    }
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BaseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    WeatherService service = retrofit.create(WeatherService.class);
    Call<WeatherResponse> call = service.getCurrentWeatherData(lat, lon, AppId);
        call.enqueue(new Callback<WeatherResponse>() {
        @Override
        public void onResponse(@NonNull Call < WeatherResponse > call, @NonNull Response < WeatherResponse > response) {
            if (response.code() == 200) {
                WeatherResponse weatherResponse = response.body();
                assert weatherResponse != null;

                time_zone.setText(response.body().getTimezone());
                time_field.setText(response.body().getCurrent.getDt());
                current_temp.setText(response.body().getCurrent().getTemp()+" ℃");
                current_output.setText(response.body().getCurrent().getWeather().getDescription);
                rise_time.setText(response.body().getCurrent().getSunrise()+" AM");
                set_time.setText(response.body().getCurrent().getSunset()+" PM");
                temp_out.setText(response.body().getCurrent().getTemp()+" ℃");
                Press_out.setText(response.body().getCurrent().getPressure()+" hpa");
                Humid_out.setText(response.body().getCurrent().getHumidity()+" %");
                Ws_out.setText(response.body().getCurrent).getWind_speed()+" Km/h");
                Visi_out.setText(response.body().getCurrent().getVisibility()+" m");
                UV_out.setText(response.body().getCurrent().getUvi());

            }
        }
    }
}

天气服务.java

public interface WeatherService {
    @GET("data/2.5/weather?")
    Call<WeatherResponse> getCurrentWeatherData(@Query("lat") String lat, @Query("lon") String lon, @Query("APPID") String app_id);
}

json响应:

{
   "lat":9.08,
   "lon":7.4,
   "timezone":"Africa/Lagos",
   "timezone_offset":3600,
   "current":{
      "dt":1609157237,
      "sunrise":1609134244,
      "sunset":1609175993,
      "temp":305.15,
      "feels_like":304.63,
      "pressure":1012,
      "humidity":29,
      "dew_point":284.9,
      "uvi":8.32,
      "clouds":82,
      "visibility":5000,
      "wind_speed":1.5,
      "wind_deg":200,
      "weather":[
         {
            "id":721,
            "main":"Haze",
            "description":"haze",
            "icon":"50d"
         }
      ]
   }

我使用http://www.jsonschema2pojo.org/
当前.java:

public class Current {
    @SerializedName("dt")
    @Expose
    private Integer dt;
    @SerializedName("sunrise")
    @Expose
    private Integer sunrise;
    @SerializedName("sunset")
    @Expose
    private Integer sunset;
    @SerializedName("temp")
    @Expose
    private Double temp;
    @SerializedName("feels_like")
    @Expose
    private Double feelsLike;
    @SerializedName("pressure")
    @Expose
    private Integer pressure;
    @SerializedName("humidity")
    @Expose
    private Integer humidity;
    @SerializedName("dew_point")
    @Expose
    private Double dewPoint;
    @SerializedName("uvi")
    @Expose
    private Double uvi;
    @SerializedName("clouds")
    @Expose
    private Integer clouds;
    @SerializedName("visibility")
    @Expose
    private Integer visibility;
    @SerializedName("wind_speed")
    @Expose
    private Double windSpeed;
    @SerializedName("wind_deg")
    @Expose
    private Integer windDeg;
    @SerializedName("weather")
    @Expose
    private List<Weather> weather = null;

    public Integer getDt() {
        return dt;
    }

    public void setDt(Integer dt) {
        this.dt = dt;
    }

    public Integer getSunrise() {
        return sunrise;
    }

    public void setSunrise(Integer sunrise) {
        this.sunrise = sunrise;
    }

    public Integer getSunset() {
        return sunset;
    }

    public void setSunset(Integer sunset) {
        this.sunset = sunset;
    }

    public Double getTemp() {
        return temp;
    }

    public void setTemp(Double temp) {
        this.temp = temp;
    }

    public Double getFeelsLike() {
        return feelsLike;
    }

    public void setFeelsLike(Double feelsLike) {
        this.feelsLike = feelsLike;
    }

    public Integer getPressure() {
        return pressure;
    }

    public void setPressure(Integer pressure) {
        this.pressure = pressure;
    }

    public Integer getHumidity() {
        return humidity;
    }

    public void setHumidity(Integer humidity) {
        this.humidity = humidity;
    }

    public Double getDewPoint() {
        return dewPoint;
    }

    public void setDewPoint(Double dewPoint) {
        this.dewPoint = dewPoint;
    }

    public Double getUvi() {
        return uvi;
    }

    public void setUvi(Double uvi) {
        this.uvi = uvi;
    }

    public Integer getClouds() {
        return clouds;
    }

    public void setClouds(Integer clouds) {
        this.clouds = clouds;
    }

    public Integer getVisibility() {
        return visibility;
    }

    public void setVisibility(Integer visibility) {
        this.visibility = visibility;
    }

    public Double getWindSpeed() {
        return windSpeed;
    }

    public void setWindSpeed(Double windSpeed) {
        this.windSpeed = windSpeed;
    }

    public Integer getWindDeg() {
        return windDeg;
    }

    public void setWindDeg(Integer windDeg) {
        this.windDeg = windDeg;
    }

    public List<Weather> getWeather() {
        return weather;
    }

    public void setWeather(List<Weather> weather) {
        this.weather = weather;
    }
}

天气.java:

public class Weather {
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("main")
@Expose
private String main;
@SerializedName("description")
@Expose
private String description;
@SerializedName("icon")
    @Expose
    private String icon;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getMain() {
        return main;
    }

    public void setMain(String main) {
        this.main = main;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }
}

weatherresponse.java版本:

public class WeatherResponse {
@SerializedName("lat")
@Expose
private Double lat;
@SerializedName("lon")
@Expose
private Double lon;
@SerializedName("timezone")
@Expose
private String timezone;
@SerializedName("timezone_offset")
@Expose
private Integer timezoneOffset;
@SerializedName("current")
    @Expose
    private Current current;

    public Double getLat() {
        return lat;
    }

    public void setLat(Double lat) {
        this.lat = lat;
    }

    public Double getLon() {
        return lon;
    }

    public void setLon(Double lon) {
        this.lon = lon;
    }

    public String getTimezone() {
        return timezone;
    }

    public void setTimezone(String timezone) {
        this.timezone = timezone;
    }

    public Integer getTimezoneOffset() {
        return timezoneOffset;
    }

    public void setTimezoneOffset(Integer timezoneOffset) {
        this.timezoneOffset = timezoneOffset;
    }

    public Current getCurrent() {
        return current;
    }

    public void setCurrent(Current current) {
        this.current = current;
    }

}

我还想让我的片段类利用活动数据,请问怎么做?

8ulbf1ek

8ulbf1ek1#

可能有点像这样:

@Override
public void onResponse(@NonNull Call<WeatherResponse> call, @NonNull Response <WeatherResponse> response) {
    if (response.code() == 200) {
        WeatherResponse weatherResponse = response.body();
        time_zone.setText(weatherResponse.getTimezone());
        time_field.setText(weatherResponse.getCurrent.getDt());
        current_temp.setText(weatherResponse.getCurrent().getTemp()+" ℃");
        rise_time.setText(weatherResponse.getCurrent().getSunrise()+" AM");
        set_time.setText(weatherResponse.getCurrent().getSunset()+" PM");
        temp_out.setText(weatherResponse.getCurrent().getTemp()+" ℃");
        Press_out.setText(weatherResponse.getCurrent().getPressure()+" hpa");
        Humid_out.setText(weatherResponse.getCurrent().getHumidity()+" %");
        Ws_out.setText(weatherResponse.getCurrent).getWind_speed()+" Km/h");
        Visi_out.setText(weatherResponse.getCurrent().getVisibility()+" m");
        UV_out.setText(weatherResponse.getCurrent().getUvi()); 
    }
}

一定要上课 WeatherResponse 以及 Current 正确注解。
那个 ? 在url中是没有用的。

9rnv2umw

9rnv2umw2#

确保您的 enqueue() 看起来像这样

call.enqueue(new Callback<WeatherResponse>() {
            @Override
            public void onResponse(@NotNull Call<WeatherResponse> call, @NotNull Response<WeatherResponse> response) {
                if (response.body() != null) {
                     //...
                }
            }

            @Override
            public void onFailure(@NotNull Call<WeatherResponse> call, @NotNull Throwable t) {
                t.printStackTrace();
            }
        });
2j4z5cfb

2j4z5cfb3#

您可以使用livedata类来观察活动中的数据变化,并使用接口从片段调用改装请求。

相关问题