【气象助手项目开发】-第四篇:聚合平台WebService技术之SDK


在第二篇聚合平台WebService技术中对如何成为聚合平台开发者,如何申请全国天气预报数据服务以及如何通过Java语言编写请求数据的常规方法。本篇研究如何通过集成聚合数据SDK来更加方便省事的获取各种数据,由于我们要开发的是气象助手项目,所以我们还是重点研究如何通过集成聚合数据SDK来获取全国天气预报相关数据,对于其它的数据大家可举一反三。

一、聚合数据SDK说明

       JuheApisSDK是一个工具,内部集成了聚合数据平台除电商类所有接口。包括生活常用,位置信息服务,金融基金,影视娱乐,全网数据,其他数据留个大类,再此大类之下又分小类,每个小类下又包含数目不等的实现具体功能的接口。 

二、聚合数据SDK的集成

步骤:
(1)打开聚合数据SDK官网(https://www.juhe.cn/juhesdk)

(2)下载SDK
                 
了方便大家下载,我下面也提供网盘下载,最主要是的juhe_sdk_v_x_x.jar文件和armeabi文件夹。
                
(3)集成SDK到项目      

            a) 将juhe_sdk_v_X_X.jar以及armeabi文件夹(内包含libJuheSDK_v_X_X.so)添加到工程中libs文件夹下,Android 工程会自动将libs文件夹下的jar导入 .如下图:


b)添加相关权限

在AndroidManifest.xml中,加入所需权限:

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

<uses-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>

c)添加密钥OpenId

          在聚合网站的个人中心-账户信息中可以先找到OpenId,如下图:

 

在AndroidManifest.xml中,在application标签中通过添加<meta-data>配置OpenId,如下图:



      <meta-data
            android:name="com.thinkland.juheapi.openid"
            android:value="你自己的OpenId值" />


        d)初始化SDK

         SDK中有些数据需要在使用之前初始化才可使用,一般我们会创建一个MyApplication,在MyApplication中 做一些初始化工作。

package com.kedi.juhesdk.app;


import com.thinkland.sdk.android.JuheSDKInitializer;


import android.app.Application;


public class MyApplication extends Application {
<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public void onCreate() {
<span style="white-space:pre">		</span>super.onCreate();
<span style="white-space:pre">		</span>// 初始化聚合SDK
<span style="white-space:pre">		</span>JuheSDKInitializer.initialize(getApplicationContext());
<span style="white-space:pre">	</span>}
}
创建了自己的MyApplication,记得要在AndroidManifest.xml中的application标签中引用。如下图:




(4)使用SDK案例核心代码
 

a)常量池类

package com.kedi.juhesdk.constant;

/**
 * 常量池类:专门用来存放项目中要用来到常量
 * 
 * @author 张科勇
 *
 */
public class AppConstant {
	// 根据城市名获取天气数据的网络地址
	public static final String WEATHER_REPORT_BY_CITY_URL = "http://v.juhe.cn/weather/index";
	// 获取天气种类及标识列表网络地址
	public static final String WEATHER_ICON_AND_ID_URL = "http://v.juhe.cn/weather/uni";
	// 获取支持城市列表网络地址
	public static final String CITY_LIST_URL = "http://v.juhe.cn/weather/citys";
	// 全国天气预报数据服务编号
	public static final int WEATHER_SERVICE_DID = 39;
	// 表示数据获取成功
	public static final String RESULT_OK = "200";

}

b)测试SDK接口使用的场景类(注释非常详细,我就不再重复了)

package com.kedi.juhesdk;

import org.json.JSONException;
import org.json.JSONObject;

import com.kedi.juhesdk.constant.AppConstant;
import com.thinkland.sdk.android.DataCallBack;
import com.thinkland.sdk.android.JuheData;
import com.thinkland.sdk.android.Parameters;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 测试使用SDK获取某城市对应的天气数据
		// 1.获取某城市的天气预报数据
		getWeatherByCity("北京");
		// 2.获取天气图标与id数据
		getWeatherIconAndId();
		// 3.获取支持城市列表数据
		getCityList();
	}

	/**
	 * 获取某城市的天气预报数据
	 * 
	 * @param cityName
	 *            城市名
	 */
	private void getWeatherByCity(String cityName) {
		Parameters params = new Parameters();
		params.add("cityname", cityName);
		params.add("dtype", "json");
		params.add("format", 2);
		/**
		 * context:上下文, did:数据服务编号(39代表全国天气预报数据服务), uri:接口地址,
		 * methoed请求方法(get或post), params:请求参数, callBack:数据回调接口
		 */
		JuheData.executeWithAPI(this, AppConstant.WEATHER_SERVICE_DID, AppConstant.WEATHER_REPORT_BY_CITY_URL,
				JuheData.GET, params, new DataCallBack() {
					/**
					 * 服务器响应数据成功
					 */
					@Override
					public void onSuccess(int code, String result) {
						if (!"".equals(result)) {
							try {
								JSONObject jsonObj = new JSONObject(result);
								String resultcode = jsonObj.getString("resultcode");
								if (!"".equals(resultcode) && AppConstant.RESULT_OK.equals(resultcode)) {

									String weatherInfo = jsonObj.getString("result");
									Log.i("weatherInfo:", weatherInfo);
								}
							} catch (JSONException e) {
								e.printStackTrace();
							}
						}
					}

					/**
					 * 服务端响应数据完成(无论成功与失败都调用这个方法)
					 */
					@Override
					public void onFinish() {

					}

					/**
					 * 服务端响应数据失败
					 */
					@Override
					public void onFailure(int code, String result, Throwable throwable) {

					}
				});
	}

	/**
	 * 获取天气图标与id
	 */
	private void getWeatherIconAndId() {
		JuheData.executeWithAPI(this, AppConstant.WEATHER_SERVICE_DID, AppConstant.WEATHER_ICON_AND_ID_URL,
				JuheData.GET, null, new DataCallBack() {

					@Override
					public void onSuccess(int code, String result) {
						if (!"".equals(result)) {
							try {
								JSONObject jsonObj = new JSONObject(result);
								String resultcode = jsonObj.getString("resultcode");
								if (!"".equals(resultcode) && AppConstant.RESULT_OK.equals(resultcode)) {

									String weatherIconInfo = jsonObj.getString("result");
									Log.i("weatherIconInfo:", weatherIconInfo);
								}
							} catch (JSONException e) {
								e.printStackTrace();
							}
						}
					}

					@Override
					public void onFinish() {

					}

					@Override
					public void onFailure(int code, String result, Throwable throwable) {

					}
				});
	}

	/**
	 * 获取支持城市列表数据
	 */
	private void getCityList() {
		JuheData.executeWithAPI(this, AppConstant.WEATHER_SERVICE_DID, AppConstant.CITY_LIST_URL, JuheData.GET, null,
				new DataCallBack() {

					@Override
					public void onSuccess(int code, String result) {
						if (!"".equals(result)) {
							try {
								JSONObject jsonObj = new JSONObject(result);
								String resultcode = jsonObj.getString("resultcode");
								if (!"".equals(resultcode) && AppConstant.RESULT_OK.equals(resultcode)) {

									String cityListInfo = jsonObj.getString("result");
									Log.i("cityListInfo:", cityListInfo);
								}
							} catch (JSONException e) {
								e.printStackTrace();
							}
						}
					}

					@Override
					public void onFinish() {

					}

					@Override
					public void onFailure(int code, String result, Throwable throwable) {

					}
				});
	}

}

案例源码下载:http://pan.baidu.com/s/1boetaXp


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值