好文档 - 专业文书写作范文服务资料分享网站

android天气预报源代码解析

天下 分享 时间: 加入收藏 我要投稿 点赞

通过google接口在Android中实现天气预报效果

Android可以通过google实现获取指定经纬度位置或者某一个城市的天气信息。如果是根据经纬度查询天气信息,需要对精度为进行转换,例如lat值为31.174165,需要过滤掉小数

点,变为31174165传到接口中,维度也一样处理,处理后传

给 http://www.google.com/ig/api?weather=,,,31174165,121433841 既可以获取数据。这里要注意一个问题,如果大家获取的经纬度序列很长,直接去掉小数点,有时候也无法获取天气信息,例如40.478224838152528,124.97828006744385,去掉小数点后,传到参数位置,无法获取值,需要大家将经纬度按下面方式转换一下,只取小数点后6位就可以了。int latI = (int) (lat * 1E6);

int lonI = (int) (lon * 1E6);

下面的例子演示了根据输入城市,获取该城市的天气预报,Weather.java的61行,是根据经纬度获取天气信息。 工程结构:

Weather.java类

package com.AndroidWeather;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.http.HttpEntity; import org.apache.http.HttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.InputSource;

import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle;

import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView;

public class Weather extends Activity { public EditText ETplace; public TextView TvPlace; public Button query; public TextView placeName; public ImageView imView;

/** Called when the activity is first created. */ @Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main1);

ETplace = (EditText) findViewById(R.id.place); query = (Button) findViewById(R.id.query);

imView = (ImageView) findViewById(R.id.myImageView);

placeName = (TextView) findViewById(R.id.tvPlace);

query.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { try {

TvPlace = (TextView)

findViewById(R.id.tvPlace); //

String place =

ETplace.getText().toString(); String place =

CntoSpell.getFullSpell(ETplace.getText().toString());

//

placeName.setText(place); String weather = \; String url =

\ //

+ place;

String url =

\;

DefaultHttpClient client = new

DefaultHttpClient();

// String strResult = //

HttpUriRequest req = new HttpGet(url); HttpResponse resp = client.execute(req);

EntityUtils.toString(resp.getEntity());

DocumentBuilder b =

HttpEntity ent = resp.getEntity(); InputStream stream = ent.getContent();

// Log.i(\ // 一华氏度等于9/5摄氏度数值+32

DocumentBuilderFactory.newInstance()

.newDocumentBuilder();

Document d = b.parse(new

InputSource(stream));

NodeList n =

d.getElementsByTagName(\);

// 获得图片url 当天的。

String imgUrl = \; imgUrl +=

n.item(0).getChildNodes().item(3).getAttributes()

// 今后4天预报

.item(0).getNodeValue();

imView.setImageBitmap(Utils.returnBitMap(imgUrl));

{

for (int i = 0; i < n.getLength(); i++)

weather +=

Utils.week(n.item(i).getChildNodes().item(0) }

}

});

}

} catch (Exception e) { }

e.printStackTrace();

.getAttributes().item(0).getNodeValue());

weather += \; weather += (Integer

.parseInt(n.item(i).getChildNodes().item(1)

.getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;

weather += \; weather += (Integer

.parseInt(n.item(i).getChildNodes().item(2)

.getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;

weather += \; weather += Utils

.weather(n.item(i).getChildNodes().item(4)

.getAttributes().item(0).getNodeValue());

}

Log.i(\, weather); TvPlace.setText(weather);

weather += \;

Utils类:

package com.AndroidWeather;

import java.io.IOException; import java.io.InputStream;

import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

public class Utils {

public static String week(String enWeek) {

if (enWeek.equals(\) || enWeek.equals(\))

return \星期一\;

else if (enWeek.equals(\) || enWeek.equals(\))

return \星期二\;

else if (enWeek.equals(\) ||

enWeek.equals(\))

return \星期三\;

else if (enWeek.equals(\) ||

enWeek.equals(\))

return \星期四\;

else if (enWeek.equals(\) || enWeek.equals(\))

return \星期五\;

else if (enWeek.equals(\) ||

enWeek.equals(\))

public static String weather(String enWeather) {

if (enWeather.equals(\))

return \晴\;

|| enWeather.equals(\))

}

return \星期六\;

else if (enWeek.equals(\) || enWeek.equals(\))

return \星期日\;

return \;

else if (enWeather.equals(\)

return \多云\;

}

else if (enWeather.equals(\))

return \晴转雨\;

else if (enWeather.equals(\))

return \暴雨\;

else if (enWeather.equals(\))

return \雷阵雨\;

else if (enWeather.equals(\))

return \大雾\;

else if (enWeather.equals(\))

return \有雾\;

else if (enWeather.equals(\))

return \雨\;

else if (enWeather.equals(\))

return \大雨\;

else if (enWeather.equals(\))

return \小雨\;

else if (enWeather.equals(\))

return \大雨\;

else if (enWeather.equals(\))

return \有雪\;

// / 还需要补充。。。。 return \;

public static Bitmap returnBitMap(String imgUrl) {

URL myImgUrl = null; Bitmap bitmap = null; try {

myImgUrl = new URL(imgUrl);

} catch (MalformedURLException e) { } try {

HttpURLConnection conn = (HttpURLConnection) e.printStackTrace();

myImgUrl

.openConnection();

conn.setDoInput(true); conn.connect();

}

}

InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close();

} catch (IOException e) { }

return bitmap;

e.printStackTrace();

CntoSpell类:

package com.AndroidWeather;

import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Set;

public class CntoSpell {

private static LinkedHashMap spellMap = null;

static {

if (spellMap == null) {

spellMap = new LinkedHashMap(400); }

initialize();

// System.out.println(\ }

private CntoSpell() { }

private static void spellPut(String spell, int ascii) { spellMap.put(spell, new Integer(ascii)); }

private static void initialize() { spellPut(\, -20319);

spellPut(\, -20317); spellPut(\, -20304); spellPut(\, -20295); spellPut(\, -20292); spellPut(\, -20283); spellPut(\, -20265); spellPut(\, -20257); spellPut(\, -20242); spellPut(\, -20230); spellPut(\, -20051); spellPut(\, -20036); spellPut(\, -20032); spellPut(\, -20026); spellPut(\, -20002); spellPut(\, -19990); spellPut(\, -19986); spellPut(\, -19982); spellPut(\, -19976); spellPut(\, -19805); spellPut(\, -19784); spellPut(\, -19775); spellPut(\, -19774); spellPut(\, -19763); spellPut(\, -19756); spellPut(\, -19751); spellPut(\, -19746); spellPut(\, -19741); spellPut(\, -19739); spellPut(\, -19728); spellPut(\, -19725); spellPut(\, -19715); spellPut(\, -19540); spellPut(\, -19531); spellPut(\, -19525); spellPut(\, -19515); spellPut(\, -19500); spellPut(\, -19484); spellPut(\, -19479);

spellPut(\, -19467); spellPut(\, -19289); spellPut(\, -19288); spellPut(\, -19281); spellPut(\, -19275); spellPut(\, -19270); spellPut(\, -19263); spellPut(\, -19261); spellPut(\, -19249); spellPut(\, -19243); spellPut(\, -19242); spellPut(\, -19238); spellPut(\, -19235); spellPut(\, -19227); spellPut(\, -19224); spellPut(\, -19218); spellPut(\, -19212); spellPut(\, -19038); spellPut(\, -19023); spellPut(\, -19018); spellPut(\, -19006); spellPut(\, -19003); spellPut(\, -18996); spellPut(\, -18977); spellPut(\, -18961); spellPut(\, -18952); spellPut(\, -18783); spellPut(\, -18774); spellPut(\, -18773); spellPut(\, -18763); spellPut(\, -18756); spellPut(\, -18741); spellPut(\, -18735); spellPut(\, -18731); spellPut(\, -18722); spellPut(\, -18710); spellPut(\, -18697); spellPut(\, -18696);

spellPut(\, -18526); spellPut(\, -18518); spellPut(\, -18501); spellPut(\, -18490); spellPut(\, -18478); spellPut(\, -18463); spellPut(\, -18448); spellPut(\, -18447); spellPut(\, -18446); spellPut(\, -18239); spellPut(\, -18237); spellPut(\, -18231); spellPut(\, -18220); spellPut(\, -18211); spellPut(\, -18201); spellPut(\, -18184); spellPut(\, -18183); spellPut(\, -18181); spellPut(\, -18012); spellPut(\, -17997); spellPut(\, -17988); spellPut(\, -17970); spellPut(\, -17964); spellPut(\, -17961); spellPut(\, -17950); spellPut(\, -17947); spellPut(\, -17931); spellPut(\, -17928); spellPut(\, -17922); spellPut(\, -17759); spellPut(\, -17752); spellPut(\, -17733); spellPut(\, -17730); spellPut(\, -17721); spellPut(\, -17703); spellPut(\, -17701); spellPut(\, -17697); spellPut(\, -17692);

spellPut(\, -17683); spellPut(\, -17676); spellPut(\, -17496); spellPut(\, -17487); spellPut(\, -17482); spellPut(\, -17468); spellPut(\, -17454); spellPut(\, -17433); spellPut(\, -17427); spellPut(\, -17417); spellPut(\, -17202); spellPut(\, -17185); spellPut(\, -16983); spellPut(\, -16970); spellPut(\, -16942); spellPut(\, -16915); spellPut(\, -16733); spellPut(\, -16708); spellPut(\, -16706); spellPut(\, -16689); spellPut(\, -16664); spellPut(\,-16657); spellPut(\, -16647); spellPut(\, -16474); spellPut(\, -16470); spellPut(\, -16465); spellPut(\, -16459); spellPut(\, -16452); spellPut(\, -16448); spellPut(\, -16433); spellPut(\, -16429); spellPut(\, -16427); spellPut(\, -16423); spellPut(\, -16419); spellPut(\, -16412); spellPut(\, -16407); spellPut(\, -16403); spellPut(\, -16401);

spellPut(\, -16393); spellPut(\, -16220); spellPut(\, -16216); spellPut(\, -16212); spellPut(\, -16205); spellPut(\, -16202); spellPut(\, -16187); spellPut(\, -16180); spellPut(\, -16171); spellPut(\, -16169); spellPut(\, -16158); spellPut(\, -16155); spellPut(\, -15959); spellPut(\, -15958); spellPut(\, -15944); spellPut(\, -15933); spellPut(\, -15920); spellPut(\, -15915); spellPut(\, -15903); spellPut(\, -15889); spellPut(\, -15878); spellPut(\, -15707); spellPut(\, -15701); spellPut(\, -15681); spellPut(\, -15667); spellPut(\, -15661); spellPut(\, -15659); spellPut(\, -15652); spellPut(\, -15640); spellPut(\, -15631); spellPut(\, -15625); spellPut(\, -15454); spellPut(\, -15448); spellPut(\, -15436); spellPut(\, -15435); spellPut(\, -15419); spellPut(\, -15416); spellPut(\, -15408);

spellPut(\, -15394); spellPut(\, -15385); spellPut(\, -15377); spellPut(\, -15375); spellPut(\, -15369); spellPut(\, -15363); spellPut(\, -15362); spellPut(\, -15183); spellPut(\, -15180); spellPut(\, -15165); spellPut(\, -15158); spellPut(\, -15153); spellPut(\, -15150); spellPut(\, -15149); spellPut(\, -15144); spellPut(\, -15143); spellPut(\, -15141); spellPut(\, -15140); spellPut(\, -15139); spellPut(\, -15128); spellPut(\, -15121); spellPut(\, -15119); spellPut(\, -15117); spellPut(\, -15110); spellPut(\, -15109); spellPut(\, -14941); spellPut(\, -14937); spellPut(\, -14933); spellPut(\, -14930); spellPut(\, -14929); spellPut(\, -14928); spellPut(\, -14926); spellPut(\, -14922); spellPut(\, -14921); spellPut(\, -14914); spellPut(\, -14908); spellPut(\, -14902); spellPut(\, -14894);

spellPut(\, -14889); spellPut(\, -14882); spellPut(\, -14873); spellPut(\, -14871); spellPut(\, -14857); spellPut(\, -14678); spellPut(\, -14674); spellPut(\, -14670); spellPut(\, -14668); spellPut(\, -14663); spellPut(\, -14654); spellPut(\, -14645); spellPut(\, -14630); spellPut(\, -14594); spellPut(\, -14429); spellPut(\, -14407); spellPut(\, -14399); spellPut(\, -14384); spellPut(\, -14379); spellPut(\, -14368); spellPut(\, -14355); spellPut(\, -14353); spellPut(\, -14345); spellPut(\, -14170); spellPut(\, -14159); spellPut(\, -14151); spellPut(\, -14149); spellPut(\, -14145); spellPut(\, -14140); spellPut(\, -14137); spellPut(\, -14135); spellPut(\, -14125); spellPut(\, -14123); spellPut(\, -14122); spellPut(\, -14112); spellPut(\, -14109); spellPut(\, -14099); spellPut(\, -14097);

spellPut(\, -14094); spellPut(\, -14092); spellPut(\, -14090); spellPut(\, -14087); spellPut(\, -14083); spellPut(\, -13917); spellPut(\, -13914); spellPut(\, -13910); spellPut(\, -13907); spellPut(\, -13906); spellPut(\, -13905); spellPut(\, -13896); spellPut(\, -13894); spellPut(\, -13878); spellPut(\, -13870); spellPut(\, -13859); spellPut(\, -13847); spellPut(\, -13831); spellPut(\, -13658); spellPut(\, -13611); spellPut(\,-13601); spellPut(\, -13406);

spellPut(\, -13404); spellPut(\, -13400); spellPut(\, -13398); spellPut(\, -13395); spellPut(\, -13391); spellPut(\, -13387); spellPut(\, -13383); spellPut(\, -13367); spellPut(\, -13359); spellPut(\, -13356); spellPut(\, -13343); spellPut(\, -13340); spellPut(\, -13329); spellPut(\, -13326); spellPut(\, -13318); spellPut(\, -13147);

spellPut(\, -13138); spellPut(\, -13120); spellPut(\, -13107); spellPut(\, -13096); spellPut(\, -13095); spellPut(\, -13091); spellPut(\, -13076); spellPut(\, -13068); spellPut(\, -13063); spellPut(\, -13060); spellPut(\, -12888); spellPut(\, -12875); spellPut(\, -12871); spellPut(\, -12860); spellPut(\, -12858); spellPut(\, -12852); spellPut(\, -12849); spellPut(\, -12838); spellPut(\, -12831); spellPut(\, -12829); spellPut(\, -12812); spellPut(\, -12802); spellPut(\, -12607); spellPut(\, -12597); spellPut(\, -12594); spellPut(\, -12585); spellPut(\, -12556); spellPut(\, -12359); spellPut(\, -12346); spellPut(\, -12320); spellPut(\, -12300); spellPut(\, -12120); spellPut(\, -12099); spellPut(\, -12089); spellPut(\, -12074); spellPut(\, -12067); spellPut(\, -12058); spellPut(\, -12039);

spellPut(\, -11867); spellPut(\, -11861); spellPut(\, -11847); spellPut(\, -11831); spellPut(\, -11798); spellPut(\, -11781); spellPut(\, -11604); spellPut(\, -11589); spellPut(\, -11536); spellPut(\, -11358); spellPut(\, -11340); spellPut(\, -11339); spellPut(\, -11324); spellPut(\, -11303); spellPut(\, -11097); spellPut(\, -11077); spellPut(\, -11067); spellPut(\, -11055); spellPut(\, -11052); spellPut(\, -11045); spellPut(\, -11041); spellPut(\, -11038); spellPut(\, -11024); spellPut(\, -11020); spellPut(\, -11019); spellPut(\, -11018); spellPut(\, -11014); spellPut(\, -10838); spellPut(\, -10832); spellPut(\, -10815); spellPut(\, -10800); spellPut(\, -10790); spellPut(\, -10780); spellPut(\, -10764); spellPut(\, -10587); spellPut(\, -10544); spellPut(\, -10533); spellPut(\, -10519);

spellPut(\, -10331); spellPut(\, -10329); spellPut(\, -10328); spellPut(\, -10322); spellPut(\, -10315); spellPut(\, -10309); spellPut(\, -10307); spellPut(\, -10296); spellPut(\, -10281); spellPut(\, -10274); spellPut(\, -10270); spellPut(\, -10262); spellPut(\, -10260); spellPut(\, -10256); spellPut(\, -10254); }

/**

* 获得单个汉字的Ascii. *

* @param cn

* char 汉字字符

* @return int 错误返回 0,否则返回ascii */

public static int getCnAscii(char cn) {

byte[] bytes = (String.valueOf(cn)).getBytes();

if (bytes == null || bytes.length > 2 || bytes.length <= 0) { // 错误

return 0; }

if (bytes.length == 1) { // 英文字符 return bytes[0]; }

if (bytes.length == 2) { // 中文字符 int hightByte = 256 + bytes[0]; int lowByte = 256 + bytes[1];

int ascii = (256 * hightByte + lowByte) - 256 * 256;

// System.out.println(\

return ascii; }

return 0; // 错误 }

/**

* 根据ASCII码到SpellMap中查找对应的拼音 *

* @param ascii

* int 字符对应的ASCII

* @return String 拼音,首先判断ASCII是否>0&<160,如果是返回对应的字符, *

* 否则到SpellMap中查找,如果没有找到拼音,则返回null,如果找到则返回拼音. */

public static String getSpellByAscii(int ascii) { if (ascii > 0 && ascii < 160) { // 单字符 return String.valueOf((char) ascii); }

if (ascii < -20319 || ascii > -10247) { // 不知道的字符 return null; }

Set keySet = spellMap.keySet(); Iterator it = keySet.iterator();

String spell0 = null; ;

String spell = null;

int asciiRang0 = -20319; int asciiRang;

while (it.hasNext()) {

spell = (String) it.next();

Object valObj = spellMap.get(spell); if (valObj instanceof Integer) {

asciiRang = ((Integer) valObj).intValue();

if (ascii >= asciiRang0 && ascii < asciiRang) { // 区间找到

return (spell0 == null) ? spell : spell0; } else {

spell0 = spell;

asciiRang0 = asciiRang; } } }

return null; }

/**

* 返回字符串的全拼,是汉字转化为全拼,其它字符不进行转换 *

* @param cnStr

* String 字符串

* @return String 转换成全拼后的字符串 */

public static String getFullSpell(String cnStr) { if (null == cnStr || \.equals(cnStr.trim())) { return cnStr; }

char[] chars = cnStr.toCharArray();

StringBuffer retuBuf = new StringBuffer();

for (int i = 0, Len = chars.length; i < Len; i++) { int ascii = getCnAscii(chars[i]); if (ascii == 0) { // 取ascii时出错 retuBuf.append(chars); } else {

String spell = getSpellByAscii(ascii);

if (spell == null) { retuBuf.append(chars); } else {

retuBuf.append(spell); } // end of if spell == null } // end of if ascii <= -20400 } // end of for

return retuBuf.toString(); }

/**

* 返回字符串的拼音的首字母,是汉字转化为全拼,其它字符不进行转换 *

* @param cnStr

* String 字符串

* @return String 转换成全拼后的字符串的首字母 */

public static String getFirstSpell(String cnStr) { if (cnStr.substring(0, 1).equals(\沣\)) return \;

if (cnStr.substring(0, 1).equals(\骊\)) return \;

if (cnStr.substring(0, 1).equals(\杈\)) return \;

if (cnStr.substring(0, 1).equals(\阿\)) return \;

if (cnStr.substring(0, 1).equals(\怡\)) return \;

if (cnStr.substring(0, 1).equals(\灞\)) return \; else

return getFullSpell(cnStr).substring(0, 1); }

/**

* 返回字符串的拼音的首字母的关键码值,是汉字转化为全拼,其它字符不进行转换 *

* @param cnStr

* String 字符串

* @return String 转换成全拼后的字符串的首字母的关键码值 这儿的关键码设为从0到26的数字 */

public static int getKey(String str) {

return +getFirstSpell(str).charAt(0) - 97; }

public static void main(String[] args) { String s = \;

System.out.println(getFirstSpell(s)); } }

Main1.xml:

xmlns:android=\

android:orientation=\

android:layout_width=\

android:layout_height=\>

android:layout_width=\

android:layout_height=\/>

android:layout_width=\

android:layout_height=\ />

android:layout_width=\

android:layout_height=\ android:hint=\输入城市名称(汉字或者拼音)\ />

android天气预报源代码解析

通过google接口在Android中实现天气预报效果Android可以通过google实现获取指定经纬度位置或者某一个城市的天气信息。如果是根据经纬度查询天气信息,需要对精度为进行转换,例如lat值为31.174165,需要过滤掉小数点,变为31174165传到接口中,维度也一样处理,处理后传给http://www.google.com/ig
推荐度:
点击下载文档文档为doc格式
69yo046ccy6bod04q39t7z7sh75lu600odb
领取福利

微信扫码领取福利

微信扫码分享