按照書中的代碼敲了一遍,寫到了第二階段,在嘗試運行的時候發現會一直正在加載,並且出現“加載失敗”的提示,排除掉genymotion模擬器聯網問題以後,用了大半天才找到解決方案,但仍不是完美方案,稍後會提到。
在使用Debug查找錯誤時,發現在跑到
HttpUtil.sendOkHttpRequest(address, new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
...
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) {
...
}
});
這段代碼時,直接就跳轉到結尾了,百度也只發現一個跟我一樣的情況,但那個還沒解決。
最後在看okhttp同步異步請求的時候,發現少寫了一些東西
新建res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
之後在AndroidManifest.xml的application中添加android:networkSecurityConfig="@xml/network_security_config"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.coolweather">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:networkSecurityConfig="@xml/network_security_config"
...
...
</application>
</manifest>
再次運行就不會出現加載失敗的提示,不過仍舊會顯示一直加載,將項目關閉重新運行打開就可以了。之後再點擊城市的話,也會顯示一直加載,依舊是項目重新運行後可以點開,但再次點擊之前點過的不會顯示一直加載,只有沒點過的會顯示,目前不知道如何解決。