android开发练习三-Retrofit

android开发练习二-Retrofit
首先新建一个网络接口
public interface OpenWeather {
@GET(“/data/2.5/weather?q={location},uk&appid=44db6a862fba0b067b1930da0d769e98”)
Call weather(
@Path(“location”) String location);
}

然后改写MainActivity的部分代码

OpenWeather openWeather = retrofit.create(OpenWeather.class);
        Call<JSONObject> call = openWeather.weather(location.getText().toString());
       // Call<List<Contributor>> call1 = call.clone();
// 5. 请求网络,异步
        call.enqueue(new Callback<JSONObject>() {
            @Override
            public void onResponse(Response<JSONObject> response, Retrofit retrofit) {

                WeatherBean weatherBean = JSONUtil.getWeatherBean(response.toString());
                country.setText(weatherBean.getCountry());
                humidity.setText(weatherBean.getHumidity() + "");
                pressure.setText(weatherBean.getPressure() + "");
                temperature.setText(weatherBean.getTemperature() + "");
                System.out.println("test2");
            }

运行之后报错
FATAL EXCEPTION: main
Process: com.example.administrator.myapplication, PID: 3246
java.lang.IncompatibleClassChangeError: Class ‘com.example.administrator.myapplication.MainActivity 1doesnotimplementinterfaceretrofit.Callbackincalltovoidretrofit.Callback.onResponse(retrofit.Response,retrofit.Retrofit)(declarationofretrofit.ExecutorCallAdapterFactory ExecutorCallback$1’ appears in /data/app/com.example.administrator.myapplication-1/base.apk)
检查代码之后发现
WeatherBean weatherBean = JSONUtil.getWeatherBean(response.body().toString());
少写了一个body()方法

重新运行仍然报错

FATAL EXCEPTION: main
Process: com.example.administrator.myapplication, PID: 3904
java.lang.IllegalStateException: Could not execute method for android:onClick
断点调试发现还没进断点就跳出来了,
把这段代码移到按钮1里面再试试,仍然报错,进断点调试发现是在组合网址的时候出错。继续修改代码。。
试了几次之后发现这样一条错误信息,

URL query string "q={value},uk&appid=44db6a862fba0b067b1930da0d769e98" must not have replace block. For dynamic query parameters use @Query.
将接口形式改为query
public interface OpenWeather {
    @GET("/data/2.5/weather")
    Call<JSONObject> weather(
            @Query("q") String q,@Query("appid") String appid);
}

但是仍然报错,看了半天也没发现什么问题,升级一下
retrofit版本,在build.gradle中将beta2改为beta4
compile ‘com.squareup.retrofit:retrofit:2.0.0-beta2’

这回没崩溃了,但是也没有获取到数据,进断点再看一下。
看了半天没发现什么错误,重启Android Studio试一下
IncompatibleClassChangeError –删除多余的引用包
org.json.JSONException: No value for sys 未获取到数据。。

研究了一下发现运行库重复导入,于是退回版本,把原来的工程清理一下

试了大半天还是不能成功,决定换一个天气API接口,这个API暂且留着有机会再研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值