package org.mortbay.ijetty.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; import org.mortbay.ijetty.AppConstants; import org.mortbay.ijetty.MainApplication; import org.mortbay.ijetty.component.AddressInfo; import org.mortbay.ijetty.component.Province; import org.mortbay.ijetty.component.Province.City; import org.mortbay.ijetty.component.WeatherInfo; import org.mortbay.ijetty.network.NetworkUtil; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.util.Log; public class WeatherAndAddressUtil { /** * 根据网络获得当前所在省市 * * @param handler */ public static void initAddressInfo(final Handler handler) { final String queryUrl = "http://iframe.ip138.com/ic.asp"; Runnable run = new Runnable() { public void run() { String ip = null; String proName = null; String cityName = null; String tmp = null; String sb = null; try { sb = NetworkUtil.readDataSync(queryUrl, null, true); // Log.e("gary", "initAddressInfo string: " + // sb.toString()); // 获得IP int start = sb.indexOf("["); int end = sb.indexOf("]", start + 1); ip = sb.substring(start + 1, end); AddressInfo.getInstance().setIp(ip); // 获得省市 start = sb.indexOf("来自:"); end = sb.indexOf("市", start + 1); tmp = sb.substring(start + 3, end + 1); // 获得省 end = tmp.indexOf("省"); //普通省份 if (end > 0) { proName = tmp.substring(0, end); // 获得市 start = tmp.indexOf("省"); end = tmp.indexOf("市", start + 1); cityName = tmp.substring(start + 1, end); }else{ // 自治区省份 end = tmp.indexOf("自治区"); if(end > 0){ proName = tmp.substring(0, end); // 获得市 start = tmp.indexOf("自治区"); end = tmp.indexOf("市", start + 3); cityName = tmp.substring(start + 3, end); }else{ // 直辖市 end = tmp.indexOf("市"); cityName = tmp.substring(0, end); } } if(!TextUtils.isEmpty(proName)) proName = proName.trim(); if(!TextUtils.isEmpty(cityName)) cityName = cityName.trim(); AddressInfo.getInstance().setProName(proName); AddressInfo.getInstance().setCityName(cityName); WeatherInfo.getInstance().initWeatherInfo( AddressInfo.getInstance().getCityName(), handler); } catch (Exception e) { e.printStackTrace(); Message message = new Message(); message.what = AppConstants.MSG_SHOW_WEATHER; handler.sendMessage(message); } } }; Thread t = new Thread(run); t.setDaemon(true); t.start(); } /** * 初始化城市列表信息 * * @param filename * @return */ public static void initCitysInfo() { List<City> citys = null; Province pro = null; List<Province> pros = new LinkedList<Province>(); BufferedReader br = null; String line = null; InputStream is = null; try { is = MainApplication.getInstance().getAssets() .open(AppConstants.PROVINCES_FILE_NAME); br = new BufferedReader(new InputStreamReader(is, "GB2312")); while ((line = br.readLine()) != null) { String[] datas = line.split("="); if (datas == null || datas.length != 2) continue; // Log.e("gary","datas[0].trim() "+datas[0].trim()); if (datas[0].trim().startsWith("[") && datas[0].trim().endsWith("]")) { if (pro != null && citys != null) { pro.setCitys(citys); pros.add(pro); } pro = new Province(); String proName = datas[0].trim(); proName = proName.substring(1, proName.length() - 1); pro.setProName(proName); pro.setId(Integer.parseInt(datas[1].trim())); citys = new LinkedList<City>(); continue; } City city = new City(); city.setName(datas[1].trim()); city.setId(Long.parseLong(datas[0].trim())); citys.add(city); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) try { br.close(); } catch (IOException e) { e.printStackTrace(); } if (is != null) try { is.close(); } catch (IOException e) { e.printStackTrace(); } } AppConstants.PROVINCES_INFO = pros; } /** * 通过城市名获得城市ID(获得天气预报) * * @param pros * 所有省份信息 * @param cityname * 城市名 * @return 城市ID */ public static long getCityIDByCityname(String cityname) { long vId = 0L; if (TextUtils.isEmpty(cityname)) return vId; List<Province> pros = AppConstants.PROVINCES_INFO; if (pros == null || pros.size() < 1) return vId; for (Province pro : pros) { for (City city : pro.getCitys()) { if (city.getName().equals(cityname)) return city.getId(); } } return vId; } /** * 通过城市名获得省份ID(标识不同域名) * * @param pros * 所有省份信息 * @param cityname * 城市名 * @return 省份ID */ public static int getProvinceIDByCityname(String cityname) { int vId = 0; if (TextUtils.isEmpty(cityname)) return vId; List<Province> pros = AppConstants.PROVINCES_INFO; if (pros == null || pros.size() < 1) return vId; for (Province pro : pros) { for (City city : pro.getCitys()) { if (city.getName().equals(cityname)) return pro.getId(); } } return vId; } }