SQLite是一种小型的数据库存储形式,他可以不安装数据库就可以直接快速的使用像mysql一样的语句,下面我来介绍在安卓开发中一些SQLite数据删除,增加,修改,查询等操作。
一、原理
SQLite的相关介绍我就不说了,想了解的同学可以谷歌或百度一下,好~ 直接进入主题,要使用SQLite存储数据,首先先创建数据库,创建的方法如下:
SQLiteDatabase db = openOrCreateDatabase("数据库名字.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
// 创建person表
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)")当创建完数据库后就可以使用SQLite了,接下来我们对数据库进行 增、删、改、查操作l了。
增:
代码如下 |
复制代码 |
Person person = new Person();
person.setName("john");
person.setAge(19);
// 插入数据
db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)",new Object[] { person.getName(), person.getAge() }); |
删:
代码如下 |
复制代码 |
String whereClause = "_id=?";//删除的条件
String[] whereArgs = {"1"};//删除的条件参数
db.delete("person",whereClause,whereArgs);
|
//执行删除改:
代码如下 |
复制代码 |
Person person2 = new Person();
person2.setName("john");
person2.setAge(20);
ContentValues cv = new ContentValues();
cv.put("age", person2.getAge()); //修改内容
db.update("person", cv, "name = ?",new String[] { person2.getName() });
|
查:
代码如下 |
复制代码 |
Cursor c = db.rawQuery("select * from person where name=?",new String[]{"john"});
while(c.moveToNext()){
int id =Integer.parseInt(c.getString(c.getColumnIndex("_id")));
String name =c.getString(c.getColumnIndex("name"));
String age = c.getString(c.getColumnIndex("age"));
Log.v("Test ", "id:" + id + " name: " + name + " age: " + age);
}
|
下面是完整的代码。
二、代码
第一步:
代码如下 |
复制代码 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/btn_create_database"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="CreateDataBase"
/>
<Button
android:id="@+id/btn_add"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btn_create_database"
android:text="Add"
/>
<Button
android:id="@+id/btn_update"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btn_add"
android:text="Update"
/>
<Button
android:id="@+id/btn_query"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btn_update"
android:text="Query"
/>
<Button
android:id="@+id/btn_delete"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btn_query"
android:text="Delete"
/>
</RelativeLayout>
|
第二步:
代码如下 |
复制代码 |
package com.msquirrel.activity;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.example.demo_sqlite.R;
import com.msquirrel.model.Person;
/**
* 执行 创建数据库、增加数据、删除数据、修改数据、查询数据。
*
* @author msquirrel
*
*/
public class SQLiteActivity extends Activity {
private Button btnCteateDataBase = null;
private Button btnAdd = null;
private Button btnUpdate = null;
private Button btnQuery = null;
private Button btnDelete = null;
private SQLiteDatabase db = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sqlite);
// 打开或创建test.db数据库
db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
initView();
setListener();
}
private void initView() {
// TODO Auto-generated method stub
btnCteateDataBase = (Button) findViewById(R.id.btn_create_database);
btnAdd = (Button) findViewById(R.id.btn_add);
btnUpdate = (Button) findViewById(R.id.btn_update);
btnQuery = (Button) findViewById(R.id.btn_query);
btnDelete = (Button) findViewById(R.id.btn_delete);
}
private void setListener() {
// TODO Auto-generated method stub
btnCteateDataBase.setOnClickListener(new myOnClickListener());
btnAdd.setOnClickListener(new myOnClickListener());
btnUpdate.setOnClickListener(new myOnClickListener());
btnQuery.setOnClickListener(new myOnClickListener());
btnDelete.setOnClickListener(new myOnClickListener());
}
private class myOnClickListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_create_database:
db.execSQL("DROP TABLE IF EXISTS person");
// 创建person表
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
break;
case R.id.btn_add:
Person person = new Person();
person.setName("john");
person.setAge(19);
// 插入数据
db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)",
new Object[] { person.getName(), person.getAge() });
break;
case R.id.btn_update:
Person person2 = new Person();
person2.setName("john");
person2.setAge(20);
ContentValues cv = new ContentValues();
cv.put("age", person2.getAge()); //修改内容
db.update("person", cv, "name = ?",
new String[] { person2.getName() });
break;
case R.id.btn_query:
Cursor c = db.rawQuery("select * from person where name=?",new String[]{"john"});
while(c.moveToNext()){
int id = Integer.parseInt(c.getString(c.getColumnIndex("_id")));
String name =c.getString(c.getColumnIndex("name"));
String age = c.getString(c.getColumnIndex("age"));
Log.v("Test ", "id:" + id + " name: " + name + " age: " + age);
}
break;
case R.id.btn_delete:
String whereClause = "_id=?";//删除的条件
String[] whereArgs = {"1"};//删除的条件参数
db.delete("person",whereClause,whereArgs);//执行删除
break;
default:
break;
}
}
}
}
|
第三步:
代码如下 |
复制代码 |
package com.msquirrel.model;
/**
* 实体类
* @author Msquirrel
*
*/
public class Person {
private int _id;
private String name;
private int age;
public int get_id() {
return _id;
}
public void set_id(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;
}
}
|
最后大家要记得把SQLiteDatabase给关掉。
本文章来给各位同学介绍关于Android 消息机制简单简介,有需要了解的朋友可进入参考。
一、原理
1. Message
消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可 发送一条包含更新信息的Message给UI线程。
2. Message Queue
消息队列,用来存放通过Handler发布的消息,按照先进先出执行。
3. Handler
Handler是Message的主要处理者, 负责将Message添加到消息队列以及对消息队列中的 Message进行处理。
4. Looper
循环器,扮演Message Queue和Handler之间桥梁的角色,循环取出Message Queue里 面的Message,并交付给相应的Handler进行处理,还将普通线程转为Looper线程(Looper线程其实就是循环线程)。
代码:
代码如下 |
复制代码 |
public class LooperThread extends Thread {
public Handler mHandler;
@Override
public void run() {
// 将当前线程初始化为Looper线程
Looper.prepare();
// ...其他处理,如实例化handler
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
// 开始循环处理消息队列
Looper.loop();
}
}
|
如图:

5. 线程
UI thread 通常就是main thread, 而Android启动程序时会替它建立一个Message Queue。
每一个线程里可含有一个Looper对象以及一个MessageQueue数据结构。在你的应用程
序里,可以定义Handler的子类别来接收Looper所送出的消息。
总结一下,Message Queue、Handler、Looper它们三者之间的关系如下图:

圆形进度条我们以前在flash加载时会有这种效果,下面我来介绍关于Android(安卓) ClipDrawable 实现圆形进度条效果实现方法,各位同学可进入参考。


话就不多说了,直接上代码。
二、源码
步骤一、在根目录下创建 drawable文件夹,然后在drawable里创建clip_btimap.xml
代码如下 |
复制代码 |
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal"
android:drawable="@drawable/t2"
android:gravity="left|start" >
</clip> |
步骤二、activity_main.xml
代码如下 |
复制代码 |
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/t1" />
<ImageView
android:id="@+id/iv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/clip_btimap" />
</FrameLayout>
|
步骤三、MainActivity
代码如下 |
复制代码 |
package com.msquirrel.main;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.graphics.drawable.ClipDrawable;
import android.view.Menu;
import android.widget.ImageView;
/**
*
* 入口类
* @author Msquirrel
*
*/
public class MainActivity extends Activity {
private ImageView imageView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.iv_image);
//获取图片所显示的ClipDrawble对象
final ClipDrawable drawable = (ClipDrawable)imageView.getDrawable();
final Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what == 0x1233)
{
if(drawable.getLevel() >= 10000){
drawable.setLevel(0);
}
//修改ClipDrawable的level值
drawable.setLevel(drawable.getLevel() +500);
}
}
};
//时间类
final Timer timer = new Timer();
timer.schedule(new TimerTask()
{
public void run()
{
Message msg = new Message();
msg.what = 0x1233;
//发送消息,通知应用修改ClipDrawable对象的level值
handler.sendMessage(msg);
//取消定时器
// if(drawable.getLevel() >= 10000)
// {
// timer.cancel();
// }
}
},0,300);
}
}
|
时间戳就是如1377216000000 这种格式我们在mysql数据库中会经常用到把时间转换成时间戳或把时间戳转换成日期格式了,下面我来介绍安卓中时间戳操作转换方法。
一、原理
时间戳的原理是把时间格式转为十进制格式,这样就方便时间的计算。好~ 直接进入主题。(下面封装了一个类,有需要的同学可以参考或是直接Copy 就可以用了。)
如: 2013年08月23日 转化后是 1377216000000
二、步骤
1、创建 DateUtilsl类。
代码如下 |
复制代码 |
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
/*
* @author Msquirrel
*/
public class DateUtils {
privateSimpleDateFormat sf = null;
/*获取系统时间 格式为:"yyyy/MM/dd "*/
public static String getCurrentDate() {
Date d = newDate();
sf = newSimpleDateFormat("yyyy年MM月dd日");
returnsf.format(d);
}
/*时间戳转换成字符窜*/
public static String getDateToString(long time) {
Date d = newDate(time);
sf = newSimpleDateFormat("yyyy年MM月dd日");
returnsf.format(d);
}
/*将字符串转为时间戳*/
public static long getStringToDate(String time) {
sdf = newSimpleDateFormat("yyyy年MM月dd日");
Date date = newDate();
try{
date = sdf.parse(time);
} catch(ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
returndate.getTime();
}
|
2、在对应使用的地方调用就可以了。
代码如下 |
复制代码 |
DateUtils.getCurrentDate(); //获取系统当前时间
DateUtils.getDateToString(时间戳); //时间戳转为时间格式
DateUtils.getStringToDate("时间格式");//时间格式转为时间戳
|
本文章来给各位同学详细介绍关于Android 4.0系统的静态路由功能设置方法 ,各位同学可进入参考。
Android 4.0系统的静态路由功能设置方法!如下:
1、打开WIFI
2、点击你需要连接的WIFI接入点名称。
3、输入密码以后,把输入法隐藏一下就会发现“显示密码”和“显示高级选项”。
4、勾选--显示高级选项。
5、下拉一下会出现“IP设置”。
6、将选项中的DHCP改为--静态。
7、改为静态以后,下面继续会出现几项,填写方式如下:
==IP地址:你手机的IP地址,一般是192.168.1.XXX(XXX可以在1-255之间,不能跟路由下的任一设备设置为一样的IP地址)
==网关:你路由器的IP地址(大多数的路由默认IP会是192.168.1.1)
==网络前缀长度:不用修改
==域名1:WIFI接入点所使用的IP地址,一般是192.168.1.1或者192.168.0.1,具体要参考路由上的设置
==域名2:跟域名1一样就可以了
a