android权限大全

 
2011-12-21
缩略显示

Android Animation 动画效果介绍

    博客分类:
  • Android

 

Android Animation 动画效果介绍

 

Android的animation由四种类型组成
XML中

alpha 渐变透明度动画效果
scale 渐变尺寸伸缩动画效果
translate 画面转换位置移动动画效果
rotate 画面转移旋转动画效果



JavaCode中

AlphaAnimation 渐变透明度动画效果
ScaleAnimation 渐变尺寸伸缩动画效果
TranslateAnimation 画面转换位置移动动画效果
RotateAnimation 画面转移旋转动画效果


Android动画模式

Animation主要有两种动画模式:

一种是tweened animation(渐变动画)

XML中 JavaCode
alpha AlphaAnimation
scale ScaleAnimation



一种是frame by frame(画面转换动画)

XML中 JavaCode
translate TranslateAnimation
rotate RotateAnimation




如何在XML文件中定义动画

① 打开Eclipse,新建Android工程
② 在res目录中新建anim文件夹
③ 在anim目录中新建一个myanim.xml(注意文件名小写)
④ 加入XML的动画代码

 

Xml代码 复制代码
  1.   
  2.   
  3.   
  4.   
  5.   
  6.   
  7.   
 

 

 

Android动画解析--XML

 

Xml代码 复制代码
  1.   
  2.   
  3. android:fromAlpha="0.1"   
  4. android:toAlpha="1.0"   
  5. android:duration="3000"  
  6. />    
  7.   
android:toAlpha="1.0" android:duration="3000"/> 
 

 

 

 

 

Xml代码 复制代码
  1.   
  2.   
  3. android:interpolator=   
  4. "@android:anim/accelerate_decelerate_interpolator"  
  5. android:fromXScale="0.0"  
  6. android:toXScale="1.4"  
  7. android:fromYScale="0.0"  
  8. android:toYScale="1.4"  
  9. android:pivotX="50%"  
  10. android:pivotY="50%"  
  11. android:fillAfter="false"  
  12. android:duration="700" />  
  13.   
  14.   
 

 

 

 

 

Xml代码 复制代码
  1.   
  2.   
  3. android:fromXDelta="30"  
  4. android:toXDelta="-80"  
  5. android:fromYDelta="30"  
  6. android:toYDelta="300"  
  7. android:duration="2000"  
  8. />  
  9.   
  10.   
 

 

 

 

 

Xml代码 复制代码
  1.   
  2.   
  3. android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
  4. android:fromDegrees="0"    
  5. android:toDegrees="+350"    
  6. android:pivotX="50%"    
  7. android:pivotY="50%"    
  8. android:duration="3000" />    
  9.   
  10.   
 
 

 

 

 如何使用XML中的动画效果

 

Java代码 复制代码
  1. public static Animation loadAnimation (Context context, int id)    
  2. //第一个参数Context为程序的上下文    
  3. //第二个参数id为动画XML文件的引用   
  4. //例子:   
  5. myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);   
  6. //使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件  
public static Animation loadAnimation (Context context, int id) //第一个参数Context为程序的上下文 //第二个参数id为动画XML文件的引用//例子:myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);//使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件
 

 

 

 如何在Java代码中定义动画

 

Java代码 复制代码
  1. //在代码中定义 动画实例对象   
  2. private Animation myAnimation_Alpha;   
  3. private Animation myAnimation_Scale;   
  4. private Animation myAnimation_Translate;   
  5. private Animation myAnimation_Rotate;   
  6.   
  7. //根据各自的构造方法来初始化一个实例对象   
  8. myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);   
  9.   
  10. myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,   
  11. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);   
  12.   
  13. myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);   
  14.   
  15. myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,   
  16. Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);  
//在代码中定义 动画实例对象private Animation myAnimation_Alpha;private Animation myAnimation_Scale;private Animation myAnimation_Translate;private Animation myAnimation_Rotate;//根据各自的构造方法来初始化一个实例对象myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
 

 

 

 

Android动画解析--JavaCode

 

AlphaAnimation
① AlphaAnimation类对象定义

 

Java代码 复制代码
  1. private AlphaAnimation myAnimation_Alpha;  
private AlphaAnimation myAnimation_Alpha;
 

 

 

② AlphaAnimation类对象构造

 

Java代码 复制代码
  1. AlphaAnimation(float fromAlpha, float toAlpha)    
  2. //第一个参数fromAlpha为 动画开始时候透明度   
  3. //第二个参数toAlpha为 动画结束时候透明度   
  4. myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);   
  5. //说明:    
  6. // 0.0表示完全透明   
  7. // 1.0表示完全不透明  
AlphaAnimation(float fromAlpha, float toAlpha) //第一个参数fromAlpha为 动画开始时候透明度//第二个参数toAlpha为 动画结束时候透明度myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);//说明: // 0.0表示完全透明// 1.0表示完全不透明
 

 

 

 ③ 设置动画持续时间

 

Java代码 复制代码
  1. myAnimation_Alpha.setDuration(5000);   
  2. //设置时间持续时间为 5000毫秒  
myAnimation_Alpha.setDuration(5000);//设置时间持续时间为 5000毫秒
 

 

 ScaleAnimation

① ScaleAnimation类对象定义

 

Java代码 复制代码
  1. private AlphaAnimation myAnimation_Alpha;  
private AlphaAnimation myAnimation_Alpha;
 

 

② ScaleAnimation类对象构造

 

Java代码 复制代码
  1. ScaleAnimation(float fromX, float toX, float fromY, float toY,   
  2. int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)    
  3. //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸    
  4. //第二个参数toX为动画结束时 X坐标上的伸缩尺寸    
  5. //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸    
  6. //第四个参数toY为动画结束时Y坐标上的伸缩尺寸    
  7. /*说明:  
  8. 以上四种属性值   
  9. 0.0表示收缩到没有   
  10. 1.0表示正常无伸缩   
  11. 值小于1.0表示收缩   
  12. 值大于1.0表示放大  
  13. */  
  14. //第五个参数pivotXType为动画在X轴相对于物件位置类型    
  15. //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置   
  16. //第七个参数pivotXType为动画在Y轴相对于物件位置类型    
  17. //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置   
  18. myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,   
  19. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  
ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸 //第二个参数toX为动画结束时 X坐标上的伸缩尺寸 //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸 //第四个参数toY为动画结束时Y坐标上的伸缩尺寸 /*说明:以上四种属性值 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大*///第五个参数pivotXType为动画在X轴相对于物件位置类型 //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置//第七个参数pivotXType为动画在Y轴相对于物件位置类型 //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

 

 

③ 设置动画持续时间

 

Java代码 复制代码
  1. myAnimation_Scale.setDuration(700);   
  2. //设置时间持续时间为 700毫秒  
myAnimation_Scale.setDuration(700);//设置时间持续时间为 700毫秒
 

 

 TranslateAnimation

 

① TranslateAnimation类对象定义

 

Java代码 复制代码
  1. private AlphaAnimation myAnimation_Alpha;  
private AlphaAnimation myAnimation_Alpha;
 

 

② TranslateAnimation类对象构造

 

Java代码 复制代码
  1. TranslateAnimation(float fromXDelta, float toXDelta,   
  2. float fromYDelta, float toYDelta)    
  3. //第一个参数fromXDelta为动画起始时 X坐标上的移动位置    
  4. //第二个参数toXDelta为动画结束时 X坐标上的移动位置    
  5. //第三个参数fromYDelta为动画起始时Y坐标上的移动位置    
  6. //第四个参数toYDelta为动画结束时Y坐标上的移动位置   
TranslateAnimation(float fromXDelta, float toXDelta,float fromYDelta, float toYDelta) //第一个参数fromXDelta为动画起始时 X坐标上的移动位置 //第二个参数toXDelta为动画结束时 X坐标上的移动位置 //第三个参数fromYDelta为动画起始时Y坐标上的移动位置 //第四个参数toYDelta为动画结束时Y坐标上的移动位置 

 

③ 设置动画持续时间

 

Java代码 复制代码
  1. myAnimation_Translate.setDuration(2000);   
  2. //设置时间持续时间为 2000毫秒  
myAnimation_Translate.setDuration(2000);//设置时间持续时间为 2000毫秒

 

 RotateAnimation

 

① RotateAnimation类对象定义

 

Java代码 复制代码
  1. private AlphaAnimation myAnimation_Alpha;  
private AlphaAnimation myAnimation_Alpha;

② RotateAnimation类对象构造

 

Java代码 复制代码
  1. RotateAnimation(float fromDegrees, float toDegrees,    
  2. int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)   
  3. //第一个参数fromDegrees为动画起始时的旋转角度    
  4. //第二个参数toDegrees为动画旋转到的角度    
  5. //第三个参数pivotXType为动画在X轴相对于物件位置类型    
  6. //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置   
  7. //第五个参数pivotXType为动画在Y轴相对于物件位置类型    
  8. //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置   
  9. myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,   
  10. Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);  
RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)//第一个参数fromDegrees为动画起始时的旋转角度 //第二个参数toDegrees为动画旋转到的角度 //第三个参数pivotXType为动画在X轴相对于物件位置类型 //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置//第五个参数pivotXType为动画在Y轴相对于物件位置类型 //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

 

 ③ 设置动画持续时间

 

Java代码 复制代码
  1. myAnimation_Rotate.setDuration(3000);   
  2. //设置时间持续时间为 3000毫秒  
myAnimation_Rotate.setDuration(3000);//设置时间持续时间为 3000毫秒

 如何使用Java代码中的动画效果

 

使用从View父类继承过来的方法startAnimation()来为View或是子类View等等添加一个动画效果

 

 

Java代码 复制代码
  1. public void startAnimation (Animation animation)   
public void startAnimation (Animation animation) 
 

 

  • 00:58
  • 评论 / 浏览 (0 / 10)
  • 分类:移动开发
2011-12-02
缩略显示

Android ListView 去除底色、选中色、阴影

    博客分类:
  • Android

去除ListView滑到顶部和底部时边缘的黑色阴影:

Xml代码 复制代码
  1. android:fadingEdge="none"  
android:fadingEdge="none"

  

去除拖动时默认的黑色背景:

Xml代码 复制代码
  1. android:cacheColorHint="#00000000"  
android:cacheColorHint="#00000000"

 

去除选中时的黄色底色:

Xml代码 复制代码
  1. android:listSelector="#00000000"  
android:listSelector="#00000000"

去除行与行之间的黑线:

Java代码 复制代码
  1. msgList.setDivider(null);  
msgList.setDivider(null);

ListView刷新后自动滚到最底部:

Java代码 复制代码
  1. msgList.setSelection(msgList.getAdapter().getCount()-1);  
msgList.setSelection(msgList.getAdapter().getCount()-1);

 

  • 09:51
  • 评论 / 浏览 (0 / 41)
  • 分类:移动开发
2011-10-28
缩略显示

Eclipse全屏插件

    博客分类:
  • Eclipse
eclipse

是否感觉代码区域太小了?试试这个插件,下载后复制到Eclipse的plugins目录,重启后按Ctrl+Alt+Z看下效果

  • cn.pande.eclipsex.fullscreen.win32_1.0.6.jar (7 KB)
  • 下载次数: 3
  • 23:13
  • 评论 / 浏览 (0 / 21)
  • 分类:开源软件
2011-10-13
缩略显示

Android权限大全

    博客分类:
  • Android

Android权限大全

访问登记属性

android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限

获取错略位置

android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米

获取精确位置

android.permission.ACCESS_FINE_LOCATION,通过GPS芯片接收卫星的定位信息,定位精度达10米以内

访问定位额外命令

android.permission.ACCESS_LOCATION_EXTRA_COMMANDS,允许程序访问额外的定位提供者指令

获取模拟定位信息

android.permission.ACCESS_MOCK_LOCATION,获取模拟定位信息,一般用于帮助开发者调试应用

获取网络状态

android.permission.ACCESS_NETWORK_STATE,获取网络信息状态,如当前的网络连接是否有效

访问Surface Flinger

android.permission.ACCESS_SURFACE_FLINGER,Android平台上底层的图形显示支持,一般用于游戏或照相机预览界面和底层模式的屏幕截图

获取WiFi状态

android.permission.ACCESS_WIFI_STATE,获取当前WiFi接入的状态以及WLAN热点的信息

账户管理

android.permission.ACCOUNT_MANAGER,获取账户验证信息,主要为GMail账户信息,只有系统级进程才能访问的权限

验证账户

android.permission.AUTHENTICATE_ACCOUNTS,允许一个程序通过账户验证方式访问账户管理ACCOUNT_MANAGER相关信息

电量统计

android.permission.BATTERY_STATS,获取电池电量统计信息

绑定小插件

android.permission.BIND_APPWIDGET,允许一个程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限

绑定设备管理

android.permission.BIND_DEVICE_ADMIN,请求系统管理员接收者receiver,只有系统才能使用

绑定输入法

android.permission.BIND_INPUT_METHOD ,请求InputMethodService服务,只有系统才能使用

绑定RemoteView

android.permission.BIND_REMOTEVIEWS,必须通过RemoteViewsService服务来请求,只有系统才能用

绑定壁纸

android.permission.BIND_WALLPAPER,必须通过WallpaperService服务来请求,只有系统才能用

使用蓝牙

android.permission.BLUETOOTH,允许程序连接配对过的蓝牙设备

蓝牙管理

android.permission.BLUETOOTH_ADMIN,允许程序进行发现和配对新的蓝牙设备

变成砖头

android.permission.BRICK,能够禁用手机,非常危险,顾名思义就是让手机变成砖头

应用删除时广播

android.permission.BROADCAST_PACKAGE_REMOVED,当一个应用在删除时触发一个广播

收到短信时广播

android.permission.BROADCAST_SMS,当收到短信时触发一个广播

连续广播

android.permission.BROADCAST_STICKY,允许一个程序收到广播后快速收到下一个广播

WAP PUSH广播

android.permission.BROADCAST_WAP_PUSH,WAP PUSH服务收到后触发一个广播

拨打电话

android.permission.CALL_PHONE,允许程序从非系统拨号器里输入电话号码

通话权限

android.permission.CALL_PRIVILEGED,允许程序拨打电话,替换系统的拨号器界面

拍照权限

android.permission.CAMERA,允许访问摄像头进行拍照

改变组件状态

android.permission.CHANGE_COMPONENT_ENABLED_STATE,改变组件是否启用状态

改变配置

android.permission.CHANGE_CONFIGURATION,允许当前应用改变配置,如定位

改变网络状态

android.permission.CHANGE_NETWORK_STATE,改变网络状态如是否能联网

改变WiFi多播状态

android.permission.CHANGE_WIFI_MULTICAST_STATE,改变WiFi多播状态

改变WiFi状态

android.permission.CHANGE_WIFI_STATE,改变WiFi状态

清除应用缓存

android.permission.CLEAR_APP_CACHE,清除应用缓存

清除用户数据

android.permission.CLEAR_APP_USER_DATA,清除应用的用户数据

底层访问权限

android.permission.CWJ_GROUP,允许CWJ账户组访问底层信息

手机优化大师扩展权限

android.permission.CELL_PHONE_MASTER_EX,手机优化大师扩展权限

控制定位更新

android.permission.CONTROL_LOCATION_UPDATES,允许获得移动网络定位信息改变

删除缓存文件

android.permission.DELETE_CACHE_FILES,允许应用删除缓存文件

删除应用

android.permission.DELETE_PACKAGES,允许程序删除应用

电源管理

android.permission.DEVICE_POWER,允许访问底层电源管理

应用诊断

android.permission.DIAGNOSTIC,允许程序到RW到诊断资源

禁用键盘锁

android.permission.DISABLE_KEYGUARD,允许程序禁用键盘锁

转存系统信息

android.permission.DUMP,允许程序获取系统dump信息从系统服务

状态栏控制

android.permission.EXPAND_STATUS_BAR,允许程序扩展或收缩状态栏

工厂测试模式

android.permission.FACTORY_TEST,允许程序运行工厂测试模式

使用闪光灯

android.permission.FLASHLIGHT,允许访问闪光灯

强制后退

android.permission.FORCE_BACK,允许程序强制使用back后退按键,无论Activity是否在顶层

访问账户Gmail列表

android.permission.GET_ACCOUNTS,访问GMail账户列表

获取应用大小

android.permission.GET_PACKAGE_SIZE,获取应用的文件大小

获取任务信息

android.permission.GET_TASKS,允许程序获取当前或最近运行的应用

允许全局搜索

android.permission.GLOBAL_SEARCH,允许程序使用全局搜索功能

硬件测试

android.permission.HARDWARE_TEST,访问硬件辅助设备,用于硬件测试

注射事件

android.permission.INJECT_EVENTS,允许访问本程序的底层事件,获取按键、轨迹球的事件流

安装定位提供

android.permission.INSTALL_LOCATION_PROVIDER,安装定位提供

安装应用程序

android.permission.INSTALL_PACKAGES,允许程序安装应用

内部系统窗口

android.permission.INTERNAL_SYSTEM_WINDOW,允许程序打开内部窗口,不对第三方应用程序开放此权限

访问网络

android.permission.INTERNET,访问网络连接,可能产生GPRS流量

结束后台进程

android.permission.KILL_BACKGROUND_PROCESSES,允许程序调用killBackgroundProcesses(String).方法结束后台进程

管理账户

android.permission.MANAGE_ACCOUNTS,允许程序管理AccountManager中的账户列表

管理程序引用

android.permission.MANAGE_APP_TOKENS,管理创建、摧毁、Z轴顺序,仅用于系统

高级权限

android.permission.MTWEAK_USER,允许mTweak用户访问高级系统权限

社区权限

android.permission.MTWEAK_FORUM,允许使用mTweak社区权限

软格式化

android.permission.MASTER_CLEAR,允许程序执行软格式化,删除系统配置信息

修改声音设置

android.permission.MODIFY_AUDIO_SETTINGS,修改声音设置信息

修改电话状态

android.permission.MODIFY_PHONE_STATE,修改电话状态,如飞行模式,但不包含替换系统拨号器界面

格式化文件系统

android.permission.MOUNT_FORMAT_FILESYSTEMS,格式化可移动文件系统,比如格式化清空SD卡

挂载文件系统

android.permission.MOUNT_UNMOUNT_FILESYSTEMS,挂载、反挂载外部文件系统

允许NFC通讯

android.permission.NFC,允许程序执行NFC近距离通讯操作,用于移动支持

永久Activity

android.permission.PERSISTENT_ACTIVITY,创建一个永久的Activity,该功能标记为将来将被移除

处理拨出电话

android.permission.PROCESS_OUTGOING_CALLS,允许程序监视,修改或放弃播出电话

读取日程提醒

android.permission.READ_CALENDAR,允许程序读取用户的日程信息

读取联系人

android.permission.READ_CONTACTS,允许应用访问联系人通讯录信息

屏幕截图

android.permission.READ_FRAME_BUFFER,读取帧缓存用于屏幕截图

读取收藏夹和历史记录

com.android.browser.permission.READ_HISTORY_BOOKMARKS,读取浏览器收藏夹和历史记录

读取输入状态

android.permission.READ_INPUT_STATE,读取当前键的输入状态,仅用于系统

读取系统日志

android.permission.READ_LOGS,读取系统底层日志

读取电话状态

android.permission.READ_PHONE_STATE,访问电话状态

读取短信内容

android.permission.READ_SMS,读取短信内容

读取同步设置

android.permission.READ_SYNC_SETTINGS,读取同步设置,读取Google在线同步设置

读取同步状态

android.permission.READ_SYNC_STATS,读取同步状态,获得Google在线同步状态

重启设备

android.permission.REBOOT,允许程序重新启动设备

开机自动允许

android.permission.RECEIVE_BOOT_COMPLETED,允许程序开机自动运行

接收彩信

android.permission.RECEIVE_MMS,接收彩信

接收短信

android.permission.RECEIVE_SMS,接收短信

接收Wap Push

android.permission.RECEIVE_WAP_PUSH,接收WAP PUSH信息

录音

android.permission.RECORD_AUDIO,录制声音通过手机或耳机的麦克

排序系统任务

android.permission.REORDER_TASKS,重新排序系统Z轴运行中的任务

结束系统任务

android.permission.RESTART_PACKAGES,结束任务通过restartPackage(String)方法,该方式将在外来放弃

发送短信

android.permission.SEND_SMS,发送短信

设置Activity观察其

android.permission.SET_ACTIVITY_WATCHER,设置Activity观察器一般用于monkey测试

设置闹铃提醒

com.android.alarm.permission.SET_ALARM,设置闹铃提醒

设置总是退出

android.permission.SET_ALWAYS_FINISH,设置程序在后台是否总是退出

设置动画缩放

android.permission.SET_ANIMATION_SCALE,设置全局动画缩放

设置调试程序

android.permission.SET_DEBUG_APP,设置调试程序,一般用于开发

设置屏幕方向

android.permission.SET_ORIENTATION,设置屏幕方向为横屏或标准方式显示,不用于普通应用

设置应用参数

android.permission.SET_PREFERRED_APPLICATIONS,设置应用的参数,已不再工作具体查看addPackageToPreferred(String) 介绍

设置进程限制

android.permission.SET_PROCESS_LIMIT,允许程序设置最大的进程数量的限制

设置系统时间

android.permission.SET_TIME,设置系统时间

设置系统时区

android.permission.SET_TIME_ZONE,设置系统时区

设置桌面壁纸

android.permission.SET_WALLPAPER,设置桌面壁纸

设置壁纸建议

android.permission.SET_WALLPAPER_HINTS,设置壁纸建议

发送永久进程信号

android.permission.SIGNAL_PERSISTENT_PROCESSES,发送一个永久的进程信号

状态栏控制

android.permission.STATUS_BAR,允许程序打开、关闭、禁用状态栏

访问订阅内容

android.permission.SUBSCRIBED_FEEDS_READ,访问订阅信息的数据库

写入订阅内容

android.permission.SUBSCRIBED_FEEDS_WRITE,写入或修改订阅内容的数据库

显示系统窗口

android.permission.SYSTEM_ALERT_WINDOW,显示系统窗口

更新设备状态

android.permission.UPDATE_DEVICE_STATS,更新设备状态

使用证书

android.permission.USE_CREDENTIALS,允许程序请求验证从AccountManager

使用SIP视频

android.permission.USE_SIP,允许程序使用SIP视频服务

使用振动

android.permission.VIBRATE,允许振动

唤醒锁定

android.permission.WAKE_LOCK,允许程序在手机屏幕关闭后后台进程仍然运行

写入GPRS接入点设置

android.permission.WRITE_APN_SETTINGS,写入网络GPRS接入点设置

写入日程提醒

android.permission.WRITE_CALENDAR,写入日程,但不可读取

写入联系人

android.permission.WRITE_CONTACTS,写入联系人,但不可读取

写入外部存储

android.permission.WRITE_EXTERNAL_STORAGE,允许程序写入外部存储,如SD卡上写文件

写入Google地图数据

android.permission.WRITE_GSERVICES,允许程序写入Google Map服务数据

写入收藏夹和历史记录

com.android.browser.permission.WRITE_HISTORY_BOOKMARKS,写入浏览器历史记录或收藏夹,但不可读取

读写系统敏感设置

android.permission.WRITE_SECURE_SETTINGS,允许程序读写系统安全敏感的设置项

读写系统设置

android.permission.WRITE_SETTINGS,允许读写系统设置项

编写短信

android.permission.WRITE_SMS,允许编写短信

写入在线同步设置

android.permission.WRITE_SYNC_SETTINGS,写入Google在线同步设置

 

  • 18:47
  • 评论 / 浏览 (0 / 31)
  • 分类:移动开发
2011-10-11
缩略显示

Android多个Activity

    博客分类:
  • Android

使用多个Activity首先在AndroidManifest.xml文件中声明:

Xml代码 复制代码
  1.   

 

如有A和B两个Activity,由A打开B,并传递参数给B:

A Activity

Java代码 复制代码
  1. //打开 B Activity   
  2. Intent intent = new Intent(A.this, B.class);//为Intent设置要激活的组件   
  3. /*intent.putExtra("name", "小九九");  
  4. intent.putExtra("age", 26);*/  
  5. Bundle bundle = new Bundle();   
  6. bundle.putString("name", "小九九");   
  7. bundle.putInt("age", 26);   
  8. intent.putExtras(bundle);   
  9.   
  10. //写法一 intent.setClass(A.this, B.class);//设置要激活的组件   
  11. //写法二 intent.setComponent(new ComponentName(A.this, B.class));//设置要激活的组件   
  12. startActivity(intent);  
//打开 B ActivityIntent intent = new Intent(A.this, B.class);//为Intent设置要激活的组件/*intent.putExtra("name", "小九九");intent.putExtra("age", 26);*/Bundle bundle = new Bundle();bundle.putString("name", "小九九");bundle.putInt("age", 26);intent.putExtras(bundle);//写法一 intent.setClass(A.this, B.class);//设置要激活的组件//写法二 intent.setComponent(new ComponentName(A.this, B.class));//设置要激活的组件startActivity(intent);

B Activity 得到参数:

Java代码 复制代码
  1. Intent intent = this.getIntent();//得到激活它的Intent   
  2. String name = intent.getStringExtra("name");   
  3. int age = intent.getExtras().getInt("age");//第二种写法  
Intent intent = this.getIntent();//得到激活它的IntentString name = intent.getStringExtra("name");int age = intent.getExtras().getInt("age");//第二种写法

 

B 处理完后要返回结果给A 则不能使用startActivity(intent); 来启动B

而是startActivityForResult(intent, 100); 第二个参数为请求码。

同时A要重写onActivityResult 方法,该方法为系统自动调用。如:

A  Activity:

 

Java代码 复制代码
  1. public void onCreate(Bundle savedInstanceState) {   
  2.     Intent intent = new Intent(A.this, B.class);//为Intent设置要激活的组件   
  3.     /*intent.putExtra("name", "小九九");  
  4.     intent.putExtra("age", 26);*/  
  5.     Bundle bundle = new Bundle();   
  6.     bundle.putString("name", "小九九");   
  7.     bundle.putInt("age", 26);   
  8.     intent.putExtras(bundle);   
  9.     startActivityForResult(intent, 100);//第二个参数为设置的请求码   
  10. }   
  11.   
  12. @Override  
  13. protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
  14.     Toast.makeText(this, data.getStringExtra("result"), 1).show();//得到返回结果   
  15.     super.onActivityResult(requestCode, resultCode, data);   
  16. }  
public void onCreate(Bundle savedInstanceState) {	Intent intent = new Intent(A.this, B.class);//为Intent设置要激活的组件	/*intent.putExtra("name", "小九九");	intent.putExtra("age", 26);*/	Bundle bundle = new Bundle();	bundle.putString("name", "小九九");	bundle.putInt("age", 26);	intent.putExtras(bundle);	startActivityForResult(intent, 100);//第二个参数为设置的请求码}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {	Toast.makeText(this, data.getStringExtra("result"), 1).show();//得到返回结果	super.onActivityResult(requestCode, resultCode, data);}

 B  Activity:

 

Java代码 复制代码
  1. Intent intent = new Intent();   
  2. intent.putExtra("result", "这是处理结果");   
  3. setResult(20, intent);//设置返回数据   
  4. finish();//关闭activity  
Intent intent = new Intent();intent.putExtra("result", "这是处理结果");setResult(20, intent);//设置返回数据finish();//关闭activity

 

  • 00:34
  • 评论 / 浏览 (0 / 55)
  • 分类:移动开发
2011-10-09
缩略显示

Android Http Get/Post提交请求

    博客分类:
  • Android
Android Http

 

首先添加访问Internet权限:

Xml代码 复制代码
  1.   

 示例代码:

 

Java代码 复制代码
  1. public static boolean sendGetRequest(String path,    
  2.         Map params, String enc) throws Exception{   
  3.   
  4.     StringBuilder sb = new StringBuilder(path);   
  5.     sb.append('?');   
  6.     //?method=save&title=12345678&timelength=26&   
  7.     //迭代Map拼接请求参数   
  8.     for(Map.Entry entry : params.entrySet()){   
  9.         sb.append(entry.getKey()).append('=')   
  10.             .append(URLEncoder.encode(entry.getValue(), enc)).append('&');   
  11.     }   
  12.     sb.deleteCharAt(sb.length()-1);//删除最后一个"&"   
  13.        
  14.     URL url = new URL(sb.toString());   
  15.     HttpURLConnection conn = (HttpURLConnection)url.openConnection();   
  16.     conn.setRequestMethod("GET");   
  17.     conn.setConnectTimeout(5 * 1000);   
  18.     if(conn.getResponseCode()==200){   
  19.         return true;   
  20.     }   
  21.     return false;   
  22. }   
  23.   
  24. public static boolean sendPostRequest(String path,    
  25.         Map params, String enc) throws Exception{   
  26.        
  27.     // title=dsfdsf&timelength=23&method=save   
  28.     StringBuilder sb = new StringBuilder();   
  29.     if(params!=null && !params.isEmpty()){   
  30.         //迭代Map拼接请求参数   
  31.         for(Map.Entry entry : params.entrySet()){   
  32.             sb.append(entry.getKey()).append('=')   
  33.                 .append(URLEncoder.encode(entry.getValue(), enc)).append('&');   
  34.         }   
  35.         sb.deleteCharAt(sb.length()-1);//删除最后一个"&"   
  36.     }   
  37.     byte[] entitydata = sb.toString().getBytes();//得到实体的二进制数据   
  38.     URL url = new URL(path);   
  39.     HttpURLConnection conn = (HttpURLConnection)url.openConnection();   
  40.     conn.setRequestMethod("POST");   
  41.     conn.setConnectTimeout(5 * 1000);   
  42.     //如果通过post提交数据,必须设置允许对外输出数据   
  43.     conn.setDoOutput(true);   
  44.     //此两参数必须设置   
  45.     //Content-Type: application/x-www-form-urlencoded   
  46.     //Content-Length: 38   
  47.     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");   
  48.     conn.setRequestProperty("Content-Length", String.valueOf(entitydata.length));   
  49.     OutputStream outStream = conn.getOutputStream();   
  50.     outStream.write(entitydata);   
  51.     outStream.flush();   
  52.     outStream.close();   
  53.     if(conn.getResponseCode()==200){   
  54.         return true;   
  55.     }   
  56.     return false;   
  57. }   
  58.   
  59. //HttpClient组件  SSL HTTPS Cookie   
  60. public static boolean sendRequestFromHttpClient(String path,    
  61.         Map params, String enc) throws Exception{   
  62.   
  63.     List paramPairs = new ArrayList();   
  64.     if(params!=null && !params.isEmpty()){   
  65.         for(Map.Entry entry : params.entrySet()){   
  66.             paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));   
  67.         }   
  68.     }   
  69.     //得到经过编码过后的实体数据   
  70.     UrlEncodedFormEntity entitydata = new UrlEncodedFormEntity(paramPairs, enc);   
  71.     HttpPost post = new HttpPost(path); //form   
  72.     post.setEntity(entitydata);   
  73.     DefaultHttpClient client = new DefaultHttpClient(); //浏览器   
  74.     HttpResponse response = client.execute(post);//执行请求   
  75.     if(response.getStatusLine().getStatusCode()==200){   
  76.         return true;   
  77.     }   
  78.     return false;   
  79. }  
public static boolean sendGetRequest(String path, 		Map params, String enc) throws Exception{	StringBuilder sb = new StringBuilder(path);	sb.append('?');	//?method=save&title=12345678&timelength=26&	//迭代Map拼接请求参数	for(Map.Entry entry : params.entrySet()){		sb.append(entry.getKey()).append('=')			.append(URLEncoder.encode(entry.getValue(), enc)).append('&');	}	sb.deleteCharAt(sb.length()-1);//删除最后一个"&"		URL url = new URL(sb.toString());	HttpURLConnection conn = (HttpURLConnection)url.openConnection();	conn.setRequestMethod("GET");	conn.setConnectTimeout(5 * 1000);	if(conn.getResponseCode()==200){		return true;	}	return false;}public static boolean sendPostRequest(String path, 		Map params, String enc) throws Exception{		// title=dsfdsf&timelength=23&method=save	StringBuilder sb = new StringBuilder();	if(params!=null && !params.isEmpty()){		//迭代Map拼接请求参数		for(Map.Entry entry : params.entrySet()){			sb.append(entry.getKey()).append('=')				.append(URLEncoder.encode(entry.getValue(), enc)).append('&');		}		sb.deleteCharAt(sb.length()-1);//删除最后一个"&"	}	byte[] entitydata = sb.toString().getBytes();//得到实体的二进制数据	URL url = new URL(path);	HttpURLConnection conn = (HttpURLConnection)url.openConnection();	conn.setRequestMethod("POST");	conn.setConnectTimeout(5 * 1000);	//如果通过post提交数据,必须设置允许对外输出数据	conn.setDoOutput(true);	//此两参数必须设置	//Content-Type: application/x-www-form-urlencoded	//Content-Length: 38	conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");	conn.setRequestProperty("Content-Length", String.valueOf(entitydata.length));	OutputStream outStream = conn.getOutputStream();	outStream.write(entitydata);	outStream.flush();	outStream.close();	if(conn.getResponseCode()==200){		return true;	}	return false;}//HttpClient组件  SSL HTTPS Cookiepublic static boolean sendRequestFromHttpClient(String path, 		Map params, String enc) throws Exception{	List paramPairs = new ArrayList();	if(params!=null && !params.isEmpty()){		for(Map.Entry entry : params.entrySet()){			paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));		}	}	//得到经过编码过后的实体数据	UrlEncodedFormEntity entitydata = new UrlEncodedFormEntity(paramPairs, enc);	HttpPost post = new HttpPost(path); //form	post.setEntity(entitydata);	DefaultHttpClient client = new DefaultHttpClient(); //浏览器	HttpResponse response = client.execute(post);//执行请求	if(response.getStatusLine().getStatusCode()==200){		return true;	}	return false;}

 

 

单元测试:

 

Java代码 复制代码
  1. public void testSendGetRequest() throws Throwable{   
  2.     //?method=save&title=12345678&timelength=26   
  3.     Map params = new HashMap();   
  4.     params.put("method", "save");   
  5.     params.put("title", "yaku");   
  6.     params.put("timelength", "80");   
  7.        
  8.     HttpRequest.sendGetRequest("http://192.168.1.2:8080/webserver/server/manage.do", params, "UTF-8");   
  9. }   
  10.   
  11. public void testSendPostRequest() throws Throwable{   
  12.     Map params = new HashMap();   
  13.     params.put("method", "save");   
  14.     params.put("title", "胡汉三");   
  15.     params.put("timelength", "80");   
  16.        
  17.     HttpRequest.sendPostRequest("http://192.168.1.2:8080/webserver/server/manage.do", params, "UTF-8");   
  18. }   
  19.   
  20. public void testSendRequestFromHttpClient() throws Throwable{   
  21.     Map params = new HashMap();   
  22.     params.put("method", "save");   
  23.     params.put("title", "开天");   
  24.     params.put("timelength", "80");   
  25.        
  26.     HttpRequest.sendRequestFromHttpClient("http://192.168.1.2:8080/webserver/server/manage.do", params, "UTF-8");   
  27. }  
public void testSendGetRequest() throws Throwable{	//?method=save&title=12345678&timelength=26	Map params = new HashMap();	params.put("method", "save");	params.put("title", "yaku");	params.put("timelength", "80");		HttpRequest.sendGetRequest("http://192.168.1.2:8080/webserver/server/manage.do", params, "UTF-8");}public void testSendPostRequest() throws Throwable{	Map params = new HashMap();	params.put("method", "save");	params.put("title", "胡汉三");	params.put("timelength", "80");		HttpRequest.sendPostRequest("http://192.168.1.2:8080/webserver/server/manage.do", params, "UTF-8");}public void testSendRequestFromHttpClient() throws Throwable{	Map params = new HashMap();	params.put("method", "save");	params.put("title", "开天");	params.put("timelength", "80");		HttpRequest.sendRequestFromHttpClient("http://192.168.1.2:8080/webserver/server/manage.do", params, "UTF-8");}

 

  • 00:15
  • 评论 / 浏览 (0 / 86)
  • 分类:移动开发
2011-10-08
缩略显示

Android网络操作

    博客分类:
  • Android

Android访问网络操作。

首先在AndroidManifest.xml文件中添加网络权限

Xml代码 复制代码
  1.   

 业务类ImageServer.java:

根据指定的网络图片地址获取二进制数据

Java代码 复制代码
  1. package com.yaku.service;   
  2.   
  3. import java.io.ByteArrayOutputStream;   
  4. import java.io.InputStream;   
  5. import java.net.HttpURLConnection;   
  6. import java.net.URL;   
  7.   
  8. public class ImageServer {   
  9.     public static byte[] getImage(String path) throws Exception {   
  10.         //URL url = new URL("http://www.baidu.com/img/baidu_sylogo1.gif");   
  11.         URL url = new URL(path);   
  12.         HttpURLConnection conn = (HttpURLConnection)url.openConnection();   
  13.         conn.setRequestMethod("GET");   
  14.         conn.setConnectTimeout(5 * 1000);   
  15.         InputStream inStream = conn.getInputStream();//通过输入流获取图片数据   
  16.            
  17.         //获取网页上的数据,如HTML代码   
  18.         //byte[] data = readInputStream(inStream);//得到html的二进制数据   
  19.         //String html = new String(data, "gb2312");   
  20.            
  21.         return readInputStream(inStream);//得到图片的二进制数据   
  22.     }   
  23.        
  24.     /**  
  25.      * 从输入流中获取数据  
  26.      * @param inStream 输入流  
  27.      * @throws Exception  
  28.      */  
  29.     public static byte[] readInputStream(InputStream inStream) throws Exception{   
  30.         ByteArrayOutputStream outStream = new ByteArrayOutputStream();   
  31.         byte[] buffer = new byte[1024];   
  32.         int len = 0;   
  33.         while( (len=inStream.read(buffer)) != -1 ){   
  34.             outStream.write(buffer, 0, len);   
  35.         }   
  36.         inStream.close();   
  37.         return outStream.toByteArray();   
  38.     }   
  39. }  
package com.yaku.service;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class ImageServer {	public static byte[] getImage(String path) throws Exception {		//URL url = new URL("http://www.baidu.com/img/baidu_sylogo1.gif");		URL url = new URL(path);		HttpURLConnection conn = (HttpURLConnection)url.openConnection();		conn.setRequestMethod("GET");		conn.setConnectTimeout(5 * 1000);		InputStream inStream = conn.getInputStream();//通过输入流获取图片数据				//获取网页上的数据,如HTML代码		//byte[] data = readInputStream(inStream);//得到html的二进制数据		//String html = new String(data, "gb2312");				return readInputStream(inStream);//得到图片的二进制数据	}		/**	 * 从输入流中获取数据	 * @param inStream 输入流	 * @throws Exception	 */	public static byte[] readInputStream(InputStream inStream) throws Exception{		ByteArrayOutputStream outStream = new ByteArrayOutputStream();		byte[] buffer = new byte[1024];		int len = 0;		while( (len=inStream.read(buffer)) != -1 ){			outStream.write(buffer, 0, len);		}		inStream.close();		return outStream.toByteArray();	}}

 

 将图片显示在手机屏幕上HttpImageActivity.java:

Java代码 复制代码
  1. package com.yaku.http;   
  2.   
  3. import com.yaku.service.ImageServer;   
  4.   
  5. import android.app.Activity;   
  6. import android.graphics.Bitmap;   
  7. import android.graphics.BitmapFactory;   
  8. import android.os.Bundle;   
  9. import android.view.View;   
  10. import android.widget.Button;   
  11. import android.widget.EditText;   
  12. import android.widget.ImageView;   
  13. import android.widget.Toast;   
  14.   
  15. public class HttpImageActivity extends Activity {   
  16.     private EditText path;   
  17.     private ImageView image;   
  18.        
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {   
  21.         super.onCreate(savedInstanceState);   
  22.         setContentView(R.layout.main);   
  23.            
  24.         path = (EditText) this.findViewById(R.id.url);   
  25.         image = (ImageView) this.findViewById(R.id.image);   
  26.         Button button = (Button)this.findViewById(R.id.button);   
  27.         button.setOnClickListener(new View.OnClickListener() {   
  28.             @Override  
  29.             public void onClick(View v) {   
  30.                 String urlPath = path.getText().toString();   
  31.                 try {   
  32.                     byte[] data = ImageServer.getImage(urlPath);   
  33.                     //生成位图   
  34.                     Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);   
  35.                     image.setImageBitmap(bitmap);//显示图片                    
  36.                 } catch (Exception e) {   
  37.                     Toast.makeText(HttpImageActivity.this, R.string.error, 1).show();   
  38.                 }   
  39.             }   
  40.         });   
  41.     }   
  42. }  
package com.yaku.http;import com.yaku.service.ImageServer;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.Toast;public class HttpImageActivity extends Activity {    private EditText path;    private ImageView image;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                path = (EditText) this.findViewById(R.id.url);        image = (ImageView) this.findViewById(R.id.image);        Button button = (Button)this.findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {			@Override			public void onClick(View v) {				String urlPath = path.getText().toString();				try {					byte[] data = ImageServer.getImage(urlPath);					//生成位图					Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);					image.setImageBitmap(bitmap);//显示图片									} catch (Exception e) {					Toast.makeText(HttpImageActivity.this, R.string.error, 1).show();				}			}		});    }}

  

  • 00:21
  • 评论 / 浏览 (0 / 35)
  • 分类:移动开发
2011-10-05
缩略显示

Android共享数据ContentProvider的使用

    博客分类:
  • Android
Android ContentProvider

ContentProvider数据共享

1.首先在AndroidManifest.xml文件中添加对外暴露的数据共享接口Content

Xml代码 复制代码
  1.   

 ContentProvider采用了authorities(主机名/域名)对它进行唯一标识,authorities 就是他的域名

 

2.Url解析
content://com.yaku.ContentProvider.userprovider/user/2
【content://】 Android定义的内容提供都的Schema
【com.yaku.ContentProvider.userprovider】  主机名或者authorities
【user】  路径
【2】 ID

 

示例代码:

数据结构User.java:

Java代码 复制代码
  1. package com.yaku.pojo;   
  2.   
  3. public class User {   
  4.     private int id;   
  5.     private String name;   
  6.     private int age;   
  7.        
  8.     public User(int id, String name, int age) {   
  9.         super();   
  10.         this.id = id;   
  11.         this.name = name;   
  12.         this.age = age;   
  13.     }   
  14.     public int getId() {   
  15.         return id;   
  16.     }   
  17.     public void setId(int id) {   
  18.         this.id = id;   
  19.     }   
  20.     public String getName() {   
  21.         return name;   
  22.     }   
  23.     public void setName(String name) {   
  24.         this.name = name;   
  25.     }   
  26.     public int getAge() {   
  27.         return age;   
  28.     }   
  29.     public void setAge(int age) {   
  30.         this.age = age;   
  31.     }   
  32.     @Override  
  33.     public String toString() {   
  34.         return "User [age=" + age + ", id=" + id + ", name=" + name + "]";   
  35.     }   
  36. }  
package com.yaku.pojo;public class User {	private int id;	private String name;	private int age;		public User(int id, String name, int age) {		super();		this.id = id;		this.name = name;		this.age = age;	}	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	@Override	public String toString() {		return "User [age=" + age + ", id=" + id + ", name=" + name + "]";	}}

 

数据库操作DBOpenHelper.java:

Java代码 复制代码
  1. package com.yaku.db;   
  2.   
  3. import android.content.Context;   
  4. import android.database.sqlite.SQLiteDatabase;   
  5. import android.database.sqlite.SQLiteOpenHelper;   
  6.   
  7. public class DBOpenHelper extends SQLiteOpenHelper {   
  8.     private static final String DBNAME = "yaku.db"; //数据库名称   
  9.     private static final int DBVER = 1;//数据库版本   
  10.        
  11.     public DBOpenHelper(Context context) {   
  12.         super(context, DBNAME, null, DBVER);   
  13.     }   
  14.   
  15.     @Override  
  16.     public void onCreate(SQLiteDatabase db) {   
  17.         String sql = "CREATE TABLE user (userid integer primary key autoincrement, name varchar(20), age integer)";   
  18.         db.execSQL(sql);//执行有更改的sql语句   
  19.     }   
  20.   
  21.     @Override  
  22.     public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {   
  23.         db.execSQL("DROP TABLE IF EXISTS user");   
  24.         onCreate(db);   
  25.     }   
  26.   
  27. }  
package com.yaku.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper {	private static final String DBNAME = "yaku.db"; //数据库名称	private static final int DBVER = 1;//数据库版本		public DBOpenHelper(Context context) {		super(context, DBNAME, null, DBVER);	}	@Override	public void onCreate(SQLiteDatabase db) {		String sql = "CREATE TABLE user (userid integer primary key autoincrement, name varchar(20), age integer)";		db.execSQL(sql);//执行有更改的sql语句	}	@Override	public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {		db.execSQL("DROP TABLE IF EXISTS user");		onCreate(db);	}}

 

对外共享处理类ContentProviderUser.java:

Java代码 复制代码
  1. package com.yaku.ContentProvider;   
  2.   
  3. import com.yaku.db.DBOpenHelper;   
  4.   
  5. import android.content.ContentProvider;   
  6. import android.content.ContentUris;   
  7. import android.content.ContentValues;   
  8. import android.content.UriMatcher;   
  9. import android.database.Cursor;   
  10. import android.database.sqlite.SQLiteDatabase;   
  11. import android.net.Uri;   
  12.   
  13. public class ContentProviderUser extends ContentProvider {   
  14.     private DBOpenHelper dbOpenHelper;   
  15.     //常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码   
  16.     private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);   
  17.     private static final int USERS = 1;   
  18.     private static final int USER = 2;   
  19.     static{   
  20.         //如果match()方法匹配content://com.yaku.ContentProvider.userprovider/user路径,返回匹配码为1   
  21.         MATCHER.addURI("com.yaku.ContentProvider.userprovider", "user", USERS);   
  22.         //如果match()方法匹配content://com.yaku.ContentProvider.userprovider/user/123路径,返回匹配码为2   
  23.         MATCHER.addURI("com.yaku.ContentProvider.userprovider", "user/#", USER);//#号为通配符   
  24.     }      
  25.     @Override  
  26.     public int delete(Uri uri, String selection, String[] selectionArgs) {   
  27.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();   
  28.         int count = 0;   
  29.         switch (MATCHER.match(uri)) {   
  30.         case USERS:   
  31.             count = db.delete("user", selection, selectionArgs);   
  32.             return count;   
  33.         case USER:   
  34.             //ContentUris类用于获取Uri路径后面的ID部分   
  35.             long id = ContentUris.parseId(uri);   
  36.             String where = "userid = "+ id;   
  37.             if(selection!=null && !"".equals(selection)){   
  38.                 where = selection + " and " + where;   
  39.             }   
  40.             count = db.delete("user", where, selectionArgs);   
  41.             return count;   
  42.         default:   
  43.             throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());   
  44.         }   
  45.     }   
  46.   
  47.     /**  
  48.      * 该方法用于返回当前Url所代表数据的MIME类型。  
  49.      * 如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头  
  50.      * 如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头  
  51.      */  
  52.     @Override  
  53.     public String getType(Uri uri) {   
  54.         switch (MATCHER.match(uri)) {   
  55.         case USERS:            
  56.             return "vnd.android.cursor.dir/user";   
  57.                
  58.         case USER:             
  59.             return "vnd.android.cursor.item/user";   
  60.                
  61.         default:   
  62.             throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());   
  63.         }   
  64.     }   
  65.   
  66.     @Override  
  67.     public Uri insert(Uri uri, ContentValues values) {   
  68.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();   
  69.         switch (MATCHER.match(uri)) {   
  70.         case USERS:   
  71.             long rowid = db.insert("user", "name", values);    
  72.             Uri insertUri = ContentUris.withAppendedId(uri, rowid);//得到代表新增记录的Uri   
  73.             this.getContext().getContentResolver().notifyChange(uri, null);   
  74.             return insertUri;   
  75.   
  76.         default:   
  77.             throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());   
  78.         }   
  79.     }   
  80.   
  81.     @Override  
  82.     public boolean onCreate() {   
  83.         this.dbOpenHelper = new DBOpenHelper(this.getContext());   
  84.         return false;   
  85.     }   
  86.   
  87.     @Override  
  88.     public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,   
  89.             String sortOrder) {   
  90.         SQLiteDatabase db = dbOpenHelper.getReadableDatabase();   
  91.         switch (MATCHER.match(uri)) {   
  92.         case USERS:   
  93.             return db.query("user", projection, selection, selectionArgs, null, null, sortOrder);   
  94.         case USER:   
  95.             long id = ContentUris.parseId(uri);   
  96.             String where = "userid = "+ id;   
  97.             if(selection!=null && !"".equals(selection)){   
  98.                 where = selection + " and " + where;   
  99.             }   
  100.             return db.query("user", projection, where, selectionArgs, null, null, sortOrder);   
  101.         default:   
  102.             throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());   
  103.         }   
  104.     }   
  105.   
  106.     @Override  
  107.     public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {   
  108.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();   
  109.         int count = 0;   
  110.         switch (MATCHER.match(uri)) {   
  111.         case USERS:   
  112.             count = db.update("person", values, selection, selectionArgs);   
  113.             return count;   
  114.         case USER:   
  115.             long id = ContentUris.parseId(uri);   
  116.             String where = "userid = "+ id;   
  117.             if(selection!=null && !"".equals(selection)){   
  118.                 where = selection + " and " + where;   
  119.             }   
  120.             count = db.update("user", values, where, selectionArgs);   
  121.             return count;   
  122.         default:   
  123.             throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());   
  124.         }   
  125.     }   
  126. }  
package com.yaku.ContentProvider;import com.yaku.db.DBOpenHelper;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;public class ContentProviderUser extends ContentProvider {	private DBOpenHelper dbOpenHelper;	//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码	private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);	private static final int USERS = 1;	private static final int USER = 2;	static{		//如果match()方法匹配content://com.yaku.ContentProvider.userprovider/user路径,返回匹配码为1		MATCHER.addURI("com.yaku.ContentProvider.userprovider", "user", USERS);		//如果match()方法匹配content://com.yaku.ContentProvider.userprovider/user/123路径,返回匹配码为2		MATCHER.addURI("com.yaku.ContentProvider.userprovider", "user/#", USER);//#号为通配符	}		@Override	public int delete(Uri uri, String selection, String[] selectionArgs) {		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();		int count = 0;		switch (MATCHER.match(uri)) {		case USERS:			count = db.delete("user", selection, selectionArgs);			return count;		case USER:			//ContentUris类用于获取Uri路径后面的ID部分			long id = ContentUris.parseId(uri);			String where = "userid = "+ id;			if(selection!=null && !"".equals(selection)){				where = selection + " and " + where;			}			count = db.delete("user", where, selectionArgs);			return count;		default:			throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());		}	}	/**	 * 该方法用于返回当前Url所代表数据的MIME类型。	 * 如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头	 * 如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头	 */	@Override	public String getType(Uri uri) {		switch (MATCHER.match(uri)) {		case USERS:						return "vnd.android.cursor.dir/user";					case USER:						return "vnd.android.cursor.item/user";					default:			throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());		}	}	@Override	public Uri insert(Uri uri, ContentValues values) {		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();		switch (MATCHER.match(uri)) {		case USERS:			long rowid = db.insert("user", "name", values); 			Uri insertUri = ContentUris.withAppendedId(uri, rowid);//得到代表新增记录的Uri			this.getContext().getContentResolver().notifyChange(uri, null);			return insertUri;		default:			throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());		}	}	@Override	public boolean onCreate() {		this.dbOpenHelper = new DBOpenHelper(this.getContext());		return false;	}	@Override	public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,			String sortOrder) {		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();		switch (MATCHER.match(uri)) {		case USERS:			return db.query("user", projection, selection, selectionArgs, null, null, sortOrder);		case USER:			long id = ContentUris.parseId(uri);			String where = "userid = "+ id;			if(selection!=null && !"".equals(selection)){				where = selection + " and " + where;			}			return db.query("user", projection, where, selectionArgs, null, null, sortOrder);		default:			throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());		}	}	@Override	public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();		int count = 0;		switch (MATCHER.match(uri)) {		case USERS:			count = db.update("person", values, selection, selectionArgs);			return count;		case USER:			long id = ContentUris.parseId(uri);			String where = "userid = "+ id;			if(selection!=null && !"".equals(selection)){				where = selection + " and " + where;			}			count = db.update("user", values, where, selectionArgs);			return count;		default:			throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());		}	}}

 

单元测试类(在另一个应用中):

 

Java代码 复制代码
  1. package com.yaku.ContentProvider;   
  2.   
  3. import android.content.ContentResolver;   
  4. import android.content.ContentValues;   
  5. import android.database.Cursor;   
  6. import android.net.Uri;   
  7. import android.test.AndroidTestCase;   
  8. import android.util.Log;   
  9.   
  10. /**  
  11.  * 对ContentProvider工程中的ContentProviderActivity进行单元测试  
  12.  */  
  13. public class ContentProviderActivityTest extends AndroidTestCase {   
  14.     private static final String TAG = "ContentProvider";   
  15.     //往内容提供者添加数据   
  16.     public void testInsert() throws Throwable{   
  17.         ContentResolver contentResolver = this.getContext().getContentResolver();   
  18.         Uri insertUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");   
  19.         ContentValues values = new ContentValues();   
  20.         values.put("name", "道长");   
  21.         values.put("age", 86);   
  22.         Uri uri = contentResolver.insert(insertUri, values);   
  23.         Log.i(TAG, uri.toString());   
  24.     }   
  25.        
  26.     //更新内容提供者中的数据   
  27.     public void testUpdate() throws Throwable{   
  28.         ContentResolver contentResolver = this.getContext().getContentResolver();   
  29.         Uri updateUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user/1");   
  30.         ContentValues values = new ContentValues();   
  31.         values.put("name", "青眉道长");   
  32.         contentResolver.update(updateUri, values, null, null);   
  33.     }   
  34.        
  35.     //从内容提供者中删除数据   
  36.     public void testDelete() throws Throwable{   
  37.         ContentResolver contentResolver = this.getContext().getContentResolver();   
  38.         Uri deleteUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user/1");   
  39.         contentResolver.delete(deleteUri, null, null);   
  40.     }   
  41.        
  42.     //获取内容提供者中的数据   
  43.     public void testFind() throws Throwable{   
  44.         ContentResolver contentResolver = this.getContext().getContentResolver();   
  45.         Uri selectUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");   
  46.         Cursor cursor = contentResolver.query(selectUri, null, null, null, "userid desc");   
  47.         while(cursor.moveToNext()){   
  48.             int id = cursor.getInt(cursor.getColumnIndex("userid"));   
  49.             String name = cursor.getString(cursor.getColumnIndex("name"));   
  50.             int age = cursor.getInt(cursor.getColumnIndex("age"));   
  51.             Log.i(TAG, "id="+ id + ",name="+ name+ ",age="+ age);   
  52.         }   
  53.     }   
  54.        
  55. }  
package com.yaku.ContentProvider;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;import android.util.Log;/** * 对ContentProvider工程中的ContentProviderActivity进行单元测试 */public class ContentProviderActivityTest extends AndroidTestCase {	private static final String TAG = "ContentProvider";	//往内容提供者添加数据	public void testInsert() throws Throwable{		ContentResolver contentResolver = this.getContext().getContentResolver();		Uri insertUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");		ContentValues values = new ContentValues();		values.put("name", "道长");		values.put("age", 86);		Uri uri = contentResolver.insert(insertUri, values);		Log.i(TAG, uri.toString());	}		//更新内容提供者中的数据	public void testUpdate() throws Throwable{		ContentResolver contentResolver = this.getContext().getContentResolver();		Uri updateUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user/1");		ContentValues values = new ContentValues();		values.put("name", "青眉道长");		contentResolver.update(updateUri, values, null, null);	}		//从内容提供者中删除数据	public void testDelete() throws Throwable{		ContentResolver contentResolver = this.getContext().getContentResolver();		Uri deleteUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user/1");		contentResolver.delete(deleteUri, null, null);	}		//获取内容提供者中的数据	public void testFind() throws Throwable{		ContentResolver contentResolver = this.getContext().getContentResolver();		Uri selectUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");		Cursor cursor = contentResolver.query(selectUri, null, null, null, "userid desc");		while(cursor.moveToNext()){			int id = cursor.getInt(cursor.getColumnIndex("userid"));			String name = cursor.getString(cursor.getColumnIndex("name"));			int age = cursor.getInt(cursor.getColumnIndex("age"));			Log.i(TAG, "id="+ id + ",name="+ name+ ",age="+ age);		}	}	}

 

监听数据的变化:

Java代码 复制代码
  1. package com.yaku.ContentProvider;   
  2.   
  3. import android.content.ContentResolver;   
  4. import android.content.ContentValues;   
  5. import android.database.Cursor;   
  6. import android.net.Uri;   
  7. import android.test.AndroidTestCase;   
  8. import android.util.Log;   
  9.   
  10. /**  
  11.  * 监听数据变化  
  12.  */  
  13. public class OtherContentProviderTest extends AndroidTestCase {   
  14.     private static final String TAG = "OtherContentProvider";   
  15.        
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {   
  18.         super.onCreate(savedInstanceState);   
  19.         setContentView(R.layout.main);   
  20.            
  21.         Uri insertUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");   
  22.         ContentResolver contentResolver = this.getContentResolver();   
  23.         //对指定uri进行监听,如果该uri代表的数据发生变化,就会调用PersonObserver中的onChange()   
  24.         contentResolver.registerContentObserver(insertUri, true, new PersonObserver(new Handler()));   
  25.     }   
  26.        
  27.     private final class PersonObserver extends ContentObserver{   
  28.         public PersonObserver(Handler handler) {   
  29.             super(handler);   
  30.         }   
  31.   
  32.         @Override  
  33.         public void onChange(boolean selfChange) {   
  34.             ContentResolver contentResolver = getContentResolver();   
  35.             Uri selectUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");   
  36.             Cursor cursor = contentResolver.query(selectUri, null, null, null, "userid desc");   
  37.             while(cursor.moveToNext()){   
  38.                 int id = cursor.getInt(cursor.getColumnIndex("userid"));   
  39.                 String name = cursor.getString(cursor.getColumnIndex("name"));   
  40.                 int age = cursor.getInt(cursor.getColumnIndex("age"));   
  41.                 Log.i(TAG, "id="+ id + ",name="+ name+ ",age="+ age);   
  42.             }   
  43.         }   
  44.     }   
  45. }   
  46.   
package com.yaku.ContentProvider;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;import android.util.Log;/** * 监听数据变化 */public class OtherContentProviderTest extends AndroidTestCase {	private static final String TAG = "OtherContentProvider";        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                Uri insertUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");        ContentResolver contentResolver = this.getContentResolver();        //对指定uri进行监听,如果该uri代表的数据发生变化,就会调用PersonObserver中的onChange()        contentResolver.registerContentObserver(insertUri, true, new PersonObserver(new Handler()));    }        private final class PersonObserver extends ContentObserver{		public PersonObserver(Handler handler) {			super(handler);		}		@Override		public void onChange(boolean selfChange) {			ContentResolver contentResolver = getContentResolver();			Uri selectUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");			Cursor cursor = contentResolver.query(selectUri, null, null, null, "userid desc");			while(cursor.moveToNext()){				int id = cursor.getInt(cursor.getColumnIndex("userid"));				String name = cursor.getString(cursor.getColumnIndex("name"));				int age = cursor.getInt(cursor.getColumnIndex("age"));				Log.i(TAG, "id="+ id + ",name="+ name+ ",age="+ age);			}		}    }}

 

  • 03:51
  • 评论 / 浏览 (0 / 63)
  • 分类:移动开发
2011-10-05
缩略显示

Android数据存储SharedPreferences的使用

    博客分类:
  • Android
Android SharedPreferences

SharedPreferences配置文件为XML文件,路径:/data/data//shared_prefs目录下

关键代码:

Java代码 复制代码
  1. //第一个参数用于指定该文件的名称,第二个参数指定文件的操作模式,共有四种操作模式。   
  2. //如果希望生成的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。   
  3. //另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。   
  4. SharedPreferences perferences = getSharedPreferences("yaku", Context.MODE_PRIVATE);     
  5. Editor edit = perferences.edit();//获得编辑器   
  6. edit.putString("name", "我是内容");     
  7. edit.putInt("age", 20);     
  8. edit.commit();//提交内容  
//第一个参数用于指定该文件的名称,第二个参数指定文件的操作模式,共有四种操作模式。//如果希望生成的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。//另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。SharedPreferences perferences = getSharedPreferences("yaku", Context.MODE_PRIVATE);  Editor edit = perferences.edit();//获得编辑器edit.putString("name", "我是内容");  edit.putInt("age", 20);  edit.commit();//提交内容

获取数据:

Java代码 复制代码
  1. SharedPreferences preference = getSharedPreferences("yaku", Context.MODE_PRIVATE);     
  2. String nameStr = preference.getString("name", "");//如果取不到值就取值后面的参数      
  3. int ageStr = preference.getInt("age", 0);     
  4.   
  5. //其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference    
  6. Context context = createPackageContext("cn.yaku.action", Context.CONTEXT_IGNORE_SECURITY);   
  7. SharedPreferences perferences = context.getSharedPreferences("yaku", Context.MODE_WORLD_READABLE);   
  8. String name = perferences.getString("name", "");   
  9. int age = perferences.getInt("age", 0);   
  10.   
  11. //如果不通过创建Context访问其他应用的preference,也可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:    
  12. File xmlFile = new File("/data/data//shared_prefs/yaku.xml");  
SharedPreferences preference = getSharedPreferences("yaku", Context.MODE_PRIVATE);  String nameStr = preference.getString("name", "");//如果取不到值就取值后面的参数   int ageStr = preference.getInt("age", 0);  //其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference Context context = createPackageContext("cn.yaku.action", Context.CONTEXT_IGNORE_SECURITY);SharedPreferences perferences = context.getSharedPreferences("yaku", Context.MODE_WORLD_READABLE);String name = perferences.getString("name", "");int age = perferences.getInt("age", 0);//如果不通过创建Context访问其他应用的preference,也可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如: File xmlFile = new File("/data/data//shared_prefs/yaku.xml");

 示例代码:

 

Java代码 复制代码
  1. package com.yaku.SharedPreferences;   
  2.   
  3. import com.yaku.test.R;   
  4.   
  5. import android.app.Activity;   
  6. import android.content.Context;   
  7. import android.content.SharedPreferences;   
  8. import android.content.SharedPreferences.Editor;   
  9. import android.os.Bundle;   
  10. import android.view.View;   
  11. import android.view.View.OnClickListener;   
  12. import android.widget.Button;   
  13. import android.widget.EditText;   
  14. import android.widget.Toast;   
  15.   
  16. /**  
  17.  * SharedPerferences的使用  
  18.  * @author Administrator  
  19.  */  
  20. public class ShareActivity extends Activity {   
  21.     private EditText name;   
  22.     private EditText age;   
  23.     private Button sure;   
  24.     private Button recover;   
  25.     private Button clear;   
  26.     protected void onCreate(Bundle savedInstanceState) {   
  27.         // TODO Auto-generated method stub   
  28.         super.onCreate(savedInstanceState);   
  29.         setContentView(R.layout.sharedperference);   
  30.            
  31.         name = (EditText)findViewById(R.id.name);   
  32.         age = (EditText)findViewById(R.id.age);   
  33.         sure = (Button)findViewById(R.id.sure);   
  34.         recover = (Button)findViewById(R.id.recover);   
  35.         clear = (Button)findViewById(R.id.clear);   
  36.         //保存信息到yaku.xml文件   
  37.         sure.setOnClickListener(new OnClickListener() {   
  38.             @Override  
  39.             public void onClick(View v) {   
  40.                 String nameStr = name.getText().toString();   
  41.                 String ageStr = age.getText().toString();   
  42.                 if(!"".equals(nameStr)&&nameStr!=null && !"".equals(ageStr)&&ageStr!=null){   
  43.                     SharedPreferences perferences = getSharedPreferences("yaku", Context.MODE_PRIVATE);   
  44.                     Editor edit = perferences.edit();   
  45.                     edit.putString("name", nameStr);   
  46.                     edit.putInt("age", Integer.parseInt(ageStr));   
  47.                     edit.commit();   
  48.                     Toast.makeText(ShareActivity.this, "OK", 0).show();   
  49.                 }   
  50.             }   
  51.         });   
  52.         //恢复保存的数据   
  53.         recover.setOnClickListener(new OnClickListener() {   
  54.             @Override  
  55.             public void onClick(View v) {   
  56.                 SharedPreferences preference = getSharedPreferences("yaku", Context.MODE_PRIVATE);   
  57.                 String nameStr = preference.getString("name", "");//如果取不到值就取值后面的参数   
  58.                 int ageStr = preference.getInt("age", 0);   
  59.                 name.setText(nameStr);   
  60.                 age.setText(String.valueOf(ageStr));   
  61.             }   
  62.         });   
  63.         //清除数据   
  64.         clear.setOnClickListener(new OnClickListener() {   
  65.             @Override  
  66.             public void onClick(View v) {   
  67.                 name.setText(null);   
  68.                 age.setText(null);   
  69.             }   
  70.         });   
  71.     }   
  72. }  
package com.yaku.SharedPreferences;import com.yaku.test.R;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;/** * SharedPerferences的使用 * @author Administrator */public class ShareActivity extends Activity {	private EditText name;	private EditText age;	private Button sure;	private Button recover;	private Button clear;	protected void onCreate(Bundle savedInstanceState) {		// TODO Auto-generated method stub		super.onCreate(savedInstanceState);		setContentView(R.layout.sharedperference);				name = (EditText)findViewById(R.id.name);		age = (EditText)findViewById(R.id.age);		sure = (Button)findViewById(R.id.sure);		recover = (Button)findViewById(R.id.recover);		clear = (Button)findViewById(R.id.clear);		//保存信息到yaku.xml文件		sure.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				String nameStr = name.getText().toString();				String ageStr = age.getText().toString();				if(!"".equals(nameStr)&&nameStr!=null && !"".equals(ageStr)&&ageStr!=null){					SharedPreferences perferences = getSharedPreferences("yaku", Context.MODE_PRIVATE);					Editor edit = perferences.edit();					edit.putString("name", nameStr);					edit.putInt("age", Integer.parseInt(ageStr));					edit.commit();					Toast.makeText(ShareActivity.this, "OK", 0).show();				}			}		});		//恢复保存的数据		recover.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				SharedPreferences preference = getSharedPreferences("yaku", Context.MODE_PRIVATE);				String nameStr = preference.getString("name", "");//如果取不到值就取值后面的参数				int ageStr = preference.getInt("age", 0);				name.setText(nameStr);				age.setText(String.valueOf(ageStr));			}		});		//清除数据		clear.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				name.setText(null);				age.setText(null);			}		});	}}

 

  • 01:39
  • 评论 / 浏览 (0 / 68)
  • 分类:移动开发
2011-09-05
缩略显示

JDBC连接数据库

    博客分类:
  • JDBC
JDBC

JDBC连接工厂类ConnectionFactory

Java代码 复制代码
  1. package com.yaku.util;   
  2.   
  3. import java.io.InputStream;   
  4. import java.sql.Connection;   
  5. import java.sql.DriverManager;   
  6. import java.sql.SQLException;   
  7. import java.util.Properties;   
  8.   
  9. import javax.naming.Context;   
  10. import javax.naming.InitialContext;   
  11. import javax.sql.DataSource;   
  12.   
  13. /**  
  14.  * 数据库连接工厂类,专门取得数据连接的  
  15.  * @author hery  
  16.  */  
  17. public class ConnectionFactory {   
  18.     private static Properties config = new Properties();   
  19.     static {   
  20.         InputStream in = ConnectionFactory.class.getResourceAsStream("db-config.properties");   
  21.         if (in == null) {   
  22.             throw new RuntimeException("not found the DBConfig file");   
  23.         }   
  24.         try {   
  25.             config.load(in);   
  26.             in.close();   
  27.         } catch (Exception e) {   
  28.             e.printStackTrace();   
  29.             throw new ExceptionInInitializerError("the file load fail!");   
  30.         }   
  31.     }   
  32.   
  33.     public static Connection getDirectConnection() {   
  34.         Connection con = null;   
  35.         String jdbcDriver = null;   
  36.         String jdbcUrl = null;   
  37.         String userName = null;   
  38.         String password = null;   
  39.         try {   
  40.             jdbcDriver = config.getProperty("drivername");   
  41.             jdbcUrl = config.getProperty("jdbcurl");   
  42.             userName = config.getProperty("username");   
  43.             password = config.getProperty("password");   
  44.             // Class.forName("oracle.jdbc.driver.OracleDriver");   
  45.             Class.forName(jdbcDriver);   
  46.             // con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.13:1521:sta","sta01","sta02");   
  47.             con = DriverManager.getConnection(jdbcUrl, userName, password);   
  48.         } catch (ClassNotFoundException e) {   
  49.             e.printStackTrace();   
  50.         } catch (SQLException e) {   
  51.             e.printStackTrace();   
  52.         }   
  53.         return con;   
  54.     }   
  55.   
  56.     public static Connection getJNDIConnection() {   
  57.         Connection con = null;   
  58.         String jndiName = config.getProperty("jndiName");   
  59.         try {   
  60.             Context context = new InitialContext();   
  61.             DataSource ds = (DataSource) context.lookup("java:comp/env/"  
  62.                     + jndiName);   
  63.             con = ds.getConnection();   
  64.         } catch (Exception e) {   
  65.             e.printStackTrace();   
  66.         }   
  67.         return con;   
  68.     }   
  69.   
  70.     public static Connection getConnection() throws SQLException {   
  71.         Connection con = null;   
  72.         if (config.getProperty("jndiName") != null) {   
  73.             try {   
  74.                 con = getJNDIConnection();   
  75.             } catch (Exception e) {   
  76.                 e.printStackTrace();   
  77.             }   
  78.   
  79.             if (con == null) {   
  80.                 con = getDirectConnection();   
  81.             }   
  82.         } else {   
  83.             con = getDirectConnection();   
  84.         }   
  85.   
  86.         return con;   
  87.     }   
  88.   
  89.     @SuppressWarnings("static-access")   
  90.     public static void main(String args[]) throws SQLException {   
  91.         ConnectionFactory cf = new ConnectionFactory();   
  92.         System.out.println(cf.getConnection());   
  93.     }   
  94. }  
package com.yaku.util;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Properties;import javax.naming.Context;import javax.naming.InitialContext;import javax.sql.DataSource;/** * 数据库连接工厂类,专门取得数据连接的 * @author hery */public class ConnectionFactory {	private static Properties config = new Properties();	static {		InputStream in = ConnectionFactory.class.getResourceAsStream("db-config.properties");		if (in == null) {			throw new RuntimeException("not found the DBConfig file");		}		try {			config.load(in);			in.close();		} catch (Exception e) {			e.printStackTrace();			throw new ExceptionInInitializerError("the file load fail!");		}	}	public static Connection getDirectConnection() {		Connection con = null;		String jdbcDriver = null;		String jdbcUrl = null;		String userName = null;		String password = null;		try {			jdbcDriver = config.getProperty("drivername");			jdbcUrl = config.getProperty("jdbcurl");			userName = config.getProperty("username");			password = config.getProperty("password");			// Class.forName("oracle.jdbc.driver.OracleDriver");			Class.forName(jdbcDriver);			// con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.13:1521:sta","sta01","sta02");			con = DriverManager.getConnection(jdbcUrl, userName, password);		} catch (ClassNotFoundException e) {			e.printStackTrace();		} catch (SQLException e) {			e.printStackTrace();		}		return con;	}	public static Connection getJNDIConnection() {		Connection con = null;		String jndiName = config.getProperty("jndiName");		try {			Context context = new InitialContext();			DataSource ds = (DataSource) context.lookup("java:comp/env/"					+ jndiName);			con = ds.getConnection();		} catch (Exception e) {			e.printStackTrace();		}		return con;	}	public static Connection getConnection() throws SQLException {		Connection con = null;		if (config.getProperty("jndiName") != null) {			try {				con = getJNDIConnection();			} catch (Exception e) {				e.printStackTrace();			}			if (con == null) {				con = getDirectConnection();			}		} else {			con = getDirectConnection();		}		return con;	}	@SuppressWarnings("static-access")	public static void main(String args[]) throws SQLException {		ConnectionFactory cf = new ConnectionFactory();		System.out.println(cf.getConnection());	}}

 JDBC关闭工厂类CloseUtil

Java代码 复制代码
  1. package com.yaku.util;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.ResultSet;   
  5. import java.sql.SQLException;   
  6. import java.sql.Statement;   
  7.   
  8. public class CloseUtil {   
  9.     public static void close(Statement st, Connection con) {   
  10.         if (st != null) {   
  11.             try {   
  12.                 st.close();   
  13.             } catch (SQLException e) {   
  14.                 e.printStackTrace();   
  15.             }   
  16.         }   
  17.         if (con != null) {   
  18.             try {   
  19.                 con.close();   
  20.             } catch (SQLException e) {   
  21.                 e.printStackTrace();   
  22.             }   
  23.         }   
  24.     }   
  25.   
  26.     public static void close(ResultSet rs, Statement st, Connection con) {   
  27.         if (rs != null) {   
  28.             try {   
  29.                 rs.close();   
  30.             } catch (SQLException e) {   
  31.                 e.printStackTrace();   
  32.             }   
  33.         }   
  34.         close(st, con);   
  35.     }   
  36. }  
package com.yaku.util;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class CloseUtil {	public static void close(Statement st, Connection con) {		if (st != null) {			try {				st.close();			} catch (SQLException e) {				e.printStackTrace();			}		}		if (con != null) {			try {				con.close();			} catch (SQLException e) {				e.printStackTrace();			}		}	}	public static void close(ResultSet rs, Statement st, Connection con) {		if (rs != null) {			try {				rs.close();			} catch (SQLException e) {				e.printStackTrace();			}		}		close(st, con);	}}

 配置文件db-config.properties

Java代码 复制代码
  1. drivername = com.microsoft.sqlserver.jdbc.SQLServerDriver   
  2. jdbcurl = jdbc:sqlserver://192.168.1.2:1433;DatabaseName=Test   
  3. username = sa   
  4. password =sa  
drivername = com.microsoft.sqlserver.jdbc.SQLServerDriverjdbcurl = jdbc:sqlserver://192.168.1.2:1433;DatabaseName=Testusername = sapassword =sa

 

  • 11:36
  • 评论 / 浏览 (0 / 27)
  • 分类:编程语言
2011-09-02
缩略显示

Eclipse get/set方法自动加上字段注释

    博客分类:
  • Eclipse

编码的时候通常要用到 JavaBean ,而在我们经常把注释写在字段上面,但生成的Get/Set方法不会生成,通过修改Eclipse源码可解决,直接上例子:

Java代码 复制代码
  1. /**  
  2.  * 员工ID  
  3.  */  
  4. private String userid;   
  5. /**  
  6.  * 获取员工ID  
  7.  * @return userid 员工ID  
  8.  */  
  9. public String getUserid() {   
  10.     return userid;   
  11. }   
  12. /**  
  13.  * 设置员工ID  
  14.  * @param userid 员工ID  
  15.  */  
  16. public void setUserid(String userid) {   
  17.     this.userid = userid;   
  18. }  
/** * 员工ID */private String userid;/** * 获取员工ID * @return userid 员工ID */public String getUserid() {	return userid;}/** * 设置员工ID * @param userid 员工ID */public void setUserid(String userid) {	this.userid = userid;}

 

找到Eclipse中Jar包:org.eclipse.jdt.ui_*.jar,进行备份

然后将后缀Jar改为rar,

找到org.eclipse.jdt.internal.corext.codemanipulation.GetterSetterUtil.class
直接用附件中的class文件进行替换,再将后缀改为Jar替换Eclipse的Jar包,

重启Eclipse设置注释风格:

Window->Preferences->Java->CodeStyle->Code Templates->Comments->Getters/Setters

Getters:

Java代码 复制代码
  1. /**  
  2.  * 获取${bare_field_name}  
  3.  * @return ${bare_field_name} ${bare_field_name}  
  4.  */  
/** * 获取${bare_field_name} * @return ${bare_field_name} ${bare_field_name} */

 

Setters:

Java代码 复制代码
  1. /**  
  2.  * 设置${bare_field_name}  
  3.  * @param ${bare_field_name} ${bare_field_name}  
  4.  */  
/** * 设置${bare_field_name} * @param ${bare_field_name} ${bare_field_name} */

 

注意:生成Get/Set方法时勾选上Generate method comments

OK,成功。

在Eclipse3.3/3.4/3.5 测试成功,若无用则还原Jar包,找到对应版本源码进行修改。

  • GetterSetterUtil.rar (9.1 KB)
  • 下载次数: 18
  • GetterSetterUtil_Eclipse3.5.rar (9.8 KB)
  • 下载次数: 11
  • 20:18
  • 评论 / 浏览 (0 / 152)
  • 分类:开源软件
2011-08-10
缩略显示

Android源码编译调试详解

    博客分类:
  • Android

 

Android2.2 源码编译

1、编译环境

Android2.2 + Ubuntu10.04 + JDK1.5

安装必要的软件环境

sudo apt-get install git-core

sudo apt-get install gnupg

sudo apt-get install flex

sudo apt-get install bison

sudo apt-get install gperf

sudo apt-get install libsdl-dev

sudo apt-get install libesd0-dev

sudo apt-get install libwxgtk2.6-dev

sudo apt-get install build-essential

sudo apt-get install zip

sudo apt-get install curl

sudo apt-get install libncurses5-dev

sudo apt-get install zlib1g-dev

 

以上就是官方推荐的软件包,可能需要的软件包还有以下几个

sudo apt-get install make

sudo apt-get install gcc

sudo apt-get install g++

sudo apt-get install libc6-dev

sudo apt-get install patch

sudo apt-get install texinfo

sudo apt-get install valgrind

sudo apt-get install python

 

JDK1.5安装

官方声明:32位操作系统下JDK必须要用1.5的,是因为在编译Android api docs时需要1.5的。用JDK1.6必须用64位系统,当然也有解决办法,网上教程很多此处就不再一一声明。

到官网下载jdk-1_5_0_22-linux-i586.bin,目前JDK1.5的最后更新版本是JDK 5.0 Update 22,下载后得到一bin文件。命令行输入

sudo chmod u+x jdk-1_5_0_22-linux-i586.bin

sudo gnome-open /opt

然后将此文件拷贝到 /opt目录下(可自定义),进入/opt目录输入命令

sudo -s ./jdk-1_5_0_22-linux-i586.bin

一路回车,直到询问是否安装,输入yes后确认,安装完毕后配置环境变量

sudo gedit /etc/profile

在umask 022上面添加如下内容

export JAVA_HOME=/opt/Java/jdk1.5.0_22

export JRE_HOME=/opt/Java/jdk1.5.0_22/jre

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:$HOME/bin

保存后关闭,再在命令行输入

sudo gedit /etc/environment

然后在文件结尾加入以下内容

export JAVA_HOME=/opt/Java/jdk1.5.0_22

export JRE_Home=/opt/Java/jdk1.5.0_22/jre

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JRE_Home/lib

保存后关闭,然后重启电脑,验证安装,在命令行输入

java –version

javac -version

查看否是刚才所安装的JDK版本

 

2、下载Android2.2源码

安装repo脚本

在当前用户目录下新建一repo目录。在终端中执行:

mkdir repo

然后向PATH中添加repo路径

export PATH=$PATH:~/repo

然后下载repo脚本并修改可执行属性

curl https://android.git.kernel.org/repo > ~/repo/repo

chmod a+x ~/repo/repo

初始化repo

首先建立一个目录用来存放Android源代码并下载

mkdir Android2.2

cd Android2.2

repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo

注:后面加 -b froyo 就是下载指定的版本源码,froyo 就是Android2.2版本 的代号。这中间会问到你的名字和Email。如果你打算上传代码,Email须是   一个Google账户。

最后执行repo sync开始同步代码,接下来就是慢长的等待了,中间可能会   遇到断线,重新执行repo sync即可断点续传。

 

3、编译Android源码

编译生成镜像文件:make

切换到Android源码目录下,执行make命令,然后又是慢长的等待,大约   要2-3个小时。完成后镜像文件生成在out/target/product/generic下。

Android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中,       ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把      system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录   下。

编译SDK

make编译完成后,执行

make sdk

生成对应于该版本源代码的sdk。注意这个sdk不能用于生产环境,用于生产环境的最好用如下命令:

make PRODUCT-sdk-sdk  ###使用make sdk 会出现R文件不能自动生成的问题

SDK编译成功后会在out/host/linux-x86/sdk/ 生成sdk的文件目录和压缩包:

android-sdk_eng.用户名_linux-x86

android-sdk_eng.用户名_linux-x86.zip

并在out/target/product/generic(generic是默认的产品名)下打包所有的映像文件:

generic-img-eng.用户名.zip

 

配置AndroidSDK环境变量,在终端中执行

sudo gedit ~/.bashrc

在文件最后添加如下内容

#set android environment

export PATH=$PATH:/Android源码目录/out/host/linux-x86/bin

export ANDROID_PRODUCT_OUT=/Android源码目录/out/target/product/generic

保存后退出,在终端中同步这些设置

source ~/.bashrc

验证是否编译正确

在终端执行

emulator &

(注:可进入${ANDROID_PRODUCT_OUT}目录,后执行

emulator -image system.img -data userdata.img -ramdisk ramdisk.img)

模拟器能正常启动则表明编译成功

 

4、单模块编译

Android中的一个应用程序可以单独编译,编译后要重新生成system.img

在源码目录下执行

. build/envsetup.sh (.后面有空格)

然后就多出一些命令:

- croot: Changes directory to the top of the tree. 

- m: Makes from the top of the tree. 

- mm: Builds all of the modules in the current directory. 

- mmm: Builds all of the modules in the supplied directories. 

- cgrep: Greps on all local C/C++ files. 

- jgrep: Greps on all local Java files. 

- resgrep: Greps on all local res/*.xml files. 

- godir: Go to the directory containing a file.

可以加—help查看用法

我们可以使用mmm来编译指定目录的模块,如编译联系人:

mmm packages/apps/Contacts/

编完之后生成两个文件:

out/target/product/generic/data/app/ContactsTests.apk 

out/target/product/generic/system/app/Contacts.apk

 

可以使用make snod重新生成system.img

编译所修改的代码所在模块,例如:

cd ~/android/src

mmm packages/apps/Contacts

在~/android/src中运行:

cd ~/android/src

make snod

该命令生成一个新的系统映像

out/target/product/generic/system.img

将这个系统映像拷贝至sdk下

out/host/linux-x86/sdk/android-sdk_eng.justin_linux-x86/tools/lib/images/

 

5、Android 在Eclipse中进行调试

拷贝development/ide/eclipse/.classpath到源代码根目录

启动Eclipse并新建一Java Project

选择Create project from existing source

点击Browse选择Android的源码目录然后Finish

导入时比较慢,导入完成后Android项目出错,右击工程

Build Path -- Configure Build Path -- Libraries

删除两个出错的jar包

google-common_intermediates/javalib.jar

gsf-client_intermediates/javalib.jar

再添加out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar

点击OK

 

在Eclipse中修改

展开packages/providers/CalendarProvider/src

展开包: com.android.providers.calendar

右键点击包com.android.providers.calendar

选择 "new file"

在对话框中选择点击  "Advanced >>" 按钮, 可以看到"Link to file in the file system" checkbox,

勾选上 checkbox.  这时 "Browse..." 可用.

点击 "Browse..." 按钮,

选择out/target/common/obj/APPS/CalendarProvider_intermediates/src/src/com/android/providers/calendar/EventLogTags.java

点击OK

点击 Finish (in "New File")

 

同样的方式修改com.android.providers.contacts的问题

 

调试

在IDE(eclipse)中修改源代码后在shell中编译运行

源码自带编译工具

先在Adroid源码根目录执行. build/envsetup.sh 再通过m/mm/mmm进行编译

- m:    Makes from the top of the tree.

- mm:   Builds all of the modules in the current directory.

- mmm:  Builds all of the modules in the supplied directories.

 

. build/envsetup.sh #初始化

lunch 1   # 初始化模拟器等

mmm packages/providers/ContactsProvider/

#用mm/mmm来编译生成的.apk并不会打包到system.img中

#可以使用make snod将模块打包到system.img中,也可以使用 adb install -r *.apk安装

注:通过mmm packages/providers/ContactsProvider/ 编译后的apk在 out/target/product/generic/system/app

emulator & #启动Android模拟器

ddms &     #调试工具

 

  • 15:25
  • 评论 / 浏览 (0 / 111)
  • 分类:移动开发
2010-05-17
缩略显示

JAVA连接Access数据库

    博客分类:
  • JDBC
Access Java SQL JDBC Microsoft
Accesstest代码 复制代码
  1. package com.yaku.access;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.DriverManager;   
  5. import java.sql.PreparedStatement;   
  6. import java.sql.Statement;   
  7.   
  8. public class AccessTest {   
  9.     public static void main(String[] args) {   
  10.         try {   
  11.             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   
  12.             // String url = "jdbc:odbc:wombat";   
  13.             // string url=“jdbc:odbc:Driver={MicroSoft Access Driver   
  14.             // (*.mdb)};DBQ=“+application.getRealPath(“/Data/ReportDemo.mdb“);   
  15.             String url = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=C:\\Test.mdb";   
  16.             Connection conn = DriverManager.getConnection(url, "", "");   
  17.             Statement stmt = conn.createStatement();   
  18.             // ResultSet rs = stmt.executeQuery("delete from arts where id =   
  19.             // 2");   
  20.             // System.out.println("a row has beenn inserted;");   
  21.             PreparedStatement ps ;   
  22.             for(int i=0;i<1000;i++){   
  23.                 String sex = "";   
  24.                 if(i%2==0){   
  25.                     sex="M";   
  26.                 }else{   
  27.                     sex="F";   
  28.                 }   
  29.                 ps = conn.prepareStatement   
  30.                     ("insert into test values('"+i+"','Yaku"+i+"','"+sex+"')");   
  31.                 ps.executeUpdate();   
  32.                 ps.close();   
  33.             }   
  34.             // rs.close();   
  35.             stmt.close();   
  36.             conn.close();   
  37.         } catch (Exception ex) {   
  38.             ex.printStackTrace();   
  39.         }   
  40.     }   
  41. }  
package com.yaku.access;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.Statement;public class AccessTest {	public static void main(String[] args) {		try {			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");			// String url = "jdbc:odbc:wombat";			// string url=“jdbc:odbc:Driver={MicroSoft Access Driver			// (*.mdb)};DBQ=“+application.getRealPath(“/Data/ReportDemo.mdb“);			String url = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=C:\\Test.mdb";			Connection conn = DriverManager.getConnection(url, "", "");			Statement stmt = conn.createStatement();			// ResultSet rs = stmt.executeQuery("delete from arts where id =			// 2");			// System.out.println("a row has beenn inserted;");			PreparedStatement ps ;			for(int i=0;i<1000;i++){				String sex = "";				if(i%2==0){					sex="M";				}else{					sex="F";				}				ps = conn.prepareStatement					("insert into test values('"+i+"','Yaku"+i+"','"+sex+"')");				ps.executeUpdate();				ps.close();			}			// rs.close();			stmt.close();			conn.close();		} catch (Exception ex) {			ex.printStackTrace();		}	}}

 查询Access数据

Select代码 复制代码
  1. package com.yaku.access;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.DriverManager;   
  5. import java.sql.ResultSet;   
  6. import java.sql.Statement;   
  7.   
  8. public class Select {   
  9.     public static void main(String[] args) {   
  10.         try {   
  11.             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   
  12.             // String url = "jdbc:odbc:wombat";   
  13.             // string url=“jdbc:odbc:Driver={MicroSoft Access Driver   
  14.             // (*.mdb)};DBQ=“+application.getRealPath(“/Data/ReportDemo.mdb“);   
  15.             String url = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=C:\\Test.mdb";   
  16.             Connection conn = DriverManager.getConnection(url, "", "");   
  17.             Statement stmt = conn.createStatement();   
  18.             ResultSet rs = stmt.executeQuery("SELECT * FROM test");   
  19.             System.out.println("Got ResultSet Now");   
  20.             //rs.beforeFirst();   
  21.             while (rs.next()) {   
  22.                 System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));   
  23.             }   
  24.             rs.close();   
  25.   
  26.             stmt.close();   
  27.             conn.close();   
  28.         } catch (Exception ex) {   
  29.             ex.printStackTrace();   
  30.         }   
  31.     }   
  32. }  
package com.yaku.access;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class Select {	public static void main(String[] args) {		try {			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");			// String url = "jdbc:odbc:wombat";			// string url=“jdbc:odbc:Driver={MicroSoft Access Driver			// (*.mdb)};DBQ=“+application.getRealPath(“/Data/ReportDemo.mdb“);			String url = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=C:\\Test.mdb";			Connection conn = DriverManager.getConnection(url, "", "");			Statement stmt = conn.createStatement();			ResultSet rs = stmt.executeQuery("SELECT * FROM test");			System.out.println("Got ResultSet Now");			//rs.beforeFirst();			while (rs.next()) {				System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));			}			rs.close();			stmt.close();			conn.close();		} catch (Exception ex) {			ex.printStackTrace();		}	}}

 删除Access数据

Delete代码 复制代码
  1. package com.yaku.access;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.DriverManager;   
  5. import java.sql.PreparedStatement;   
  6. import java.sql.Statement;   
  7.   
  8. public class Delete {   
  9.     public static void main(String[] args) {   
  10.         try {   
  11.             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   
  12.             // String url = "jdbc:odbc:wombat";   
  13.             // string url=“jdbc:odbc:Driver={MicroSoft Access Driver   
  14.             // (*.mdb)};DBQ=“+application.getRealPath(“/Data/ReportDemo.mdb“);   
  15.             String url = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=C:\\Test.mdb";   
  16.             Connection conn = DriverManager.getConnection(url, "", "");   
  17.             Statement stmt = conn.createStatement();   
  18.             // ResultSet rs = stmt.executeQuery("delete from arts where id = 2");   
  19.             // System.out.println("a row has beenn inserted;");   
  20.             PreparedStatement ps = conn.prepareStatement("delete from test where id = '1'");   
  21.   
  22.             ps.executeUpdate();   
  23.             // rs.close();   
  24.             ps.close();   
  25.   
  26.             stmt.close();   
  27.             conn.close();   
  28.         } catch (Exception ex) {   
  29.             ex.printStackTrace();   
  30.         }   
  31.     }   
  32. }  
package com.yaku.access;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.Statement;public class Delete {	public static void main(String[] args) {		try {			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");			// String url = "jdbc:odbc:wombat";			// string url=“jdbc:odbc:Driver={MicroSoft Access Driver			// (*.mdb)};DBQ=“+application.getRealPath(“/Data/ReportDemo.mdb“);			String url = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=C:\\Test.mdb";			Connection conn = DriverManager.getConnection(url, "", "");			Statement stmt = conn.createStatement();			// ResultSet rs = stmt.executeQuery("delete from arts where id = 2");			// System.out.println("a row has beenn inserted;");			PreparedStatement ps = conn.prepareStatement("delete from test where id = '1'");			ps.executeUpdate();			// rs.close();			ps.close();			stmt.close();			conn.close();		} catch (Exception ex) {			ex.printStackTrace();		}	}}

 

你可能感兴趣的:(android)