当前位置: 代码迷 >> Android >> android以后台定时更新ui天气【Timer、service、broadcast、activity】
  详细解决方案

android以后台定时更新ui天气【Timer、service、broadcast、activity】

热度:76   发布时间:2016-04-28 08:01:54.0
android之后台定时更新ui天气【Timer、service、broadcast、activity】

这个案例只是为了关联各个知识点,在实际开发中还有待优化

 项目结构分析:

Weather实体类:用来存放我们的天气实体

WeatherManager: 用来操作Weather

MainActivity:主acaitivy

CityWeatherService:定时轮询来更新前台的信息

原理比较简单直接贴出代码:

Weather:

package com.example.weatherdemo;public class Weather{	private String cityName;	private String cityData;	private String cityWeath;	private String cityWinder;	private String cityImg;		public Weather(){			}	public Weather(String cityName,String cityData,String cityWeath,String cityWinder,String cityImg){		this.cityName = cityName;		this.cityData = cityData;		this.cityWeath = cityWeath;		this.cityWinder = cityWinder;		this.cityImg = cityImg;	}		public String getCityName()	{		return cityName;	}	public void setCityName(String cityName)	{		this.cityName = cityName;	}	public String getCityData()	{		return cityData;	}	public void setCityData(String cityData)	{		this.cityData = cityData;	}	public String getCityWeath()	{		return cityWeath;	}	public void setCityWeath(String cityWeath)	{		this.cityWeath = cityWeath;	}	public String getCityWinder()	{		return cityWinder;	}	public void setCityWinder(String cityWinder)	{		this.cityWinder = cityWinder;	}	public String getCityImg()	{		return cityImg;	}	public void setCityImg(String cityImg)	{		this.cityImg = cityImg;	}			}
WeatherManager:

package com.example.weatherdemo;import org.json.JSONException;import org.json.JSONObject;public class WeatherManager{	Weather weather;		public void setWeather(String jsonString){		try		{			JSONObject jsonObject = new JSONObject( jsonString );			JSONObject object = jsonObject.getJSONObject( "weatherinfo" );			String cityName = object.getString( "city" );			String cityData = object.getString( "date_y" );		    String cityWeath = object.getString( "weather1" );		    String cityWinder = object.getString( "wind1" );		    String cityImg = object.getString( "img1" );		    weather = new Weather( cityName, cityData, cityWeath, cityWinder, cityImg );		}		catch (JSONException e)		{			// TODO Auto-generated catch block			e.printStackTrace();		}	}		public Weather getWeather(){		return weather;	}	}

CityWeatherService:

package com.example.weatherdemo;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.Timer;import java.util.TimerTask;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.util.Log;public class CityWeatherService extends Service{	private static final int UPDATAWEATHER = 0X10;	private final int GOTOBROADCAST = 0X20;	public static final String BROADCASTACTION = "com.jone.broad";	Timer timer;	@Override	public IBinder onBind(Intent arg0)	{		// TODO Auto-generated method stub		return null;	}	@Override	public int onStartCommand(Intent intent, int flags, int startId)	{		// updateWeather();		timer = new Timer();		timer.schedule( new TimerTask()		{			@Override			public void run()			{				// 定时更新				String jsonString = getWeather();				// 发送广播				Intent intent = new Intent();				intent.setAction( BROADCASTACTION );				intent.putExtra( "jsonstr", jsonString );				sendBroadcast( intent );//				 Message msg = handler.obtainMessage();//				 msg.what = UPDATAWEATHER;//				 handler.sendMessage( msg );			}		}, 0, 20 * 1000 );		return super.onStartCommand( intent, flags, startId );	}	private String getWeather()	{		String srsString = "";		try		{			srsString = getJsonStringGet( "http://m.weather.com.cn/data/101250101.html" );		}		catch (Exception e)		{			// TODO Auto-generated catch block			e.printStackTrace();			Log.i( "tag",e.getMessage() );		}		return srsString;	}	public String getJsonStringGet(String uri) throws Exception	{		String result = null;		URL url = new URL( uri );		HttpURLConnection conn = (HttpURLConnection) url.openConnection();		conn.setConnectTimeout( 6 * 1000 );// 设置连接超时		Log.i( "msg", conn.getResponseCode() + "???????" );		if (conn.getResponseCode() == 200)		{			Log.i( "msg", "成功" );			InputStream is = conn.getInputStream();// 得到网络返回的输入流			result = readData( is, "UTF-8" );		}		else		{			Log.i( "msg", "失败" );			result = "";		}		conn.disconnect();		return result;	}	private String readData(InputStream inSream, String charsetName) throws Exception	{		ByteArrayOutputStream outStream = new ByteArrayOutputStream();		byte[] buffer = new byte[1024];		int len = -1;		while ((len = inSream.read( buffer )) != -1)		{			outStream.write( buffer, 0, len );		}		byte[] data = outStream.toByteArray();		outStream.close();		inSream.close();		return new String( data, charsetName );	}			@Override	public void onDestroy()	{		// TODO Auto-generated method stub		super.onDestroy();		if(timer != null){			timer.cancel();		}	}}

MainActivity:

package com.example.weatherdemo;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity{	BroadcastMain  broadcastMain ;	Weather weather;	public static WeatherManager manager;		TextView cityTextView;	@Override	protected void onCreate(Bundle savedInstanceState)	{		super.onCreate( savedInstanceState );		setContentView( R.layout.activity_main );				cityTextView = (TextView) findViewById( R.id. city);		manager = new WeatherManager();		Intent intent = new Intent();        intent.setClass(this, CityWeatherService.class);        startService(intent);		broadcastMain = new BroadcastMain();		IntentFilter filter = new IntentFilter();		filter.addAction( CityWeatherService.BROADCASTACTION );		registerReceiver( broadcastMain, filter );			}	@Override	public boolean onCreateOptionsMenu(Menu menu)	{		// Inflate the menu; this adds items to the action bar if it is present.		getMenuInflater().inflate( R.menu.main, menu );		return true;	}	public class BroadcastMain extends BroadcastReceiver{		@Override		public void onReceive(Context context, Intent intent)		{//			String jsonString = intent.getExtras().getString( "jsonstr" );//			manager.setWeather( jsonString );			Message msg = handler.obtainMessage();			msg.what = 01;			handler.sendMessage( msg );		}	}				Handler handler = new Handler()	{		public void handleMessage(android.os.Message msg)		{			switch (msg.what)			{				case 01:					weather = manager.getWeather();					cityTextView.setText( weather.getCityName() );					break;				default:					break;			}					};	};	@Override	protected void onDestroy()	{		Intent intent = new Intent();        intent.setClass(this, CityWeatherService.class);        stopService(intent);		super.onDestroy();	}		}
主要的功能实现在service中,开启一个定时器,去获取服务端的信息,通过广播来实时我们的activity中相关的组件

  相关解决方案