移动GIS作业之调用百度api接口时请求中文参数url

      做兴趣点搜索的时候用到了百度apistore中兴趣点搜索的api,链接:点击打开链接

     

请求的keyWord,cityName都是中文的,我开始用javaproject写了一个测试用例,直接传的中文参数,发现成功返回了json数据,当把方法原封不动的搬到android程序中时,经过调试发现请求返回的是null。

但是把keyword换成英文的,又有数据产生了,所以推断应该是编码的问题。找了一下发现有个URLEncoder的类可以转码,然后把整个拼接后的字符串传进去转码然后请求发现还是返回null,于是就试了一下只把中文转码然后再拼接就成功了。

public class JsonUtil {

	public static String httpUrl = "http://apis.baidu.com/apistore/point/search";


	/**
	 * 中文转utf-8格式
	 * 
	 * @param zh
	 * @return
	 */
	public static String ZhToUtf(String zh) {
		if (zh == null) {
			return null;
		}
		String url = null;
		try {
			url = URLEncoder.encode(zh, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		return url;
	}

	/**
	 * 拼接字符串
	 * 
	 * @param keyword
	 * @param cityname
	 * @return
	 */
	public static String stringappend(String keyword, String cityname) {
		if (keyword == null && cityname == null) {
			return null;
		}
		String utfKeyword = ZhToUtf(keyword);
		String utfCity = ZhToUtf(cityname);
		StringBuffer buffer = new StringBuffer();
		buffer.append("keyWord=").append(utfKeyword).append("&cityName=")
				.append(utfCity).append("&number=20&page=1&output=json");
		return buffer.toString();
	}
	
	/**
	 * 请求地址并返回json格式的数据
	 * @param httpUrl
	 * @param keyword
	 * @param cityname
	 * @return
	 */
	public static String request(String httpUrl, String keyword , String cityname) {
		BufferedReader reader = null;
		String result = null;
		StringBuffer sbf = new StringBuffer();
		String httpArg = stringappend(keyword, cityname);
		httpUrl = httpUrl + "?" + httpArg;

		try {
			String url2 = URLDecoder.decode(httpUrl, "UTF-8");
			URL url = new URL(url2);
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			connection.setRequestMethod("GET");
			connection.setRequestProperty("apikey",
					"581795b4d72e25acf587278c74605565");
			connection.connect();
			InputStream is = connection.getInputStream();
			reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
			String strRead = null;
			while ((strRead = reader.readLine()) != null) {
				sbf.append(strRead);
				sbf.append("\r\n");
			}
			reader.close();
			result = sbf.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	public static void main(String[] args) {
		String jsonurl = request(httpUrl, "酒店" ,"上海");
		System.out.println(jsonurl);
	}

}
结果返回

{"status":"Success","total":9862,"count":10,"pointList":[{"name":"布丁酒店(上海外滩周家嘴路店)","cityName":"上海市","location":{"lng":121.49994971143,"lat":31.255823927571},"address":"上海市虹口区高阳路481号(靠近周家嘴路)","district":"虹口区","additionalInformation":{"name":"布丁酒店(上海外滩周家嘴路店)","telephone":"(021)55212511","address":"上海市虹口区高阳路481号(靠近周家嘴路)","tag":"外滩 连锁酒店"},"type":"宾馆"},{"name":"维也纳国际酒店(上海火车站龙门店)","cityName":"上海市","location":{"lng":121.45198019565,"lat":31.249613651412},"address":"上海市闸北区恒丰路777号","district":"闸北区","additionalInformation":{"name":"维也纳国际酒店(上海火车站龙门店)","telephone":"(021)51219699","address":"上海市闸北区恒丰路777号","tag":"火车站 连锁酒店"},"type":"宾馆"},{"name":"神舟商旅酒店徐汇店","cityName":"上海市","location":{"lng":121.44321033157,"lat":31.175903289294},"address":"上海市徐汇区龙华西路501号(近中山南二路)","district":"徐汇区","additionalInformation":{"name":"神舟商旅酒店徐汇店","telephone":"(021)64681177","address":"上海市徐汇区龙华西路501号(近中山南二路)","tag":"上海体育场;龙华 宾馆"},"type":"宾馆"},{"name":"船长酒店(福州路店)","cityName":"上海市","location":{"lng":121.48944928521,"lat":31.235306957204},"address":"上海市黄浦区福州路37号","district":"黄浦区","additionalInformation":{"name":"上海福州路外滩老船长青年旅舍","telephone":"(021)63235053","address":"上海市黄浦区福州路37号","tag":"外滩 宾馆"},"type":"宾馆"},{"name":"布丁酒店(上海世博南浦大桥店)","cityName":"上海市","location":{"lng":121.5130728467,"lat":31.203142774393},"address":"上海市浦东新区浦东南路2304号(浦东南路与内环高架路交汇处)","district":"浦东新区","additionalInformation":{"name":"布丁酒店(上海世博南浦大桥店)","telephone":"(021)58398802","address":"上海市浦东新区浦东南路2304号(浦东南路与内环高架路交汇处)","tag":"塘桥;南浦大桥 连锁酒店"},"type":"宾馆"},{"name":"汉庭酒店(浦建路店)","cityName":"上海市","location":{"lng":121.54123996349,"lat":31.207260220403},"address":"浦东新区浦建路1143号(近浦东金融贸易科技园区)","district":"浦东新区","additionalInformation":{"name":"汉庭酒店(浦建路店)","telephone":"(021)51350666","address":"浦东新区浦建路1143号(近浦东金融贸易科技园区)","tag":"世纪公园;花木 宾馆"},"type":"宾馆"},{"name":"大众国际会议中心","cityName":"上海市","location":{"lng":121.18936907294,"lat":31.082015047431},"address":"松江区赵昆路1515号(近沈砖公路)发送地址信息到手机","district":"松江区","additionalInformation":{"name":"大众国际会议中心","telephone":"(021)57795555","address":"松江区赵昆路1515号(近沈砖公路)发送地址信息到手机","tag":"宾馆"},"type":"宾馆"},{"name":"上海陕西商务酒店","cityName":"上海市","location":{"lng":121.46169045636,"lat":31.224374642855},"address":"上海市静安区延安中路658号(近石门一路)","district":"静安区","additionalInformation":{"name":"上海陕西商务酒店","telephone":"(021)52624866","address":"上海市静安区延安中路658号(近石门一路)","tag":"四星级"},"type":"宾馆"},{"name":"汉庭酒店(外滩店)","cityName":"上海市","location":{"lng":121.50509112988,"lat":31.220163397808},"address":"上海市黄浦区中山南路433号(靠近复兴东路)","district":"黄浦区","additionalInformation":{"name":"汉庭酒店(外滩店)","telephone":"(021)61906399","address":"上海市黄浦区中山南路433号(靠近复兴东路)","tag":"连锁酒店"},"type":"宾馆"},{"name":"锦江之星(徐家汇白玉兰酒店)","cityName":"上海市","location":{"lng":121.47772340238,"lat":31.203738702804},"address":"斜土路456号","district":"卢湾区","additionalInformation":{"name":"锦江之星(徐家汇白玉兰酒店)","telephone":"021-63029910","address":"斜土路456号","tag":"五里桥;打浦桥;斜土路 宾馆"},"type":"宾馆"}]}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值