一下问题均为个人所遇到的问题(Android Studio 3.5版本)
第一个坑:关于作者写的和风天气api接口已经更新到S6了,获取的信息都是不正确的问题:
首先呢先说一下当前时间哈:2019年12月15号!
访问和风天气入口
紧接着我们查看天气API文档
很多网上教程都是基于x3或者v5的,如今感觉很无奈,更新换代着实太快了。
而作者写的接口是,作者自己架的一台服务器在服务,所以给的信息不正确其实很正常。因为只是用于学习。那我们就要问了,如何让自己的app应用中的数据正常呢?下面我会详解:
第一步:学习一下关于和风天气的API文档(ps:需要一些耐心看完这篇文章,如果是大佬。那就再看看?)
首先当然是看Android SDK咯:
仔细阅读这个api就好下面来具体演示一下:
首先通过第一行代码所教的,新建一个项目
MainActivity.java文件中写:
package com.coolweather.android;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.nfc.Tag;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.TextView;
import com.google.gson.Gson;
import interfaces.heweather.com.interfacesmodule.bean.Base;
import interfaces.heweather.com.interfacesmodule.bean.Code;
import interfaces.heweather.com.interfacesmodule.bean.Lang;
import interfaces.heweather.com.interfacesmodule.bean.Unit;
import interfaces.heweather.com.interfacesmodule.bean.basic.Basic;
import interfaces.heweather.com.interfacesmodule.bean.weather.now.Now;
import interfaces.heweather.com.interfacesmodule.bean.weather.now.NowBase;
import interfaces.heweather.com.interfacesmodule.view.HeConfig;
import interfaces.heweather.com.interfacesmodule.view.HeWeather;
public class MainActivity extends AppCompatActivity {
public String TAG = "MainActivity";
TextView template;
@Override
protected void onCreate(Bundle savedInstanceState) {
HeConfig.init("你当时注册是所用的名字", "你注册时所用到的密匙");
HeConfig.switchToFreeServerNode();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fun("温宿");//你所在的城市!
}
//解析方法
public void Fun(String Id){
HeWeather.getWeatherNow(MainActivity.this, Id, Lang.CHINESE_SIMPLIFIED , Unit.METRIC , new HeWeather.OnResultWeatherNowBeanListener() {
@Override
public void onError(Throwable e) {
Log.i(TAG, "Weather Now onError: ", e);
}
@Override
public void onSuccess(Now dataObject) {
Log.i(TAG, " Weather Now onSuccess: " + new Gson().toJson(dataObject));
//先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因
if ( Code.OK.getCode().equalsIgnoreCase(dataObject.getStatus()) ){
//此时返回数据
NowBase now = dataObject.getNow();
Basic base = dataObject.getBasic();
Log.i(TAG,"当前地区:"+base.getCnty()+"——"+base.getAdmin_area()+"——"+base.getParent_city()+"——"+base.getLocation());
Log.i(TAG, " 当前温度为:: " + now.getTmp());
} else {
//在此查看返回数据失败的原因
String status = dataObject.getStatus();
Code code = Code.toEnum(status);
Log.i(TAG, "failed code: " + code);
}
}
});
}
}
这里应该难不倒你们吧!通过编译,运行点到Logcat哪一个窗口我们可以清楚看到
这样一来,我们就可以安心做控件,和美观的角度去思考问题,而不用在考虑如何获取接口信息啦!
第二个坑:关于布局文件中fragment的问题(AS3.5中已经把这个类包到androidx.fragment里面了,如果不是最新版的AS,或者有第三方包的可以无事啦)
这个问题还是要看自己如何解决,当时我错误的原因很奇怪,说什么找不到Main什么的,然后换了一个包,他就自己好了。肯定是AS抛弃了android的包,现在支持androidx
第三个坑:可能是自己的原因,其实JSON解析在和风天气给的第三方包里面已经囊括了。
上面的代码块已经写的很清楚啦
我并没有新建自己的实体类,但是在官方给的包中已经包括了很多实体类:
按住Ctrl鼠标移动到MainActivity.java文件中的NowBase,还有NowBase等等。这方便了很多!。