第14课
------------------------------------------
handler的使用(一)
线程的实现方法一般有两种,1是继承Thread类,2是实现Runnable接口类
在第二中方法中可以用内部匿名类实现,如下
Runnable updateThread = new Runnable[]{
public void run(){...}
}
等价于
Class UpdateThread implement Runnable{
public void run(){...}
}
UpdateThread updateThread = new UpdateThread();
Handler异步消息处理:
Handler handler = new Handler();//声明一个Handler对象。
handler.post(updateThread);//将要执行的线程对象加入消息队列里面准备执行。
handler.postDelayed(updateThread,3000);//过3000毫秒以后将要执行的线程添加到消息队列里了。
ProgressBar水平样式的设置
style="?android:attr/progressBarStyleHorizontal"
第15课
------------------------------------------
handler的使用(二)
1.Handler与线程
Handler执行的线程跟Activity所在的线程是同一个线程中执行的。
这个可以通过打印Thread.currentThread.getId();
Thread.currentThread.getName();进行验证。
Handler对线程的处理并不是真正的启动了一个新的线程,而是在原来的线程中进行处理的
没有调用start()方法,而是直接调用的run()方法。
第16课
------------------------------------------
SQLite关系型数据库使用方法
1.数据库的创建:
创建一个DatabaseHelper的对象
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name");
然后执行:
SQLiteDatabase db = dbHelper.getReadableDatabase();
获得数据库。
在数据库创建的时候,就会去执行DatabaseHelper里的
onCreat();回调函数。
2.数据库版本更新:
创建一个DatabaseHelper的对象,参数中填入笔创建时候默认版本号增加了的版本号参数。
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name",2);
然后执行:
SQLiteDatabase db = dbHelper.getReadableDatabase();
获得数据库。
在数据库版本号有更新的时候,就会去调用DatabaseHelper里的
onUpgrad();回调函数。
3.插入:
先生成一个ContentValues对象
ContentValues values = new ContentValues();
向该对象中插入键值对,其中键是列名,值是希望出入到这一列的值
(在DatabaseHelper的onCreat()方法中创建里基本的表结构,包含id和name)
values.put("id",1);
values.put("name","zhangsan");
创建一个DatabaseHelper的对象
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name");
然后执行:
SQLiteDatabase db = dbHelper.getWriteableDatabase();
获得可写数据库。
最后
db.insert("table_name",null,values);
向数据库的表中插入数据
4.更新:
得到一个可写的SQLiteDatabase对象
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name");
SQLiteDatabase db = dbHelper.getWriteableDatabase();
创建一个ContentValuse对象
ContentValues valuse = new ContentValues();
valuse.put("name","sanFeng");
最后
db.update("table_name",valuse,"id=?",new String[]{"1"});
把id为1的那条记录的name更新为sanFeng。其中?叫做占位符,如果查找的条件有两个,那在
后面对应的String[]数组里面就有两个字符串,分别分配给两个占位符。
(SQL语句中的更新语句
update table_name XXX=XXX where XXX=XXX)。
5.查找:
先得到一个可读的SQLiteDatabase对象
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name");
SQLiteDatabase db = dbHelper.getReadableDatabase();
db的query()方法返回一个Cursor
Cursor cursor = db.query("table_name",new String[]{"id","name"/*要查询那些列*/},
"id=?",new String[]{"1"},null,null,null/*分组,分组结果,查询结果排序*/);
如何得到查询结果呢?
while(cursor.moveToNext){
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.d("a","query ----> "+name);
}
创建DatabaseHelper继承自SQLiteOpenHelper
在其中必须有其构造函数,调用父类的构造函数
public DatabaseHelper(Context context,String name,CursorFactory factory,int version){
super(context,name,null,version);
}
还有两个回调函数
public void onCreat(SQLiteDatabase db){
//当第一个调用db.getReadableDatabase();或者db.getWriteableDatebase();的时候调用。
//创建基本的表结构。
db.execSQL("creat table table_name(id int, name varchar(20))");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
//当数据库版本更新的时候自动调用的。
}
第17课
------------------------------------------
程序调试
DDMS(Dalvik Debug Monitor Service) --> LogCat
第18课
------------------------------------------
文件下载
1.使用HTTP协议下载文件
2.将下载的文件写入SDcard
文件下载步骤:
1.创建一个HeepURLConnection对象
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
2.获得一个InputStream对象
urlConn.getInputStream();
3.访问网络的权限
android.permission.INTERNET
访问SD卡
1.得到当前设备SD卡的目录
Environment.getExternalStorageDirectory();
2.访问SD卡的权限
android.permission.WRITE_EXTERNAL_STORAGE
/*******************************************************************/
新建一个HttpDownloader类
public class HttpDownloader{
private URL url = null;
//下载文本文件
//1.创建一个URL对象
//2.通过URL对象,创建一个HttpURLConnection对象
//3.得到InputStream
//4.从InputStream当中读取数据
public String download(String urlStr){
StringBuffer sb = new StringBuffer();
String line = null;
BufferReader buffer = null;
try{
//创建一个URL对象
url = new URL(urlString);
//创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
//使用IO流读取数据
buffer = new BufferReader(
new InputStreamReader(urlConn.getInputStream()));
while((line = buffer.readLine();) != null){
sb.append(line);
}
} catch(Exception e){e.printStackTracs();
}finally{try{buffer.close();}catch(Exception e){e.printStackTracs();}}
return sb.toString();
}
}
第19课
------------------------------------------
Content Provider初步
1.Content Provider基本概念
2.Uri
3.ContentProvider的实现方法
Content Provider基本概念
1.ContentProvider提供了存储和获取数据提供了同一的接口。
2.使用ContentProvider可以在不同的应用程序之间共享数据。
3.Android为常见的一些数据提供了ContentPrivider.
Content Provider使用表的形式来组织数据。
URI
1.每个Content Provider都拥有一个统一的URI,这个URI用于表示这个ContentProvider
所提供的数据。
2.Android所提供的ContentProvider都存放在android.provider包当中。
ContentProvider所提供的函数:
1.query();//查询
2.insert();
3.update();
4.delete();
5.getType();//得到数据类型
6.onCreate();//创建时的回调函数
实现ContentProvider的过程(这个很少用的)
1.定义一个CONTENT_URI
2.定义一个类,继承ContentProvider
3.实现query,insert,update,delete,getType,onCreate方法。
4.在AndroidManifest.xml
------------------------------------------
handler的使用(一)
线程的实现方法一般有两种,1是继承Thread类,2是实现Runnable接口类
在第二中方法中可以用内部匿名类实现,如下
Runnable updateThread = new Runnable[]{
public void run(){...}
}
等价于
Class UpdateThread implement Runnable{
public void run(){...}
}
UpdateThread updateThread = new UpdateThread();
Handler异步消息处理:
Handler handler = new Handler();//声明一个Handler对象。
handler.post(updateThread);//将要执行的线程对象加入消息队列里面准备执行。
handler.postDelayed(updateThread,3000);//过3000毫秒以后将要执行的线程添加到消息队列里了。
ProgressBar水平样式的设置
style="?android:attr/progressBarStyleHorizontal"
第15课
------------------------------------------
handler的使用(二)
1.Handler与线程
Handler执行的线程跟Activity所在的线程是同一个线程中执行的。
这个可以通过打印Thread.currentThread.getId();
Thread.currentThread.getName();进行验证。
Handler对线程的处理并不是真正的启动了一个新的线程,而是在原来的线程中进行处理的
没有调用start()方法,而是直接调用的run()方法。
第16课
------------------------------------------
SQLite关系型数据库使用方法
1.数据库的创建:
创建一个DatabaseHelper的对象
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name");
然后执行:
SQLiteDatabase db = dbHelper.getReadableDatabase();
获得数据库。
在数据库创建的时候,就会去执行DatabaseHelper里的
onCreat();回调函数。
2.数据库版本更新:
创建一个DatabaseHelper的对象,参数中填入笔创建时候默认版本号增加了的版本号参数。
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name",2);
然后执行:
SQLiteDatabase db = dbHelper.getReadableDatabase();
获得数据库。
在数据库版本号有更新的时候,就会去调用DatabaseHelper里的
onUpgrad();回调函数。
3.插入:
先生成一个ContentValues对象
ContentValues values = new ContentValues();
向该对象中插入键值对,其中键是列名,值是希望出入到这一列的值
(在DatabaseHelper的onCreat()方法中创建里基本的表结构,包含id和name)
values.put("id",1);
values.put("name","zhangsan");
创建一个DatabaseHelper的对象
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name");
然后执行:
SQLiteDatabase db = dbHelper.getWriteableDatabase();
获得可写数据库。
最后
db.insert("table_name",null,values);
向数据库的表中插入数据
4.更新:
得到一个可写的SQLiteDatabase对象
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name");
SQLiteDatabase db = dbHelper.getWriteableDatabase();
创建一个ContentValuse对象
ContentValues valuse = new ContentValues();
valuse.put("name","sanFeng");
最后
db.update("table_name",valuse,"id=?",new String[]{"1"});
把id为1的那条记录的name更新为sanFeng。其中?叫做占位符,如果查找的条件有两个,那在
后面对应的String[]数组里面就有两个字符串,分别分配给两个占位符。
(SQL语句中的更新语句
update table_name XXX=XXX where XXX=XXX)。
5.查找:
先得到一个可读的SQLiteDatabase对象
DatabaseHelper dbHelper = new DatabaseHelper(this,"database_name");
SQLiteDatabase db = dbHelper.getReadableDatabase();
db的query()方法返回一个Cursor
Cursor cursor = db.query("table_name",new String[]{"id","name"/*要查询那些列*/},
"id=?",new String[]{"1"},null,null,null/*分组,分组结果,查询结果排序*/);
如何得到查询结果呢?
while(cursor.moveToNext){
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.d("a","query ----> "+name);
}
创建DatabaseHelper继承自SQLiteOpenHelper
在其中必须有其构造函数,调用父类的构造函数
public DatabaseHelper(Context context,String name,CursorFactory factory,int version){
super(context,name,null,version);
}
还有两个回调函数
public void onCreat(SQLiteDatabase db){
//当第一个调用db.getReadableDatabase();或者db.getWriteableDatebase();的时候调用。
//创建基本的表结构。
db.execSQL("creat table table_name(id int, name varchar(20))");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
//当数据库版本更新的时候自动调用的。
}
第17课
------------------------------------------
程序调试
DDMS(Dalvik Debug Monitor Service) --> LogCat
第18课
------------------------------------------
文件下载
1.使用HTTP协议下载文件
2.将下载的文件写入SDcard
文件下载步骤:
1.创建一个HeepURLConnection对象
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
2.获得一个InputStream对象
urlConn.getInputStream();
3.访问网络的权限
android.permission.INTERNET
访问SD卡
1.得到当前设备SD卡的目录
Environment.getExternalStorageDirectory();
2.访问SD卡的权限
android.permission.WRITE_EXTERNAL_STORAGE
/*******************************************************************/
新建一个HttpDownloader类
public class HttpDownloader{
private URL url = null;
//下载文本文件
//1.创建一个URL对象
//2.通过URL对象,创建一个HttpURLConnection对象
//3.得到InputStream
//4.从InputStream当中读取数据
public String download(String urlStr){
StringBuffer sb = new StringBuffer();
String line = null;
BufferReader buffer = null;
try{
//创建一个URL对象
url = new URL(urlString);
//创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
//使用IO流读取数据
buffer = new BufferReader(
new InputStreamReader(urlConn.getInputStream()));
while((line = buffer.readLine();) != null){
sb.append(line);
}
} catch(Exception e){e.printStackTracs();
}finally{try{buffer.close();}catch(Exception e){e.printStackTracs();}}
return sb.toString();
}
}
第19课
------------------------------------------
Content Provider初步
1.Content Provider基本概念
2.Uri
3.ContentProvider的实现方法
Content Provider基本概念
1.ContentProvider提供了存储和获取数据提供了同一的接口。
2.使用ContentProvider可以在不同的应用程序之间共享数据。
3.Android为常见的一些数据提供了ContentPrivider.
Content Provider使用表的形式来组织数据。
URI
1.每个Content Provider都拥有一个统一的URI,这个URI用于表示这个ContentProvider
所提供的数据。
2.Android所提供的ContentProvider都存放在android.provider包当中。
ContentProvider所提供的函数:
1.query();//查询
2.insert();
3.update();
4.delete();
5.getType();//得到数据类型
6.onCreate();//创建时的回调函数
实现ContentProvider的过程(这个很少用的)
1.定义一个CONTENT_URI
2.定义一个类,继承ContentProvider
3.实现query,insert,update,delete,getType,onCreate方法。
4.在AndroidManifest.xml