今天是自两个月自学之后第一次写博客,走过的大神不要喷我,但一定要给我建议啊!!!
之前在网上找到了一个开放平台--Mob,之后发现发现它的API用起来挺简洁的,而且客服也很有礼貌,哈哈!话不多说了,接下来介绍MobAPI的天气服务。(MobAPI的官网:http://www.mob.com/#/)主要步骤如下:
1.先导入jar包
![三个jar包](https://img-blog.csdn.net/20160424212816167)
2.初始化
SDK`MobAPI.initSDK(MainActivity.this,APP_KEY_Mob)
第一个参数为context,第二个参数为申请的key
3.集成APICallback接口
`public class MainActivity extends AppCompatActivity implements APICallback`
4.获取工具类,每个工具类对应一个服务,例如Mobile:手机查询地址方面的服务,Wheather:查询天气的工具类。这里需先获取,之后使用工具类查询天气。
Weather api = (Weather) MobAPI.getAPI(Weather.NAME)
5.接下来就可以用该工具类实例化的对象进行查询各个地区的天气了(这也是我喜欢用这个SDK的原因,两个子--简单),第一个参数为要查询的天气,这里我把他写死了,方便查看效果;第二个参数为APICallback接口的实例,这里写this就好了啊
api.queryByCityName("香港", this);
6.当让Activity继承APICallback接口之后,会复写它的两个方法,一个是onSuccess,另一个是onError,具体意思也是它字面上的意思,就是查询成功后执行的方法,另一个是查询失败时的方法。
@Override
public void onError(API api, int i, Throwable throwable) {
Toast.makeText(this,"异常", Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(API api, int i, Map<String, Object> map) {
switch (i) {
case Weather.ACTION_QUERY: onWeatherDetailsGot(map);
}
}
这里的onSuccess里为什么要用switch语句呢?主要是因为(自己的猜想。。)MobAPI推荐的是一键式调用所有的API,所以这里的动作i可能会各不相同,但是都是相同的代码,继承接口使用工具类......所以用switch来区别各个操作吧。这里的onWheatherDetailGot(map)是对请求成功所获得的数据(map),进行相关的操作
7.我这里用这些天气数据做了一个动态改变RelativeLayout的背景,(方法比较简单粗俗,大神不要喷我),至于返回的map结构可以去mob官网看看
private void onWeatherDetailsGot(Map<String, Object> result) {
RelativeLayout layout= (RelativeLayout) findViewById(R.id.menu_top)
@SuppressWarnings("unchecked")
ArrayList<HashMap<String, Object>> results = (ArrayList<HashMap<String, Object>>) result.get("result")
HashMap<String, Object> weather = results.get(0)
String wheather_local=com.mob.tools.utils.R.toString(weather.get("weather"))
if (wheather_local.contains("雨")){
if (layout != null) {
layout.setBackgroundResource(R.drawable.xiayu)
}
}
else if (wheather_local.contains("阴")){
if (layout != null) {
layout.setBackgroundResource(R.drawable.yintian)
}
}
txt_wheather.setText(wheather_local)
}