Android 基于百度的天气预报
来源:互联网 发布:怎样查电脑的mac地址 编辑:程序博客网 时间:2024/05/13 03:20
我在做一个项目需要一个天气预报这个功能,找了一些资料好不容易整出来,
先上个效果图吧
现在就跟大家分享吧,闲话不多说,我就直接上代码吧
资料下载天气预报小demo
WeatherScreen.java
package cn.hhs.activity;import android.app.Activity;import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.DialogInterface;import android.location.Location;import android.os.AsyncTask;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import cn.hhs.util.DataUtil;import cn.hhs.util.HttpService;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.LocationListener;import com.baidu.mapapi.MKAddrInfo;import com.baidu.mapapi.MKBusLineResult;import com.baidu.mapapi.MKDrivingRouteResult;import com.baidu.mapapi.MKLocationManager;import com.baidu.mapapi.MKPoiResult;import com.baidu.mapapi.MKSearch;import com.baidu.mapapi.MKSearchListener;import com.baidu.mapapi.MKTransitRouteResult;import com.baidu.mapapi.MKWalkingRouteResult;/** * @author 家铄 * @QQ 1466181491 * */public class WeatherScreen extends Activity implements OnClickListener { BMapManager mBMapMan = null; LocationListener mLocationListener = null; MKSearch mSearch = null; String npCityId=""; EditText dialogCity; String provinceName, cityName; boolean flag =true; ProgressDialog progressDialog; LinearLayout ll_yes,ll_no; TextView tv_city,tv_today,tv_attr1,tv_attr2,tv_attr3,tv_noresult; TextView tv_date1,tv_date2,tv_wd1,tv_wd2; ImageView ima,ima1,ima2; Button btn_return,btn_other; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.weather_screen); initView(); initBaiDuMap(); } @Override protected void onPause() { mBMapMan.getLocationManager().removeUpdates(mLocationListener); mBMapMan.stop(); super.onPause(); } @Override protected void onResume() { mBMapMan.getLocationManager().requestLocationUpdates(mLocationListener); mBMapMan.getLocationManager().enableProvider(MKLocationManager.MK_GPS_PROVIDER); mBMapMan.start(); super.onResume(); } /** * * 方法名:initBaiDuMap * 功能:初始化百度地图 * 参数: */ private void initBaiDuMap(){ mBMapMan = new BMapManager(getApplication()); mBMapMan.init("14A97FC2DDF678193F61C19C0A20EA29C49DEF5C", null);// 14A97FC2DDF678193F61C19C0A20EA29C49DEF5C mBMapMan.start(); initMyLocation(); } /** * * 方法名:initMyLocation * 功能:启动定位 * 参数: */ private void initMyLocation(){ progressDialog = ProgressDialog.show(this,null, "城市定位中...",true, true); mLocationListener = new LocationListener(){ @Override public void onLocationChanged(Location location) { if(location != null&& flag){ progressDialog.dismiss(); flag = false; GeoPoint myPt = new GeoPoint((int)(location.getLatitude()*1e6), (int)(location.getLongitude()*1e6)); initMapSerach(); //将当前坐标转化为地址获取当前城市名称 mSearch.reverseGeocode(myPt); }else{ } } }; } private void initMapSerach(){ // 初始化搜索模块,注册事件监听 mSearch = new MKSearch(); mSearch.init(mBMapMan, new MKSearchListener(){ public void onGetPoiResult(MKPoiResult res, int type, int error) { } public void onGetDrivingRouteResult(MKDrivingRouteResult res, int error) { } public void onGetTransitRouteResult(MKTransitRouteResult res, int error) { } public void onGetWalkingRouteResult(MKWalkingRouteResult res, int error) { } public void onGetAddrResult(MKAddrInfo res, int error) { if (error != 0 || res == null) { }else{ String city = res.addressComponents.city; String pro = res.addressComponents.province; if(city!=null){ provinceName = pro.substring(0, pro.length()-1); cityName = city.substring(0, city.length()-1); progressDialog = ProgressDialog.show(WeatherScreen.this,null, "天气查询中...",true, true); QueryAsyncTask asyncTask = new QueryAsyncTask(); asyncTask.execute(""); }else{ Toast.makeText(WeatherScreen.this, "定位不到当前城市,无法查询天气", Toast.LENGTH_SHORT).show(); } } } @Override public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { } }); } /** * * 方法名:initView * 功能:初始化控件 * 参数: */ private void initView(){ ll_yes = (LinearLayout)this.findViewById(R.id.ws2_ll_yes); ll_no= (LinearLayout)this.findViewById(R.id.ws2_ll_no); tv_city= (TextView)this.findViewById(R.id.ws2_tv_city); ima= (ImageView)this.findViewById(R.id.ws2_iv_image); tv_attr1= (TextView)this.findViewById(R.id.ws2_tv_attr1); tv_attr2= (TextView)this.findViewById(R.id.ws2_tv_attr2); tv_attr3= (TextView)this.findViewById(R.id.ws2_tv_attr3); tv_noresult = (TextView)this.findViewById(R.id.ws2_tv_noresult); tv_date1= (TextView)this.findViewById(R.id.ws2_tv_1_date); tv_date2= (TextView)this.findViewById(R.id.ws2_tv_2_date); tv_wd1= (TextView)this.findViewById(R.id.ws2_tv_1_wd); tv_wd2= (TextView)this.findViewById(R.id.ws2_tv_2_wd); ima1= (ImageView)this.findViewById(R.id.ws2_iv_1_image); ima2= (ImageView)this.findViewById(R.id.ws2_iv_2_image); btn_return= (Button)this.findViewById(R.id.ws2_btn_return); btn_return.setOnClickListener(this); btn_other= (Button)this.findViewById(R.id.ws2_btn_submit); btn_other.setOnClickListener(this); } private class QueryAsyncTask extends AsyncTask { @Override protected void onPostExecute(Object result) { progressDialog.dismiss(); if(result!=null){ String weatherResult = (String)result; if(weatherResult.split(";").length>1){ String a = weatherResult.split(";")[1]; if(a.split("=").length>1){ String b = a.split("=")[1]; String c = b.substring(1,b.length()-1); String[] resultArr = c.split("\\}"); if(resultArr.length>0){ todayParse(resultArr[0]); tommrowParse(resultArr[1]); thirddayParse(resultArr[2]); ll_yes.setVisibility(View.VISIBLE); tv_city.setText(cityName); } }else{ DataUtil.Alert(WeatherScreen.this,"查无天气信息"); } }else{ DataUtil.Alert(WeatherScreen.this,"查无天气信息"); } }else{ DataUtil.Alert(WeatherScreen.this,"查无天气信息"); } super.onPostExecute(result); } @Override protected Object doInBackground(Object... params) { return HttpService.getWeather(cityName); } } /** * * 方法名:todayParse * 功能:今天天气 * 参数: * @param weather */ private void todayParse(String weather){ String temp = weather.replace("'", ""); String[] tempArr = temp.split(","); String wd=""; String tq=""; String fx=""; if(tempArr.length>0){ for(int i=0;i<tempArr.length;i++){ if(tempArr[i].indexOf("t1:")!=-1){ wd=tempArr[i].substring(3,tempArr[i].length())+"℃"; }else if(tempArr[i].indexOf("t2:")!=-1){ wd=wd+"~"+tempArr[i].substring(3,tempArr[i].length())+"℃"; }else if(tempArr[i].indexOf("d1:")!=-1){ fx=tempArr[i].substring(3,tempArr[i].length()); }else if(tempArr[i].indexOf("s1:")!=-1){ tq=tempArr[i].substring(4,tempArr[i].length()); } } tv_attr1.setText("气温:"+wd); tv_attr2.setText("天气情况:"+tq); tv_attr3.setText("风向:"+fx); ima.setImageResource(imageResoId(tq)); } } /** * * 方法名:tommrowParse * 功能:明天天气 * 参数: * @param weather */ private void tommrowParse(String weather){ String temp = weather.replace("'", ""); String[] tempArr = temp.split(","); String wd=""; String tq=""; String fx=""; if(tempArr.length>0){ for(int i=0;i<tempArr.length;i++){ if(tempArr[i].indexOf("t1:")!=-1){ wd=tempArr[i].substring(3,tempArr[i].length())+"℃"; }else if(tempArr[i].indexOf("t2:")!=-1){ wd=wd+"~"+tempArr[i].substring(3,tempArr[i].length())+"℃"; }else if(tempArr[i].indexOf("d1:")!=-1){ fx=tempArr[i].substring(3,tempArr[i].length()); }else if(tempArr[i].indexOf("s1:")!=-1){ tq=tempArr[i].substring(4,tempArr[i].length()); } } tv_date1.setText("明天 "+tq); tv_wd1.setText(wd); ima1.setImageResource(imageResoId(tq)); } } /** * * 方法名:thirddayParse * 功能:获取后天天气 * 参数: * @param weather */ private void thirddayParse(String weather){ String temp = weather.replace("'", ""); String[] tempArr = temp.split(","); String wd=""; String tq=""; String fx=""; if(tempArr.length>0){ for(int i=0;i<tempArr.length;i++){ if(tempArr[i].indexOf("t1:")!=-1){ wd=tempArr[i].substring(3,tempArr[i].length())+"℃"; }else if(tempArr[i].indexOf("t2:")!=-1){ wd=wd+"~"+tempArr[i].substring(3,tempArr[i].length())+"℃"; }else if(tempArr[i].indexOf("d1:")!=-1){ fx=tempArr[i].substring(3,tempArr[i].length()); }else if(tempArr[i].indexOf("s1:")!=-1){ tq=tempArr[i].substring(4,tempArr[i].length()); } } tv_date2.setText("后天 "+tq); tv_wd2.setText(wd); ima2.setImageResource(imageResoId(tq)); } } /** * * 方法名:imageResoId * 功能:获取图片 * 参数: * @param weather * @return */ private int imageResoId(String weather){ int resoid=R.drawable.s_2; if(weather.indexOf("多云")!=-1||weather.indexOf("晴")!=-1){//多云转晴,以下类同 indexOf:包含字串 resoid=R.drawable.s_1;} else if(weather.indexOf("多云")!=-1&&weather.indexOf("阴")!=-1){ resoid=R.drawable.s_2;} else if(weather.indexOf("阴")!=-1&&weather.indexOf("雨")!=-1){ resoid=R.drawable.s_3;} else if(weather.indexOf("晴")!=-1&&weather.indexOf("雨")!=-1){ resoid=R.drawable.s_12;} else if(weather.indexOf("晴")!=-1&&weather.indexOf("雾")!=-1){ resoid=R.drawable.s_12;} else if(weather.indexOf("晴")!=-1){resoid=R.drawable.s_13;} else if(weather.indexOf("多云")!=-1){resoid=R.drawable.s_2;} else if(weather.indexOf("阵雨")!=-1){resoid=R.drawable.s_3;} else if(weather.indexOf("小雨")!=-1){resoid=R.drawable.s_3;} else if(weather.indexOf("中雨")!=-1){resoid=R.drawable.s_4;} else if(weather.indexOf("大雨")!=-1){resoid=R.drawable.s_5;} else if(weather.indexOf("暴雨")!=-1){resoid=R.drawable.s_5;} else if(weather.indexOf("冰雹")!=-1){resoid=R.drawable.s_6;} else if(weather.indexOf("雷阵雨")!=-1){resoid=R.drawable.s_7;} else if(weather.indexOf("小雪")!=-1){resoid=R.drawable.s_8;} else if(weather.indexOf("中雪")!=-1){resoid=R.drawable.s_9;} else if(weather.indexOf("大雪")!=-1){resoid=R.drawable.s_10;} else if(weather.indexOf("暴雪")!=-1){resoid=R.drawable.s_10;} else if(weather.indexOf("扬沙")!=-1){resoid=R.drawable.s_11;} else if(weather.indexOf("沙尘")!=-1){resoid=R.drawable.s_11;} else if(weather.indexOf("雾")!=-1){resoid=R.drawable.s_12;} return resoid; } @Override public void onClick(View v) { switch(v.getId()){ case R.id.ws2_btn_return: finish(); break; case R.id.ws2_btn_submit: showOtherCity(); break; } } /** * * 方法名:showOtherCity * 功能:输入其他城市名称 * 参数: */ private void showOtherCity(){ LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.weather_other_city,(ViewGroup) findViewById(R.id.ws_dialog)); dialogCity = (EditText)layout.findViewById(R.id.ws_city_name); new AlertDialog.Builder(this).setTitle("请输入城市名称").setView(layout) .setPositiveButton("确定",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { cityName=dialogCity.getText().toString(); if(cityName!=null&&cityName.length()>0){ progressDialog = ProgressDialog.show(WeatherScreen.this,null, "天气查询中...",true, true); QueryAsyncTask asyncTask = new QueryAsyncTask(); asyncTask.execute(""); } } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }).show(); }}
然后他的布局文件是weather_screen.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/main_bg" > <RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="50dip" android:background="@drawable/top_bg_g_repe" android:paddingTop="9dp" > <Button android:id="@+id/ws2_btn_return" android:layout_width="55dip" android:layout_height="35dip" android:background="@drawable/btn_return_g" android:layout_marginLeft="5dip" android:layout_alignParentLeft ="true" android:textColor="#ffffff" android:text="返回" /> <TextView android:textSize="16sp" android:textColor="#ffffffff" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dip" android:text="天气查询" android:layout_centerInParent="true" /> <Button android:id="@+id/ws2_btn_submit" android:layout_height="35dip" android:layout_width="55dip" android:background="@drawable/btn_normal_g" android:layout_marginRight="5dip" android:layout_alignParentRight ="true" android:textColor="#ffffff" android:text="其他" /> </RelativeLayout> <LinearLayout android:id="@+id/ws2_ll_yes" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:visibility="gone" > <TextView android:id="@+id/ws2_tv_city" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:textSize="20sp" android:gravity="center" android:text="福州" android:textColor="#000000" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:layout_marginLeft="15dip" android:text="今日天气实况:" android:textColor="#000000" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:orientation="vertical" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <ImageView android:id="@+id/ws2_iv_image" android:layout_width="55dip" android:layout_height="55dip" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/ws2_tv_attr1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:layout_marginLeft="35dip" android:text="气温:" android:textColor="#000000" /> <TextView android:id="@+id/ws2_tv_attr2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:layout_marginLeft="35dip" android:text="天气情况:" android:textColor="#000000" /> <TextView android:id="@+id/ws2_tv_attr3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:layout_marginLeft="35dip" android:layout_marginBottom="10dip" android:text="风向:" android:textColor="#000000" /> </LinearLayout> </LinearLayout> <include layout="@layout/common_line"/> <!-- 天气 begin --> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <!-- 天气1 --> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/ws2_tv_1_date" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center" android:text="明天 " android:textColor="#000000" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" > <ImageView android:id="@+id/ws2_iv_1_image" android:layout_width="45dip" android:layout_height="45dip" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" > <TextView android:id="@+id/ws2_tv_1_wd" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center" android:text="" android:textColor="#000000" /> </LinearLayout> </LinearLayout> </LinearLayout> <!-- 天气2 --> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/ws2_tv_2_date" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center" android:text="后天 " android:textColor="#000000" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" > <ImageView android:id="@+id/ws2_iv_2_image" android:layout_width="45dip" android:layout_height="45dip" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" > <TextView android:id="@+id/ws2_tv_2_wd" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center" android:text="" android:textColor="#000000" /> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> <!-- 天气 end --> </LinearLayout> <LinearLayout android:id="@+id/ws2_ll_no" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:visibility="gone" > <TextView android:id="@+id/ws2_tv_noresult" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:textColor="#000000" /> </LinearLayout></LinearLayout>
由于空间的问题我就一一贴代码啦,当然我现在还有很多不足,也希望大家能指点跟给点建议,我会一点点去改善的,最后大家可以到**我的资料这里下载
天气预报demo**
0 0
- Android 基于百度的天气预报
- Android基于百度api的天气预报
- 基于百度地图API实现的地图形式天气预报【一】
- 基于百度地图API实现的地图形式天气预报【二】
- 基于百度地图API实现的地图形式天气预报
- 基于百度地图API实现的地图形式天气预报【二】
- 基于百度地图的定位实现天气预报查询
- Android天气预报+百度天气接口
- 百度天气预报API的使用
- Android 基于Web Service的应用之天气预报
- Android基于中华万年历接口开发的WeatherReport天气预报
- 基于Android开发的天气预报app(源码下载)
- Android天气预报,Json解析,百度天气接口
- 百度天气预报
- 简单的android天气预报
- android 版本的天气预报
- Android简单的天气预报
- android独特的天气预报
- POJ 3616 Milking Time(区间dp,简单任务调度问题)
- sql查询数据库中所有表名
- 如何解决SVN Commit failed (details follow): Access denied
- 一个基本app的搭建
- Eclipse 查看 jar 文件
- Android 基于百度的天气预报
- 得到AppSettings中的配置int信息
- 源码探索系列8---IntentService
- Marshmallow(Android 6.0) 简介
- Xcode7.2如何进行屏幕横竖屏设置
- TabActivity介绍
- oracle 根据出生日期计算精确年龄
- 获取当前文件的绝对路径
- 关于Android写LOG日志到SD卡文件之microlog4android使用