Android学习笔记2012年
一、Android应用的目录结构
src
package
bin
apk
gen
R
res
AndroidManifest.xml
二、Android发布和运行
1、发布: .java--编译-->>.class--转换-->>.dex--打包(签名)-->>.apk--adb(install)命令-->>安装到Android系统
2、运行:操作系统创建进程--->>创建主线程--->>主线程实例化Activity(操作系统会把应用的有关信息Context放入到Activity中然后调用onCreate()方法)
三、开发拨号程序
1、调用已经有的拨号API
Intent intent=new Intent();//定义意图对象
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel:"+phone));
startActivity(intent);//会自动添加:android.intent.category.DEFAULT,故不用intent.setCategory("android.intent.category.DEFAULT");
添加拨号权限:在AndrionManifest.xml中添加:<uses-permission android:name="android.permission.CALL_PHONE"/>给软件添加拨号功能
2、性能考虑:
a)定义一个EditText类型的成员变量,对于EditText控件的查找,放在onCreate()方法中,onCreate()只加载一次,即只查找一次。
b)大量使用内部类,对于类不是很长的内部类可以采用匿名的内部类,原因是在Android虚拟机加载类的时候需要将所有类文件,类文件数量会影响加载速度。故内部类来处理。
四、开发短信发送程序
1、调用系统自带的短信发送器API
SmsManager sms=SmsManager.getDefault();//短信发送的管理类
ArrayList<String> msgs=sms.divideMessage(shortMsg);
for(String text:msgs){
sms.sendTextMessage(phone, null, text, null, null);
}
Toast.makeText(HelloActivity.this, R.string.success,Toast.LENGTH_LONG).show();//吐司提示
2、配置短信发送权限:<uses-permission android:name="android.permission.SEND_SMS"/>
五、文件的读写:
1、写:
FileOutputStream outStream = null;
try {
outStream = context.openFileOutput(fileName, Context.MODE_PRIVATE);
outStream.write(fileContent.getBytes());
} catch (Exception e) {
throw e;
} finally {
if (outStream != null) {
outStream.close();
}
}
2、读:
public String read(String fileName) throws Exception{
String result="";
FileInputStream inStream=context.openFileInput(fileName);
ByteArrayOutputStream outStream =new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=0;
while((len=inStream.read(buffer))!=-1){
outStream.write(buffer,0,len);
}
byte[] data=outStream.toByteArray();
result=new String(data);
inStream.close();
outStream.close();
return result;
}
3、读写模式:
Context.MODE_PRIVATE//私有----仅供本应用读写
Context.MODE_APPEND//追加-----仅供本应用读写,追加模式增加数据
Context.MODE_WORLD_READABLE//外界可读
Context.MODE_WORLD_WRITEABLE//外界可写
除此以外,四种模式还可以组合使用:例如:Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE
表示文件可以对外被读写
六、读写SDCard
1、读写之前判断SDcard是否存在或者写保护
try {//判断sdcard是否存在或被写保护
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
fileService.writeFileToSDCard(fileName, fileContent);
}else{
Log.e(ETAG, "SDCard不存在或被写保护!");
}
} catch (Exception e) {
Log.e(ETAG, "保存文件失败!");
}
2、写入到SDCard代码
File file= new File(Environment.getExternalStorageDirectory(),fileName);
FileOutputStream outStream = new FileOutputStream(file);
outStream.write(fileContent.getBytes());
outStream.close();
3、添加读写的权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
七、Pull存取XML数据
1、读数据:主要应用XmlPullParser类
public static List<Person> getDataFromXML(InputStream xmlStream) throws XmlPullParserException, IOException{
List<Person> persons=null;
Person person =null;
XmlPullParser pullParser=Xml.newPullParser();//初始化实例
pullParser.setInput(xmlStream,"UTF-8");//设置输入流
int event=pullParser.getEventType();//事件状态
while(event!=XmlPullParser.END_DOCUMENT){
switch(event){
case XmlPullParser.START_DOCUMENT://文档开始
persons=new ArrayList<Person>();
break;
case XmlPullParser.START_TAG://标签开始
if("person".equals(pullParser.getName())){//判断标签名获取属性值
Long id=new Long(pullParser.getAttributeValue(0));
person =new Person();
person.setId(id);
}
if("name".equals(pullParser.getName())){//判断标签名获取标签内置
String name=pullParser.nextText();
person.setName(name);
}
if("age".equals(pullParser.getName())){
Integer age=new Integer(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG://标签结束
if("person".equals(pullParser.getName())){
persons.add(person);
person=null;
}
break;
}
event=pullParser.next();
}
return persons;
}
2、存数据:主要应用XmlSerializer类
public static void saveDateToXML(List<Person> persons,OutputStream os ) throws Exception{
XmlSerializer xmlSeriallizer=Xml.newSerializer();
xmlSeriallizer.setOutput(os, "UTF-8");
xmlSeriallizer.startDocument("UTF-8", true);
xmlSeriallizer.startTag(null, "root");
for(Person person:persons){
xmlSeriallizer.startTag(null, "person");
xmlSeriallizer.attribute(null, "id", person.getId().toString());
xmlSeriallizer.startTag(null, "name");
xmlSeriallizer.attribute(null, "name", person.getName());
xmlSeriallizer.endTag(null, "name");
xmlSeriallizer.startTag(null, "age");
xmlSeriallizer.attribute(null, "age",person.getAge()+"");
xmlSeriallizer.endTag(null, "age");
xmlSeriallizer.endTag(null, "person");
}
xmlSeriallizer.endTag(null, "root");
xmlSeriallizer.endDocument();
}
八、参数SharedPreference的设置
读写:主要应用:SharedPreferences、Editor类
public void savePreferences(String name,int grade){
SharedPreferences sharedPreference=context.getSharedPreferences("preference", Context.MODE_PRIVATE);
Editor editor=sharedPreference.edit();
editor.putString("nikename", name);
editor.putInt("grade", grade);
editor.commit();
}
public HashMap<String,String> getPreferences(){
HashMap<String,String> params=new HashMap<String,String>();
SharedPreferences sharedPreference=context.getSharedPreferences("preference", Context.MODE_PRIVATE);
params.put("grade", String.valueOf(sharedPreference.getInt("grade", 0)));
params.put("name",sharedPreference.getString("nikename",""));
return params;
}
九、sqlite数据库操作
1、创建数据库
public class DBOpenHelper extends SQLiteOpenHelper {//创建一个操作类继承SQLiteOpenHelper数据库操作类
public DBOpenHelper(Context context) {
super(context, "sqlit.db", null, 2);(Context上下文对象,数据库名称,CursorFactory工厂,数据版本版本号,不能为0,刚开始一般为1 )
}
@Override
public void onCreate(SQLiteDatabase db) {//数据库第一次创建时调用的方法,在数据库中生成数据库表
db.execSQL("CREATE TABLE USER(UID INTEGER PRIMARY KEY AUTOINCREMENT,UNAME VARCHAR(20)NOT NULL) ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//数据库版本升级时候调用
db.execSQL("ALTER TABLE USER ADD PHONE VARCHAR(20) NULL");
}
}
//调用方法
public void createDbTest(){
DBOpenHelper dBOpenHelper=new DBOpenHelper(this.getContext());//创建DBOpenHelper实例
dBOpenHelper.getWritableDatabase();//获取数据库读写对象,创建数据库
}
2、使用标准SQL实现增删改查
this.dbOpenHelper=new DBOpenHelper(context);
SQLiteDatabase db=dbOpenHelper.getWritableDatabase();//获取读取数据的实例
db.execSQL(sql)//执行增删改sql语句
Cursor cursor= db.rawQuery(sql)//执行查询的sql语句,cursor为游标对象
=============================================
private DBOpenHelper dbOpenHelper;//数据库操作对象
public UserService(Context context){//初始化数据库操作对象
this.dbOpenHelper=new DBOpenHelper(context);
}
public void add(User user){
SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
db.execSQL("insert into user(uname,phone) values(?,?)",
new Object[]{user.getUname(),user.getPhone()});
}
public void delete(Long uid){
SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
db.execSQL("delete from user where uid=?",new Object[]{uid});
}
public void update(User user){
SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
db.execSQL("update user set uname=?,phone=? where uid=?",
new Object[]{user.getUname(),user.getPhone(),user.getUid()});
}
public User findById(Long uid){
User user=new User();
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor curser= db.rawQuery("select * from user where uid=?",new String[]{uid.toString()});
if(curser.moveToFirst()){
user.setUid(curser.getLong(curser.getColumnIndex("UID")));
user.setUname(curser.getString(curser.getColumnIndex("UNAME")));
user.setPhone(curser.getString(curser.getColumnIndex("PHONE")));
}
return user;
}
public List<User> findList(int offset,int pageSize){
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor curser= db.rawQuery("select * from user order by uid asc limit ?,?",
new String[]{offset+"",""+pageSize});
List<User> users=new ArrayList<User>();
User user=null;
while(curser.moveToNext()){
user=new User();
user.setUid(curser.getLong(curser.getColumnIndex("UID")));
user.setUname(curser.getString(curser.getColumnIndex("UNAME")));
user.setPhone(curser.getString(curser.getColumnIndex("PHONE")));
users.add(user);
}
return users;
}
public long findCount(){
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor curser= db.rawQuery("select count(*) as total from user",null);
curser.moveToFirst();
long total=curser.getLong(curser.getColumnIndex("total"));
return total;
}
3、使用android的数据库操作API操作
主要有:insert、delete、update、query四个操作方法
参数传递:ContentValues对象和String[]{}字符数组对象
查询结果:Cursor对象
public void add(User user){//增加
SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
ContentValues values =new ContentValues();
values.put("uname", user.getUname());
values.put("phone", user.getPhone());
db.insert("USER", null, values);//参数(表名,空字段名,字段值)
}
public void delete(Long uid){//删除
SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
db.delete("USER", "uid=?", new String[]{uid.toString()});
}
public void update(User user){//更新
SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
ContentValues values= new ContentValues();
values.put("uname", user.getUname());
values.put("phone", user.getPhone());
db.update("USER", values, "uid=?", new String[]{user.getUid().toString()});
}
public User findById(Long uid){//用id查询
User user=new User();
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor curser= db.query("user", null, "uid=?", new String[]{uid.toString()}, null, null, null);
if(curser.moveToFirst()){
user.setUid(curser.getLong(curser.getColumnIndex("UID")));
user.setUname(curser.getString(curser.getColumnIndex("UNAME")));
user.setPhone(curser.getString(curser.getColumnIndex("PHONE")));
}
return user;
}
public List<User> findList(int offset,int pageSize){//查询分页
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor curser= db.query("user", null, null, null, null, null, "uid asc", offset+","+pageSize);
ArrayList<User> users=new ArrayList<User>();
User user=null;
while(curser.moveToNext()){
user=new User();
user.setUid(curser.getLong(curser.getColumnIndex("UID")));
user.setUname(curser.getString(curser.getColumnIndex("UNAME")));
user.setPhone(curser.getString(curser.getColumnIndex("PHONE")));
users.add(user);
}
return users;
}
public long findCount(){//查询数量
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor curser= db.query("user", new String[]{"count(*)"}, null,null, null, null, null);
curser.moveToFirst();
long total=curser.getLong(0);
return total;
}
4、事务的管理
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
db.beginTransaction();
try{
db.execSQL("Update User set amount=amount-? where uid=?",new Object[]{amount,payer.getUid()});
//int i=Integer.parseInt("error");
db.execSQL("Update User set amount=amount+? where uid=?",new Object[]{amount,accepter.getUid()});
db.setTransactionSuccessful();//设置事务标志
/**
* 注意:事务的结束有两种:commit(提交)和rollback(回滚)两种方式
* 事务的结束方式是事务的标志决定的,默认结束标志是false
* 该情况下事务默认是回滚方式结束的,
* db.setTransactionSuccessful()方法设置事务的提交方式为提交方式
*/
}catch(Exception e){
Log.i("UerServiceTest", "事务中出现异常,数据回滚!");
}
finally{
db.endTransaction();
}
*********************************************2012-11-20****************************************************
十、ListView控件绑定数据库
1、作用:ListView是一种常用的显示数据的控件
2、展示数据的时候一般先定义数据行模板, 实例如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:id="@+id/name"
android:textSize="16dp"
/>
<TextView
android:layout_width="120dp"
android:layout_height="wrap_content"
android:id="@+id/phone"
android:textSize="16dp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/amount"
android:textSize="16dp"
/>
</LinearLayout>
3、
发表评论
-
android通过POST和GET两种方式发送数据到web应用实战
2012-12-18 21:21 1434一、web应用端 1、servlet package co ... -
android从web应用读取xml和json数据实战
2012-12-13 22:43 1280一、web应用主要代码: 1、domian News.jav ... -
Android自学笔记
2012-12-11 22:41 848=============================== ... -
Android学习笔记2012年(2012-11-23至2012-11-27)
2012-11-27 20:59 1160******************************* ...
相关推荐
Android学习笔记 Android学习笔记 Android学习笔记
Android学习笔记
android 学习笔记(全全整理),吧android学习笔记全部整理下来了,可以去好好学习学习
第一行代码 android学习笔记 修改完整版
Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) ...
Android 开发学习笔记,学习android的好资料
android 学习笔记 android 学习笔记 android 学习笔记
自己整理的Android学习笔记 都是一些小细节,有用
学习java和android的笔记 更容易学习android 资深学习android 具有大量学习的笔记 很多的错误 都是从细节开始学习的
Android学习笔记,介绍怎么学习android。
Android学习笔记(十三) 碎片 完整源码
android学习笔记
Android学习笔记(1)-永远不变的Hello World Google的Android SDK发布也有一段时间了,一直想研究一下却苦于找不到时间。利用这个周未,开始强迫自己再次进入学习状态,原因很简单:我看好开放的gPhone。 SDK的下载...
Android开发学习笔记(整理),整理论坛android学习笔记,较完整的讲解了android的内容。包括:view、activity、service、intent、广播机制、http连接、数据sqllite存储、后台线程、各种layout、偏好、本地文件操作、...
android入门学习笔记
Android基础学习笔记,自己总结,适合初学者。
Android_学习笔记 Android_学习笔记 Android_学习笔记
Android学习笔记.rar