为了账号安全,请及时绑定邮箱和手机立即绑定

建议更新jar包

老师啊,能不能把url里面的访问网址也改成参数传入后更新个jar包呀?这个API的访问参数有变化了: 

http://img1.sycdn.imooc.com//600d7b82000105b703690054.jpg

正在回答

2 回答

购买的免费的api和视频上的一致就不会有这个问题,如果一定要变url的话就把jar包里用到的文件复制出来,再修改url.

2 回复 有任何疑惑可以回复我~
#1

朱智琳 提问者

嗯,就是这么操作的。
2021-01-26 回复 有任何疑惑可以回复我~
#2

小楼倚月听微风 回复 朱智琳 提问者

jar包里的文件是只读的,问一下怎么改呢
2021-02-15 回复 有任何疑惑可以回复我~
可以新创建一个temp_WeatherUtilsImpl.java文件,来重写WeatherUtilsImpl类,此处仅以24h查询为例:

package com.imooc.weather;

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.imooc.weather.impl.WeatherUtilsImpl;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class temp_WeatherUtilsImpl extends WeatherUtilsImpl {
    //重载或重写WeatherUtilsImpl.java
    private <T> T getValue(Object map, String path, Class<T> clazz) {
        try {
            OgnlContext context = new OgnlContext();
            context.setRoot(map);
            T value = (T) Ognl.getValue(path, context, context.getRoot());
            return value;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    public List<HourWeather> w24h(String appCode, String area) {
        List<HourWeather> resultList = new ArrayList<HourWeather>();
        try {
            //新建查询请求
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .get()
                    .url("https://ali-weather.showapi.com/hour24?area=" + area)
                    .header("Authorization", "APPCODE " + appCode)
                    .build();
            Call call = client.newCall(request);
            Response response = call.execute();
            Gson gson = new GsonBuilder()
                    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                    .create();
            //获取服务器返回数据
            String resBody = response.body().string();
            Map result = gson.fromJson(resBody, new TypeToken<Map>() {
            }.getType());
            //包装为对象集合
            List<Map<String, String>> hourList = this.getValue(result, "showapi_res_body.hourList", ArrayList.class);
            //如果没有找到对应地区天气数据,返回空的List列表
            if(hourList == null || hourList.size() == 0){
                return new ArrayList<HourWeather>();
            }
            for (Map<String, String> hour : hourList) {
                HourWeather hourWeather = new HourWeather();
                hourWeather.setYear(hour.get("time").substring(0, 4));
                hourWeather.setMonth(hour.get("time").substring(4, 6));
                hourWeather.setDay(hour.get("time").substring(6, 8));
                hourWeather.setHour(hour.get("time").substring(8, 10));
                hourWeather.setWindDirection(hour.get("wind_direction"));
                hourWeather.setWindPower(hour.get("wind_power"));
                hourWeather.setWeather(hour.get("weather"));
                hourWeather.setTemperature(hour.get("temperature"));
                resultList.add(hourWeather);
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return resultList;

    }

    public static void main(String[] args) throws IOException, OgnlException {
        List<DayWeather> list2 = new WeatherUtilsImpl().w3d("28a8e0cdea484fdd9cba138a72bc1778", "DASDSADSA");
        System.out.println(list2);
    }
}

这是Application.java:

package com.imooc.weather;

import com.imooc.weather.impl.WeatherUtilsImpl;

import java.util.List;
import java.util.Scanner;

public class Application {
    public static void main(String[] args) {
        System.out.println("查询最近天气预报");
        System.out.println("输入1: 查询未来24小时天气预报");
        System.out.println("输入2: 查询未来3天天气预报");
        System.out.println("输入3: 查询未来7天天气预报");
        System.out.print("请输入您的选择: ");
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        System.out.println("用户输入数字: " + i);

        if(i == 1){
            System.out.print("请输入城市名称查询未来24小时天气预报: ");
            String city = scanner.next();
            temp_WeatherUtilsImpl weatherUtils = new temp_WeatherUtilsImpl();
            List<HourWeather> weatherList1 = weatherUtils.w24h("5f94543d72c44591bf4897e0f3d622ea", city);
            System.out.println(weatherList1);
        }
    }
}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530628    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

建议更新jar包

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信