正文
3.3 Service
Service组件和Activity的地位是并列的,只是它没有可视化的用户界面,也没有Activity的使用频率高。Service运行于应用程序的主线程中,因此它不会阻塞其他组件和用户界面。
Service启动或停止服务有以下3种方式:
? 调用context.startService()启动,调用context.stopService()结束。 ? 调用service.stopSelf()或service.stopSelfResult()来停止。
? 调用context.bindService()建立,调用context.unbindService()关闭。 服务的生命周期方法只有3个,而且都是public属性
采用onstartService()启动服务。在服务未被创建时,系统调用服务的生命周期方法是:onCreate()->用onStart()->onDestroy()。如果服务在调用startService()方法前已经被创建,多次调用startService()方法不会导致服务被多次创建,但onStart()方法会被多次调用。
void onCreate() //当Service创建时执行,不能直接调用 void onStart(Intent intent) //在oncreate()之后,开始启动Service void onBind(Intent intent) //在oncreate()之后,绑定服务到组件 void OnUnbind(Intent intent) //在onDestroy()之前,先解除绑定,再退出 void onDestroy() //Service被销毁的时候执行
采用bindService()启动服务。在服务未被创建时,,系统调用服务的生命周期方法是onCreate()->onBind()->onDestroy()。如果服务在调用bindService()方法前已经被绑定, bindService()方法的多次调用并不会导致服务被多次创建及绑定,
代码说明如下: WeatherWebService.java:
public class WeatherWebService extends Service{ /**此处要与MainActivity一致*/
@Override
private final String BROADCAST_ACTION = \private String city;
public IBinder onBind(Intent intent) { }
public void onStart(final Intent intent, int startId) {
new Thread(new Runnable() {
@Override public void run() {
//调用全局变量
7
return null;
@Override
正文
}
} }
}
Lifegloabl gloablcity=(Lifegloabl)getApplicationContext(); city=gloablcity.getcityname(); String[] weather = null; try { }
Intent i = new Intent(); i.putExtra(\i.setAction(BROADCAST_ACTION); sendBroadcast(i);
weather = getWeather();
//发生超时,返回值区别于null与正常信息 weather = new String[]{\e.printStackTrace(); } catch (Exception e) {
}).start();
super.onStart(intent, startId);
private String[] getWeather() throws IOException, XmlPullParserException{
return WeatherUtil.getWeather(city);
3.4 SQLite
SQLite是一个使用C语言编写的轻量级开源数据库,它占用的资源非常少,已广泛用于嵌入式产品中。在实际应用中,为了能够更好地管理和维护数据库,将封装一个继承自SQLiteOpenHelper类的数据库操作类,用于完成数据库的创建、升级等操作。
SQLiteOpenHelper是一个抽样类,在该类中有如下两个抽象方法。 public abstract void onCreate(SQLiteDatabase db)
public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) SQLiteOpenHelper的子类必须继承这两个方法。
SQLiteOpenHelper会自动检测数据库文件是否存在。如果存在,则直接打开这个数据库,并不会再创建数据库文件。如果不存在,SQLiteOpenHelper先创建一个数据库文件,然后打开这个数据库,最后调用onCreate方法。
SQLite支持的常用SQL如下。 ? 创建表
create table if not exists user(_id integer primary key autoincreament,name text)
8
正文
? 查询数据 select * from user
select user_name from user where user_id=’1002’ ? 删除数据
Delete from user where user_id=’1002’
实例代码如下 LifeSqlite.java
public class LifeSqlite extends SQLiteOpenHelper{ private SQLiteDatabase database;
public LifeSqlite(Context context, String name, CursorFactory factory, }
/**FOOD列表添加数据**/
9
} }
int version) {
super(context, name, factory, version); // TODO Auto-generated constructor stub
public void openMyDatabse(){
database=getWritableDatabase();//获取数据库对象
@Override
public void onCreate(SQLiteDatabase db) {
//创建表CITY
String create_cityTable=\
+ CITY_ID + \+ CITY_NAME + \
db.execSQL(create_cityTable);
public void insertFOOD(String foodname,String foodmaking,String foodmaterial,int foodimage){ }
String insert_food=\
TABLE_FOOD_NAME +
\FOOD_MAKING + \foodname + \foodmaking + \ + \
database.execSQL(insert_food);//执行插入数据操作
正文
@Override }
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
// TODO Auto-generated method stub
3.5 Web Service
Web Service是为了支持垮网络的机器间相互操作交互而设计的一种跨编程语言和跨操作系统平台的远程调用技术,当用户需要一种能够在不同计算机间的不同语言编写的应用程序系统中通过网络通信实现函数和方法调用的能力时就需要Web Service。
任何一个平台都有各自的数据表示方法和类型数据库,为了保证每个平台都能够使用Web Service,Web service平台需要一套协议来实现分布式应用程序的创建。要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。目前这些协议有:XML和XSD、SOAP、WSDL、UDDI。
3.6 SOAP协议
SOAP是指简单对象访问协议,它是一种轻量的、简单的、易于扩展的、与平台和编程语言无关的基于XML的消息通信格式,用于在网络上、不同平台、不同语言的应用程序间的通信。
下面介绍一下SOAP的基本语法。在用于表示 SOAP消息的XML文档中,有一些必需和可选的元素。其中Envelope和Body元素是必需的。
? Envelope元素:它是SOAP消息文档根元素,用于表示一条SOAP消息。
? Header元素:表示该SOAP消息包含的头部消息标签,必须是Envelope元素的子元素。 ? Body元素:包含所有的调用和响应的主体信息的标签,该元素包含传递消息的内容。
? Fault元素:表示错误信息标签,必须是Body的子元素,且在一条SOAP消息中只能出现一次。 (1) 指定Web Service的命名空间、调用方法、URL /** 命名空间 */
10
private static final String NAMESPACE = \/** 获取天气的WebServiceURL */
private static String URL = \/** 调用方法 */
private static final String METHOD_NAME = \/** 命名空间+方法名 */
private static String SOAP_ACTION = \通过城市名字获
取天气
正文
(2) SoapObject对象的创建,它是SOAP协议的BODY。
// 实例化SoapObject对象
SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME); // 2.如果方法需要参数,设置参数
soapObject.addProperty(\
(3) 创建HTTPTransportsSE对象,指定超时时间
int timeout = 20000;
// 设置超时为20秒。即如果没有网络或者网络不好时,超过10秒则会出异常
MyAndroidHttpTransport httpTransportSE = new MyAndroidHttpTransport(URL, timeout); httpTransportSE.debug = true;
(4) 生成调用Web Service方法的SOAP请求信息,指定SOAP Version
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut = soapObject; envelope.dotNet = true;
envelope.setOutputSoapObject(soapObject);
(5) 使用call()方法调用Web Service()方法
httpTransportSE.call(SOAP_ACTION, envelope);
(6) 获取返回的结果
// 保存获取到的信息
SoapObject detail = null;
detail = (SoapObject) envelope.getResponse();// 获取详细天气信息
(7) 解析返回值
String[] weather = new String[12];// 一共有12组数据 String date=detail.getProperty(6).toString(); weather[0]=date.split(\ weather[1]=detail.getProperty(5).toString();//11/10 weather[2]=date.split(\阵雨转阴
weather[3]=detail.getProperty(7).toString();//无持续风向微风 weather[4]=detail.getProperty(8).toString();//2.gif
weather[5]=detail.getProperty(11).toString();//穿衣指数
3.7 HTTP POST请求
HTTP是Internet中广泛使用的协议,自然,Android SDK拥有强大的HTTP访问能力。在Android SDK中可以采用多种方式使用HTTP,如HttpURLConnection、HttpGet、HttpPost等。
HttpPost用来提交HTTP POST请求。使用HttpPost必须通过如下3步来访问HTTP资源。
11
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于Android平台开发生活小助手-毕业论文 - 图文(3)在线全文阅读。
相关推荐: