广播接收器
动态注册广播接收器
创建一个类继承BroadcastReceiver
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
receiver = new NetworkChangeReceiver();
registerReceiver(receiver,intentFilter);
动态注册的必须在OnDestroy方法中注销广播接收器
静态注册
直接AndroidStudio创建
在Manifest文件中添加IntentFilter
发送标准广播
Intent intent = new Intent("......");
sendBroadcast(intent);
发送有序广播
sendOrderedBroadcast(intent,null); 第2个参数是权限相关的
在onreceive方法中调用abortBroadcast将截断广播
使用本地广播
LocalBroadcastManager = LocalBroadcastManager.getInstance(this);
发送和注册广播都通过LocalBroadcastManager来进行管理
本地广播不能用静态注册
将数据存储到文件中
Context类提供了一个openFileOutput()方法获得一个输出流
private void save(String data){
FileOutputStream outputStream=null;
BufferedWriter writer = null;
try{
outputStream = openFileOutput("data",MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(outputStream));
writer.write(data);
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(writer!=null){
writer.close();
}
if(outputStream!=null){
outputStream.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
从文件中读取数据
private String load(){
FileInputStream inputStream = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try{
inputStream = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line=reader.readLine())!=null){
content.append(line);
}
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(reader!=null){
reader.close();
}
if(inputStream!=null){
inputStream.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return content.toString();
}
将数据存储在sharedpreference中
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putString("name","张三");
editor.putBoolean("married",false);
editor.apply();
从sharedpreference中读取数据
String name = preferences.getString("name","");
boolean married = preferences.getBoolean("married",false);
SQLite数据库创建
创建一个类继承SQLiteOpenHelper
public class MyDatabase extends SQLiteOpenHelper {
private Context mContext;
public static final String CREATE_BOOK = "create table Book ( " +
"id integer primary key autoincrement, " +
"author text, " +
"price real, " +
"pages integer," +
" name text)";
public MyDatabase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
Toast.makeText(mContext,"创建成功!",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
final MyDatabase database = new MyDatabase(MainActivity.this,"BookStore.db",null,1);
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
database.getWritableDatabase();
}
});
adb shell generic_x86_64:/ # cd /data/data/com.example.broadcasttest/databases/
generic_x86_64:/data/data/com.example.broadcasttest/databases # ls
BookStore.db BookStore.db-journal
generic_x86_64:/data/data/com.example.broadcasttest/databases # sqlite3 BookStore.db
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.
sqlite> .table
Book android_metadata
sqlite> .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE Book ( id integer primary key autoincrement, author text, price real, pages integer, name text);
sqlite>
更新数据库 创建新的表
public static final String CREATE_CATEGORY ="create table Category ( " +
"id integer primary key autoincrement," +
"category_name text," +
" category_code integer)";
public MyDatabase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
sqLiteDatabase.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext,"创建成功!",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("drop table if exists Book");
sqLiteDatabase.execSQL("drop table if exists Category");
onCreate(sqLiteDatabase);
}
}
final MyDatabase database = new MyDatabase(MainActivity.this,"BookStore.db",null,2);
插入数据
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = database.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","红楼梦");
values.put("price",22.5);
values.put("pages",40);
values.put("author","曹雪芹");
db.insert("Book",null,values);
values.clear();
values.put("name","西游记");
values.put("price",21.5);
values.put("pages",43);
values.put("author","吴承恩");
db.insert("Book",null,values);
}
});
更新数据
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = database.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("author","张三");
db.update("Book",values,"name = ?",new String[]{"西游记"});
}
});
查询数据
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = database.getReadableDatabase();
Cursor cursor = db.query("Book",null,null,null,null,null,null);
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("Main",name);
Log.d("Main",author);
Log.d("Main",pages+"");
Log.d("Main",price+"");
}
cursor.close();
}
});
删除数据
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = database.getWritableDatabase();
db.delete("Book","name = ?",new String[]{"西游记"});
}
});
使用LitePal
compile 'org.litepal.android:core:1.6.0'
main目录下创建assets文件夹
创建litepal.xml文件
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="1"></version>
<list>
<mapping class = "com.example.litepaltest.Book"></mapping>
</list>
</litepal>
public class MyApplication extends Application {
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
LitePal.initialize(context);
}
}
继承DataSupport
public class Book extends DataSupport {
private String name;
private String author;
private int pages;
private double price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
创建数据库
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.getDatabase();
}
});
插入数据
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setName("西游记");
book.setAuthor("吴承恩");
book.setPages(10);
book.setPrice(20.1);
book.save();
}
});
查询数据
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
List<Book> books= DataSupport.findAll(Book.class);
for(Book book :books){
Log.d("Main", book.getName());
Log.d("Main", book.getAuthor());
Log.d("Main",book.getPages()+"");
Log.d("Main",book.getPrice()+"");
}
}
});
更新数据
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setAuthor("张三");
book.updateAll("name = ?","西游记");
book.setToDefault("pages");
book.updateAll();
}
});
删除数据
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DataSupport.deleteAll(Book.class,"name = ?","西游记");
}
});
动态注册广播接收器
创建一个类继承BroadcastReceiver
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
receiver = new NetworkChangeReceiver();
registerReceiver(receiver,intentFilter);
动态注册的必须在OnDestroy方法中注销广播接收器
静态注册
直接AndroidStudio创建
在Manifest文件中添加IntentFilter
发送标准广播
Intent intent = new Intent("......");
sendBroadcast(intent);
发送有序广播
sendOrderedBroadcast(intent,null); 第2个参数是权限相关的
在onreceive方法中调用abortBroadcast将截断广播
使用本地广播
LocalBroadcastManager = LocalBroadcastManager.getInstance(this);
发送和注册广播都通过LocalBroadcastManager来进行管理
本地广播不能用静态注册
将数据存储到文件中
Context类提供了一个openFileOutput()方法获得一个输出流
private void save(String data){
FileOutputStream outputStream=null;
BufferedWriter writer = null;
try{
outputStream = openFileOutput("data",MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(outputStream));
writer.write(data);
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(writer!=null){
writer.close();
}
if(outputStream!=null){
outputStream.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
从文件中读取数据
private String load(){
FileInputStream inputStream = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try{
inputStream = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line=reader.readLine())!=null){
content.append(line);
}
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(reader!=null){
reader.close();
}
if(inputStream!=null){
inputStream.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return content.toString();
}
将数据存储在sharedpreference中
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putString("name","张三");
editor.putBoolean("married",false);
editor.apply();
从sharedpreference中读取数据
String name = preferences.getString("name","");
boolean married = preferences.getBoolean("married",false);
SQLite数据库创建
创建一个类继承SQLiteOpenHelper
public class MyDatabase extends SQLiteOpenHelper {
private Context mContext;
public static final String CREATE_BOOK = "create table Book ( " +
"id integer primary key autoincrement, " +
"author text, " +
"price real, " +
"pages integer," +
" name text)";
public MyDatabase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
Toast.makeText(mContext,"创建成功!",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
final MyDatabase database = new MyDatabase(MainActivity.this,"BookStore.db",null,1);
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
database.getWritableDatabase();
}
});
adb shell generic_x86_64:/ # cd /data/data/com.example.broadcasttest/databases/
generic_x86_64:/data/data/com.example.broadcasttest/databases # ls
BookStore.db BookStore.db-journal
generic_x86_64:/data/data/com.example.broadcasttest/databases # sqlite3 BookStore.db
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.
sqlite> .table
Book android_metadata
sqlite> .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE Book ( id integer primary key autoincrement, author text, price real, pages integer, name text);
sqlite>
更新数据库 创建新的表
public static final String CREATE_CATEGORY ="create table Category ( " +
"id integer primary key autoincrement," +
"category_name text," +
" category_code integer)";
public MyDatabase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
sqLiteDatabase.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext,"创建成功!",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("drop table if exists Book");
sqLiteDatabase.execSQL("drop table if exists Category");
onCreate(sqLiteDatabase);
}
}
final MyDatabase database = new MyDatabase(MainActivity.this,"BookStore.db",null,2);
插入数据
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = database.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","红楼梦");
values.put("price",22.5);
values.put("pages",40);
values.put("author","曹雪芹");
db.insert("Book",null,values);
values.clear();
values.put("name","西游记");
values.put("price",21.5);
values.put("pages",43);
values.put("author","吴承恩");
db.insert("Book",null,values);
}
});
更新数据
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = database.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("author","张三");
db.update("Book",values,"name = ?",new String[]{"西游记"});
}
});
查询数据
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = database.getReadableDatabase();
Cursor cursor = db.query("Book",null,null,null,null,null,null);
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("Main",name);
Log.d("Main",author);
Log.d("Main",pages+"");
Log.d("Main",price+"");
}
cursor.close();
}
});
删除数据
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = database.getWritableDatabase();
db.delete("Book","name = ?",new String[]{"西游记"});
}
});
使用LitePal
compile 'org.litepal.android:core:1.6.0'
main目录下创建assets文件夹
创建litepal.xml文件
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="1"></version>
<list>
<mapping class = "com.example.litepaltest.Book"></mapping>
</list>
</litepal>
public class MyApplication extends Application {
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
LitePal.initialize(context);
}
}
继承DataSupport
public class Book extends DataSupport {
private String name;
private String author;
private int pages;
private double price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
创建数据库
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.getDatabase();
}
});
插入数据
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setName("西游记");
book.setAuthor("吴承恩");
book.setPages(10);
book.setPrice(20.1);
book.save();
}
});
查询数据
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
List<Book> books= DataSupport.findAll(Book.class);
for(Book book :books){
Log.d("Main", book.getName());
Log.d("Main", book.getAuthor());
Log.d("Main",book.getPages()+"");
Log.d("Main",book.getPrice()+"");
}
}
});
更新数据
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setAuthor("张三");
book.updateAll("name = ?","西游记");
book.setToDefault("pages");
book.updateAll();
}
});
删除数据
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DataSupport.deleteAll(Book.class,"name = ?","西游记");
}
});