1.Http请求失败
修改AndroidManifest.xml,在application标签中加入下面一句。
android:usesCleartextTraffic="true"
我看到还有一种配置文件的方法,还没试过。
链接:《第一行代码》14章cool weather酷欧天气 网络请求相关问题_青山-CSDN博客
2.在点击某个市查询县数据时,一直跳屏显示"正在加载..."
在通过检查后,发现查询市和县数据的sql语句写错了。
cityList = LitePal.where("provinceId = ?", String.valueOf(selectedProvince.getProvinceCode())).find(City.class);
countyList = LitePal.where("cityId = ?", String.valueOf(selectedCity.getCityCode())).find(County.class);
将 getProvinceCode()和getCityCode()改为getId()即可。
cityList = LitePal.where("provinceId = ?", String.valueOf(selectedProvince.getId())).find(City.class);
countyList = LitePal.where("cityId = ?", String.valueOf(selectedCity.getId())).find(County.class);
3.下拉刷新控件 SwipeRefreshLayout
在书中引用的是support库的SwipeRefreshLayout,但是现在support库已经被androidx库代替,
所以需要在build.gradle中引入androidx库下的SwipeRefreshLayout控件依赖。也可以访问
Android开发者文档查看最新的依赖。
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
4.切换城市后下拉刷新bug
主要是定义的weatherId没有赋值。修改WeatherActivity.java。
public class WeatherActivity extends AppCompatActivity {
...
//将weatherId声明为成员变量
private String weatherId;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
}
...
public void requestWeather(final String weatherId) {
...
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
...
public void run() {
if (weather != null && "ok".equals(weather.status)) {
//切换城市后weatherId赋值
WeatherActivity.this.weatherId = weather.basic.weatherId;
SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();
edit.putString("weather", responseStr);
edit.apply();
showWeatherInfo(weather);
} else {
Toast.makeText(WeatherActivity.this, getString(R.string.get_weather_info_failed), Toast.LENGTH_SHORT).show();
}
swipeRefreshLayout.setRefreshing(false);
}
...
}
...
}