***************************************************************************************************************************************************************************************
也许你的主页面的列表信息是登录之后,通过网络加载的,那这样设置会导致用户每次进入主页面有加载的延迟,你可能会说,可以设置进度框,那网络情况不好的时候, 不是会一直在界面打转,"请稍候.."的字样长时间显示,这就会给用户造成不好的体验,那怎么样可以既要实现存储功能,又要不影响用户体验?也许你的应用中使用了同步手机通讯录的功能,那用户在同步并修改联系人之后,退出登录,过段时间,重新登录,想找之前修改的联系人打电话唠会,发现又需要重新同步,并且同步后的联系人也不是之前修改的?。。。诸如此类问题,开发中会遇到很多,那该怎么解决这个问题呢?这样我们就不可避免要用到缓存功能,好,接下来选择存储方式:使用sharePreference,存储数据有点小,不合适,ContentProvider,手机存储比较合适,。。。这时候是不是会想到数据库,Android自带的数据库SQLiteDatabase,感觉差不多,下面我们来试试,看能否满足我们的需求:存储主页面数据信息,以备下次登录避免重新网络请求
首先来说一下SQLiteDatabase 是什么?
SQLiteDatabase 是小型的嵌入式数据库,以文件进行存储。
在Andrdoid系统中已经集成了该数据库,故在进行Andrdoid程序开发的时候可以很方便的获取该数据库,从而进行增、删、改、查的操作。
1. SQL语句
a.建表语句:create table table_name(column_name1, column_type1,column_name2,column_type2,)
b.插入语句:insert into table_name(column_name1,column_name2,......)values (column_data1,column_data2,......)
c.更新语句:update table_name set column_name= column_newData where column_name = column_data ;
d. 删除语句:delete from table_name where column_name = column_data ;
e.查询语句:select column_name1,column_name2,...from table_name where column_name = column_data ;
查询所有数据:select * from table_name ;
f.删除表语句:drop table table_name ;
2.数据类型
text 文本型
integer 整数型
null 空数据
double/float/real 小数型
3. 使用方法
SQLiteDatabase 对象的创建需要借助辅助类SQLiteOpenHelper
a.创建SQLiteOpenHelper的子类,添加构造方法,用于指明创建出来的数据库的相关信息
参数一:上下文
参数二:指定获取数据库的名字
参数三:指定创建游标的工厂对象
参数四:指定数据库的版本号
b.重写onCreate()和onUpgrade()方法
当数据库对象被系统创建的时候,系统会调用onCreate()方法,做一些初始化工作,该方法只会在数据库第一次被创建的时 候才会被系统调用
c. 创建SQLiteOpenHelper类的对象,传入数据库的信息
d.借助于辅助类获取数据库对象
getReadableDatabase()与getWritableDatabase()这两个方法获取的都是可读可写的数据库,仅在手机存储空间不足,Readable方法返回的才是一个只可读的数据库
e.调用数据库对象的增、删、改、查方法,进行数据的操作
4.事务回滚
a. 获取helper对象
b. 获取数据库对象
c.开启事务
d.将事务添加到try...catch...中
e.标记事务执行成功(如果不调用该方法,事务是不会提交的)
setTranctionSuccessful()
f. 在finally中关闭事务
endTransaction()
g. 在onDestroy()中关闭数据库
database.insert(String table, String nullColumnHack, ContentValues values);
database.update(String table, Contentvalues values, String whereClause, String whereArgs);
第一个参数表示插入数据的数据表的名称,第二个参数表示当values参数为空或者里面没有内容的时候,insert会失败(底层数据
库不允许插入一个空行),为了防止这种情况,要在这里指定一个列名,到时候如果发现将要插入的行为空时,就会将你指定的这个
列明的值设为null,然后在向数据库中插入
第三个参数是ContentValues类型的变量,由K-V形式组成,和Map使用方法类似 ,Key代表要插入的列名,Value代表要插入的值,update方法中的第二个参数,用法与此相同。
update方法中的第三个参数表示查询条件,比如"where _id=?"、" and _id =? or name =? ",而whereArgs 则表示占位符的实际
的参数值,通常用String数组形式体现:new String []{ "%"+ name +"%",_id}
查询的话,虽然说查询的方式比较多,但在我看来都是由最简单的衍生出来的,类似于代码解耦性,那其他查询的方法可以自己
查看Android官方文档,下面介绍一种比较简单的:
database.rawQuery(String sql, String[] selectionArgs);
将你所需要的查询语句,全部拼到sql中,然后里面用到的参数值,用selectionArgs占位符代替,就可以了,
相对于其他方法来说,不用将各个参数分隔开,使用一条sql语句就可以搞定,缺点就是阅读起来可能不太方便,这个根据习惯自己
决定了。
第三个参数是ContentValues类型的变量,由K-V形式组成,和Map使用方法类似 ,Key代表要插入的列名,Value代表要插入的值,update方法中的第二个参数,用法与此相同。
update方法中的第三个参数表示查询条件,比如"where _id=?"、" and _id =? or name =? ",而whereArgs 则表示占位符的实际的参数值,通常用String数组形式体现:new String []{ "%"+ name +"%",_id} 查询的话,虽然说查询的方式比较多,但在我看来都是由最简单的衍生出来的,类似于代码解耦性,那其他查询的方法可以自己查看Android官方文档,下面介绍一种比较简单的: database.rawQuery(String sql, String[] selectionArgs); 将你所需要的查询语句,全部拼到sql中,然后里面用到的参数值,用selectionArgs占位符代替,就可以了, 相对于其他方法来说,不用将各个参数分隔开,使用一条sql语句就可以搞定,缺点就是阅读起来可能不太方便,这个根据习惯自己决定了。
下面新建了一个SQLiteDatabaseDemo项目,一块来看下代码:
先来看主界面:
package com.zhao.sqlitedatabasedemo;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.zhao.sqlitedatabasedemo.adapter.PersonListAdapter;
import com.zhao.sqlitedatabasedemo.db.PersonListHelper;
import com.zhao.sqlitedatabasedemo.utils.NetUtils;
public class MainActivity extends Activity {
private JSONArray array = null;
private Activity activity;
private int currentPage = 1;
private int pageSize = 10;
private String key = "";
private String TAG = "MainActivity";
private ListView lv_person;
private PersonListAdapter personListAdapter = null;
private TextView tv_delete,tv_upate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity = MainActivity.this;
lv_person = (ListView) findViewById(R.id.lv_person);
tv_delete = (TextView) findViewById(R.id.tv_delete);
tv_upate = (TextView) findViewById(R.id.tv_upate);
setData();
setListener();
// AppUtil.myLog(TAG);
}
//设置数据
public void setData() {
/**
* 没有调用网络请求工具类,简单模拟一下啦...
<抱拳>
*
*/
if (!NetUtils.checkNetConnection(activity)) {
// 无网络
Toast.makeText(activity, "当前无网络", Toast.LENGTH_LONG);
array = getData();
PersonListHelper personListHelper = new PersonListHelper(activity);
// 保存数据
personListHelper.savePersonList(array);
// 查询数据
array = null;
array = personListHelper.findPersonList(currentPage, pageSize, key);
personListAdapter = new PersonListAdapter(activity, array);
lv_person.setAdapter(personListAdapter);
} else {
}
}
// 保存数据源
public JSONArray getData() {
array = new JSONArray();
JSONObject obj = null;
for (int i = 1; i <= 100; i++) {
obj = new JSONObject();
try {
obj.put("name", "用户" + i);
if (i % 2 == 0) {
obj.put("sex", 0);
} else {
obj.put("sex", 1);
}
obj.put("address", "东城区东四北大街" + i + "号");
if (i % 3 == 0) {
obj.put("profession", "Android工程师");
} else if (i % 3 == 1) {
obj.put("profession", "架构师");
} else if (i % 3 == 2) {
obj.put("profession", "全栈工程师");
}
array.put(obj);
} catch (JSONException e) {
e.printStackTrace();
}
}
return array;
}
int id = 100 ;
public void setListener() {
//一定是删除item时,调用的删除方法,这里,只做实现数据库删除功能
tv_delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
PersonListHelper personListHelper = new PersonListHelper(activity);
// 保存数据
personListHelper.deletePersonId(String.valueOf(id));
id -- ;
array = null;
array = personListHelper.findPersonList(currentPage, pageSize, key);
personListAdapter = new PersonListAdapter(activity, array);
lv_person.setAdapter(personListAdapter);
}
});
//更新数据写死了,在项目中,可以从数据源中获取数据
tv_upate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
PersonListHelper personListHelper = new PersonListHelper(activity);
// 保存数据
personListHelper.updatePhone("Mr.zhao", "和平里北街..");
array = null;
array = personListHelper.findPersonList(currentPage, pageSize, key);
personListAdapter = new PersonListAdapter(activity, array);
lv_person.setAdapter(personListAdapter);
}
});
}
}
package com.zhao.sqlitedatabasedemo.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
*
* @author Mr.zhao
*/
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public static final int VERSION = 2;
//定义数据库名称
public static final String SQL_NAME = "personInfo.db";
//定义数据表名称,不存在则创建
//public String personInfo = "create table if not exists person_info(_id integer primary key autoincrement,name char,sex char,address char,profession char)";
//这里为了方便测试,就使用每次新建数据表的语句啦
public String personInfo = "create table person_info(_id integer primary key autoincrement,name char,sex char,address char,profession char)";
public MySQLiteOpenHelper(Context context) {
super(context, SQL_NAME, null, VERSION);
}
//创建数据表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(personInfo);
}
// 更新数据库方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
package com.zhao.sqlitedatabasedemo.db;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.ken.androidkit.security.CheckUtil;
import com.zhao.sqlitedatabasedemo.utils.AppUtil;
/**
* 存储工具
*/
public class PersonListHelper {
private String TAG = "PersonListHelper";
private MySQLiteOpenHelper openHelper;
private Context context;
public PersonListHelper(Context context) {
openHelper = new MySQLiteOpenHelper(context);
this.context = context ;
}
/**
* 保存信息
*
* @param jsonObj
*/
public void savePersonList(JSONArray jsonObj) {
SQLiteDatabase database = openHelper.getWritableDatabase();
ContentValues values = new ContentValues();
JSONObject obj = null;
Cursor cursor = null;
for (int i = 0; i < jsonObj.length(); i++) {
try {
obj = jsonObj.getJSONObject(i);
cursor = database.rawQuery("select * from person_info where _id=? ", new String []{AppUtil.getJsonString(obj, "id")});
if(cursor==null || !cursor.moveToNext()){
values.put("name", AppUtil.getJsonString(obj, "name"));
values.put("sex", AppUtil.getJsonString(obj, "sex"));
values.put("address",AppUtil.getJsonString(obj, "address"));
values.put("profession",AppUtil.getJsonString(obj, "profession"));
database.insert("person_info", null, values);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
database.close();
}
/**
* 查询信息 实现分页
*
* @return
*/
public JSONArray findPersonList(int currentPage,int pageSize,String key) {
SQLiteDatabase database = openHelper.getWritableDatabase();
int index = (currentPage-1)*pageSize;
String sql = "select * from person_info ";
sql +=" order by _id desc limit ?,?";//第一个占位符代表请求页数,第二个占位符代表请求条数
Cursor cursor = null;
if(!CheckUtil.isNull(key)){
cursor = database.rawQuery(sql, new String []{ "%"+ key +"%" ,"%"+ key + "%", key,(index)+"",pageSize+""});
}else{
cursor = database.rawQuery(sql, new String []{(index)+"",pageSize+""});
}
JSONArray jsonObj = new JSONArray();
while (cursor.moveToNext()) {
JSONObject obj = new JSONObject();
try {
obj.put("name",cursor.getString(cursor.getColumnIndex("name")));
obj.put("sex", cursor.getString(cursor.getColumnIndex("sex")));
obj.put("address", cursor.getString(cursor.getColumnIndex("address")));
obj.put("profession", cursor.getString(cursor.getColumnIndex("profession")));
obj.put("id", cursor.getString(cursor.getColumnIndex("_id")));
jsonObj.put(obj);
} catch (JSONException e) {
e.printStackTrace();
}
}
cursor.close();
database.close();
Log.i(TAG, jsonObj.toString());
return jsonObj;
}
/**
* 更新方法 为了更全面的演示更新参数使用,这里只更新第一条,同样可以不指定更新条数
*
* @param name 名称
* @param address 地址
*/
public void updatePhone(String name,String address) {
SQLiteDatabase database = openHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name",name);
values.put("address", address);
String whereClause = "_id=?";
String[] whereArgs = new String[] { String.valueOf(100),};
int count = database.update("person_info", values, whereClause, whereArgs);
if (count == 0) {
database.update("person_info", values, null, null);
}
System.out.println(count);
}
/**
* //删除方法
*
* @param id
*/
public void deletePersonId(String id) {
SQLiteDatabase database = openHelper.getWritableDatabase();
String whereClause = "_id=?";
String[] whereArgs = new String[] { String.valueOf(id) };
int count = database.delete("person_info", whereClause, whereArgs);
if (count == 0) {
database.delete("person_info", null, null);
}
System.out.println(count);
database.close();
}
}
package com.zhao.sqlitedatabasedemo.adapter;
import org.json.JSONArray;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
/**
* 适配器
*
*/
public class BaseAdapter extends android.widget.BaseAdapter {
protected Activity activity;
protected JSONArray array;
public void setArray(JSONArray array) {
this.array = array;
}
public BaseAdapter(Activity activity, JSONArray array) {
this.activity = activity;
this.array = array;
}
@Override
public int getCount() {
return array.length();
}
@Override
public Object getItem(int position) {
return array.opt(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
}
package com.zhao.sqlitedatabasedemo.adapter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.zhao.sqlitedatabasedemo.R;
import com.zhao.sqlitedatabasedemo.utils.AppUtil;
/**
* 数据适配器
*
* @author Mr.zhao
*
*/
public class PersonListAdapter extends BaseAdapter {
private Context context;
public JSONArray array = null;
public PersonListAdapter(Context context,JSONArray array ) {
this.context = context;
this.array = array;
}
@Override
public int getCount() {
return array.length();
}
@Override
public Object getItem(int position) {
try {
return array.getJSONObject(position);
} catch (JSONException e) {
e.printStackTrace();
return null ;
}
}
@Override
public long getItemId(int position) {
return position;
}
public ViewHolder viewHolder = null;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
JSONObject obj = null;
try {
obj = array.getJSONObject(position);
} catch (JSONException e) {
e.printStackTrace();
}
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.person_list_item, null);
viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
viewHolder.tv_sex = (TextView) convertView.findViewById(R.id.tv_sex);
viewHolder.tv_address = (TextView) convertView.findViewById(R.id.tv_address);
viewHolder.tv_profession = (TextView) convertView.findViewById(R.id.tv_profession);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tv_name.setText(AppUtil.getJsonString(obj, "name"));
if ("0".equals(AppUtil.getJsonString(obj, "sex"))) {
viewHolder.tv_sex.setText("男");
} else {
viewHolder.tv_sex.setText("女");
}
viewHolder.tv_address.setText(AppUtil.getJsonString(obj, "address"));
viewHolder.tv_profession.setText(AppUtil.getJsonString(obj, "profession"));
return convertView;
}
public class ViewHolder {
private TextView tv_name;
private TextView tv_sex;
private TextView tv_address;
private TextView tv_profession;
}
private static int counter;
public static int countStr(String str1, String str2) {
if (str1.indexOf(str2) == -1) {
return 0;
} else if (str1.indexOf(str2) != -1) {
counter++;
countStr(str1.substring(str1.indexOf(str2) +
str2.length()), str2);
return counter;
}
return 0;
}
}
package com.zhao.sqlitedatabasedemo.utils;
import java.io.File;
import java.math.BigDecimal;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.Fragment;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Environment;
import android.util.Log;
import android.util.SparseArray;
import com.ken.androidkit.security.CheckUtil;
/**
* 常用工具
*
*/
public class AppUtil {
private static final String LOG_TAG = "AppUtil";
private static String SDCARD = "";
public static String getSDCARD(Context context) {
if (sdCardExist()) {
SDCARD = Environment.getExternalStorageDirectory() + "/haodun/";
}else {
SDCARD = context.getCacheDir().getAbsolutePath();
}
return SDCARD;
}
public static boolean sdCardExist(){
boolean sdCardExist = Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在
return sdCardExist;
}
/**
* 记录日志
*
* @param log
*/
public static void myLog(String log) {
if (log == null) {
return;
}
Log.v("haodun", log);
}
public static void myLoge(String log){
if (log == null) {
return;
}
Log.e("haodun", log);
}
/**
* 生成给定位数的随机数字串
*
* @param number
* 位数
* @return
*/
public static String randomNumberString(int number) {
if (number < 1)
return null;
String sample = "1234567890";
Random random = new Random();
char str[] = sample.toCharArray();
char ch[] = new char[number];
for (int i = 0; i < number; i++)
ch[i] = str[random.nextInt(sample.length())];
return new String(ch);
}
/**
* MD5摘要
*
* @param src
* @return
*/
public static String md5Digest(String src) {
if (src == null) return "";
String rst = "";
try {
MessageDigest md = MessageDigest.getInstance("md5");
md.update(src.getBytes());
byte[] dig = md.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < dig.length; i++) {
int digByte = dig[i] & 0xFF;
if (digByte <= 0x0F) sb.append("0");
sb.append(Integer.toHexString(digByte));
}
rst = sb.toString();
} catch (NoSuchAlgorithmException e) {
rst = src;
}
return rst;
}
public static double parseDouble(String v) {
if (CheckUtil.isNull(v) || !CheckUtil.isNum(v)) {
return -1;
}
return Double.parseDouble(v);
}
/**
* string转date
*
* @param dateStr
* @param partten 格式
* @return
*/
public static Date parseDateString(String dateStr, String partten) {
SimpleDateFormat sdf = new SimpleDateFormat(partten, Locale.CHINA);
Date date = null;
try {
date = sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
return date;
}
/**
* data 转 string
*
* @param date
* @param partten 格式
* @return
*/
public static String parseStringDate(Date date, String partten) {
SimpleDateFormat sdf = new SimpleDateFormat(partten, Locale.CHINA);
return sdf.format(date);
}
public static JSONObject getJson(String key, Object value){
return getJson(new String[]{key}, new Object[]{value});
}
public static JSONObject getJson(String[] keys, Object... values){
JSONObject json = new JSONObject();
try {
for (int i = 0; i < keys.length; i++) {
json.put(keys[i], values[i]);
}
} catch (Exception e) {
AppUtil.myLoge(LOG_TAG + e.toString());
}
return json;
}
public static JSONObject editJson(JSONObject json, String key, Object value) {
try {
if (null != json)
json.put(key, value);
} catch (Exception e) {
}
return json;
}
public static JSONObject editJsons(JSONArray jsons, JSONObject json) {
try {
if (null != json) jsons.put(json);
} catch (Exception e) {
}
return json;
}
public static JSONObject getJsonFromArray(JSONArray array, int length){
JSONObject json = new JSONObject();
try {
json = array.getJSONObject(length);
} catch (Exception e) {
AppUtil.myLoge(LOG_TAG + e.toString());
}
return json;
}
public static int getJsonInt(JSONObject json, String keyName) {
try {
if (json==null) {
return -1;
}
return json.getInt(keyName);
} catch (JSONException e) {
myLog(e.getMessage());
return -1;
}
}
public static long getJsonLong(JSONObject json, String keyName) {
try {
if (json==null) {
return -1;
}
return json.getLong(keyName);
} catch (JSONException e) {
myLog(e.getMessage());
return -1;
}
}
public static String getJsonString(JSONObject json, String keyName) {
try {
if (json==null) {
return "";
}
String s = json.getString(keyName);
return (s == null || s.equals("") || s.equals("null")) ? "" : s;
} catch (JSONException e) {
myLog(e.getMessage());
return "";
}
}
public static boolean getJsonBool(JSONObject json, String keyName) {
try {
return json.getBoolean(keyName);
} catch (JSONException e) {
myLog(e.getMessage());
return false;
}
}
public static double getJsonDouble(JSONObject json, String keyName) {
try {
return json.getDouble(keyName);
} catch (JSONException e) {
myLog(e.getMessage());
return -1;
}
}
public static JSONObject getJsonObject(JSONObject json, String keyName) {
try {
return json.getJSONObject(keyName);
} catch (JSONException e) {
myLog(e.getMessage());
return new JSONObject();
}
}
public static JSONObject getJsonObject(JSONArray array, int i) {
try {
return array.getJSONObject(i);
} catch (JSONException e) {
myLog(e.getMessage());
return new JSONObject();
}
}
public static JSONObject fromString(String val) {
if (val == null) return null;
try {
return new JSONObject(val);
} catch (JSONException e) {
myLog(e.getMessage());
return null;
}
}
public static JSONArray arrayfromString(String val) {
if (val == null) return null;
try {
return new JSONArray(val);
} catch (JSONException e) {
myLog(e.getMessage());
return new JSONArray();
}
}
/**
* String转json (取非空json)
*
* @param val
* @return
*/
public static JSONObject fromStringNotNull(String val) {
if (val == null)
return new JSONObject();
try {
return new JSONObject(val);
} catch (JSONException e) {
myLog(e.getMessage());
return new JSONObject();
}
}
public static JSONArray getJsonArray(JSONObject json, String keyName) {
try {
return json.getJSONArray(keyName);
} catch (JSONException e) {
myLog(e.getMessage());
return new JSONArray();
}
}
public static Object getObject(JSONObject json, String keyName) {
try {
return json.get(keyName);
} catch (JSONException e) {
myLog(e.getMessage());
return new JSONObject();
}
}
public static SparseArray
jsonArrayToSpArray(JSONArray jarray){
SparseArray
ret = new SparseArray
();
if (jarray != null && jarray.length() > 0) {
for (int i = 0; i < jarray.length(); i++) {
ret.append(i, jarray.optJSONObject(i));
}
}
return ret;
}
/***
* 检查传入时间是否在今天之前
*
* @param myString
* @param formatstr
* @return
*/
public static boolean checkDate(String myString, String formatstr) {
java.util.Date nowdate = new java.util.Date();
SimpleDateFormat sdf = new SimpleDateFormat(formatstr, Locale.CHINA);
String Ndate = sdf.format(nowdate);
java.util.Date d = null;
java.util.Date dd = null;
try {
d = sdf.parse(myString);
dd = sdf.parse(Ndate);
} catch (ParseException e) {
e.printStackTrace();
}
return d.after(dd);
}
/**
* 比较date1是否在date2之后
*
* @param date1
* @param date2
* @param formatstr
* @return
*/
public static boolean checkDate(String date1, String date2, String formatstr) {
SimpleDateFormat sdf = new SimpleDateFormat(formatstr, Locale.CHINA);
java.util.Date d1 = null;
java.util.Date d2 = null;
try {
d1 = sdf.parse(date1);
d2 = sdf.parse(date2);
} catch (ParseException e) {
e.printStackTrace();
}
return d1.after(d2);
}
/**
* 检测文件是否存在
*
* @param name
* @return 存在返回 true, 否则返回false
*/
public static boolean checkFile(String name, String path) {
File file = new File(SDCARD + path);
if (!file.exists()) {
file.mkdirs();
return false;
}
File listfFile[] = file.listFiles();
if (listfFile == null) return false;
for (File f : listfFile) {
int index = f.getName().lastIndexOf(".");// 根据.分割文件
if (index > 0) {
if (f.getName().substring(0, index).trim().equals(name.trim())) {
return true;
}
}
int j = f.getPath().lastIndexOf("/");// 根据/翻个文件
if (f.getPath().substring(j).equals(name)) {
return true;
}
}
return false;
}
/**
* 删除目录下文件
*
* @param filePath
* @return
*/
public static boolean deleteFile(String filePath) {
File file = new File(filePath);
File listfFile[] = file.listFiles();
if (listfFile == null) return false;
for (File f : listfFile) {
File tFile = new File(filePath + "/" + f.getName());
if (tFile.exists()) tFile.delete();
}
return true;
}
/**
* 删除某个文件
*
* @param filePath
* @return
*/
public static void deleteF(String filePath) {
File tFile = new File(filePath);
if (tFile.exists()) tFile.delete();
}
/**
* 日期转化字符串
*
* @param date
* @return
*/
public static String dateToString(Date date, String form) {
SimpleDateFormat format = new SimpleDateFormat(form, Locale.CHINA);
return format.format(date);
}
/**
* 字符串转化日期
*
* @param date
* @return
*/
public static Date StringToDate(String str, String form) {
Date date = null;
SimpleDateFormat format = new SimpleDateFormat(form, Locale.CHINA);
try {
date = format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/***
* 时间格式转换
*
* @param str 时间字符串
* @param fmt 原格式
* @param tofmt 要转换的格式
* @return
*/
public static String dateStrFormat(String str, String fmt, String tofmt) {
if (str == null || str.length() <= 0) {
return "";
}
SimpleDateFormat format = new SimpleDateFormat(fmt, Locale.CHINA);
SimpleDateFormat toformat = new SimpleDateFormat(tofmt, Locale.CHINA);
Date date = null;
try {
date = format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return toformat.format(date);
}
/**
* 获取今天后n天日期
*
* @param n
* @return
*/
public static Date getUnDate(int n) {
Calendar calendar = Calendar.getInstance();
int y = calendar.get(Calendar.YEAR);
int m = calendar.get(Calendar.MONTH);
int d = calendar.get(Calendar.DAY_OF_MONTH) + n;
calendar.set(Calendar.YEAR, y);
calendar.set(Calendar.MONTH, m);
calendar.set(Calendar.DAY_OF_MONTH, d);
return calendar.getTime();
}
/**
* 获取距离生日天
* @param day
* @param format
* return 0//今天生日,1七天内生日
*/
public static int getBrithday(String bday,String format) {
int i=-1;
if (bday!=null && bday.length()>8) {
Calendar birthDay = Calendar.getInstance();
birthDay.setTime(StringToDate(bday, format));
int month = birthDay.get(Calendar.MONTH);
int day=birthDay.get(Calendar.DAY_OF_MONTH);
Calendar today = Calendar.getInstance();
int curYear = today.get(Calendar.YEAR);
int curMonth = today.get(Calendar.MONTH);
int cruDay=today.get(Calendar.DAY_OF_MONTH);
today.clear();
today.set(curYear, curMonth, cruDay);
Calendar thisBirthDay = Calendar.getInstance();
thisBirthDay.clear();
thisBirthDay.set(curYear, month, day);
int yearDay=365;
if (curYear%4==0) {
yearDay=366;
}
long d= Math.abs((thisBirthDay.getTimeInMillis()-today.getTimeInMillis())/1000/3600/24);
if (d==0) {//今天生日
i=0;
}else if ((d<=7 && d>0) || ((yearDay-d)<=7 && (yearDay-d)>0)) {//七天内生日
i=1;
}else if (d>100 && d<260) {//清除数据时
i=2;
}
}
return i;
}
/**
* 计算两个时间间隔
* 返回毫秒
* @return
*/
public static long doubleTimeSpace(Date starTime, String endTime,String format) {
Date endDate = StringToDate(endTime, format);
long td = starTime.getTime();
long ed = endDate.getTime();
long e = 0;
if (ed > td) {
e = ed - td;
}
return e;
}
/**
* //将毫秒数换算成x天x时x分x秒x毫秒
* @param ms
* @return
*/
public static String formatToDHms(long ms) {
int ss = 1000;
int mi = ss * 60;
int hh = mi * 60;
int dd = hh * 24;
long day = ms / dd;
long hour = (ms - day * dd) / hh;
long minute = (ms - day * dd - hour * hh) / mi;
long second = (ms - day * dd - hour * hh - minute * mi) / ss;
//long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss;
String strDay = day < 10 ? "0" + day : "" + day;
String strHour = hour < 10 ? "0" + hour : "" + hour;
String strMinute = minute < 10 ? "0" + minute : "" + minute;
String strSecond = second < 10 ? "0" + second : "" + second;
//String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + milliSecond;
//strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond : "" + strMilliSecond;
StringBuffer sBuffer=new StringBuffer();
if (day>0) {
sBuffer.append(strDay + "天 ");
}
if (hour>0) {
sBuffer.append(strHour + ":");
}
sBuffer.append( strMinute + ":" );
sBuffer.append( strSecond);
return sBuffer.toString();//+ " " + strMilliSecond;
}
/**
* 是否需要更新apk
* @param activity
* @param version 版本号
* @return true:需要更新 false反之
*/
public static boolean isInstallVersionApk(Activity activity, String version) {
try {
PackageInfo packInfo = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0);
if (null != packInfo) {
String versionName = packInfo.versionName;
//versionName 给用户看的版本号
//String versionName = String.valueOf(packInfo.versionName);
if(!versionName.equals(version)){
return true;
}
}
} catch (NameNotFoundException e){
AppUtil.myLoge("" + e.toString());
}
return false;
}
/**
* 加载class
*
* @param className
* @return
*/
public static Class
formName(String className) {
try {
return Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
/**
* 业务入口
*/
public static Fragment getClass(String entranceAdd) {
Fragment clazz = null;
if (entranceAdd.indexOf("?") != -1) {
entranceAdd = entranceAdd.substring(0, entranceAdd.indexOf("?"));
}
return clazz;
}
// 分解参数
public static void splitParas(String entranceAddStr, JSONObject paras) {
String[] array = entranceAddStr.split("=");
if (array != null && array.length == 2) {
try {
paras.put(array[0], array[1]);
} catch (JSONException e) {
AppUtil.myLoge(LOG_TAG + e.toString());
}
}
}
//
public static List
splitString2Array(String sourceStr, String splitChar) {
List
list = new ArrayList
(); try { String[] array = sourceStr.split(splitChar); for(String s : array){ if (!CheckUtil.isNull(s)) { list.add(s); } } } catch (Exception e) { AppUtil.myLoge(LOG_TAG + e.toString()); } return list; } // 分解url(参数格式Activity?classId=x&name=y) public static SplitResult splitUrl(String entranceAddStr) { SplitResult splitResult = null; if (entranceAddStr == null) return splitResult; if (entranceAddStr.indexOf("?") > 0) { splitResult = new SplitResult(); JSONObject paras = new JSONObject(); splitResult.setActivityName(entranceAddStr.substring(0, entranceAddStr.indexOf("?"))); // 如果有多个参数 entranceAddStr = entranceAddStr.substring(entranceAddStr .indexOf("?") + 1); if (entranceAddStr.indexOf("&") > 0) { String[] array = entranceAddStr.split("&"); if (array != null && array.length > 0) { for (String str : array) { if (str.indexOf("=") > 0) splitParas(str, paras); } } } else { if (entranceAddStr.indexOf("=") > 0) splitParas(entranceAddStr, paras); } splitResult.setParas(paras); } return splitResult; } public static class SplitResult { private String activityName; private JSONObject paras; public String getActivityName() { return activityName; } public void setActivityName(String activityName) { this.activityName = activityName; } public JSONObject getParas() { return paras; } public void setParas(JSONObject paras) { this.paras = paras; } } /** * 检查service是否运行 * @param context * @param classNname * @return */ public static boolean isServiceRunning(Context context,String classNname) { List
list =getRunService(context); for (RunningServiceInfo service : list) { //System.out.println(service.service.getClassName()); if (classNname.equals(service.service.getClassName())) { return true; } } return false; } public static List
getRunService(Context context){ ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); return manager.getRunningServices(Integer.MAX_VALUE); } /** * 获取最大值,(制图时使用) * @param arr * @return */ public static double getDoubleMax(double[] arr) { double max = arr[0]; for(int x=1; x
max) max = arr[x]; } return max; } /** * 获取最小值,(制图时使用) * @param arr * @return */ public static double getDoubleMin(double[] arr) { int min = 0; for(int x=1; x
=1&&between_days<=7){ Date date2 = sdf.parse(time); callTime=getWeekOfDate(date2); }else{ callTime=time.substring(5, 10); callTime=callTime.replace("-", "月"); callTime=callTime.concat("日"); } return callTime; } public static String getSmsTime(String time) throws ParseException{ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(time)); long time1 = cal.getTimeInMillis(); Date date=new Date(); DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowTime=format.format(date); cal.setTime(sdf.parse(nowTime)); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); String callTime=""; if(between_days<1){ String minute=time.substring(11, time.length()-3); callTime="今天"+" "+minute; }else if(between_days>=1&&between_days<=7){ String minute=time.substring(11, time.length()-3); Date date2 = sdf.parse(time); callTime=getWeekOfDate(date2)+" "+minute; }else{ String minute=time.substring(11, time.length()-3); callTime=time.substring(2, 10).replace("-", "/"); callTime=callTime+" "+minute; } return callTime; } public static boolean checkEmail(String email){ boolean flag = false; try{ String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; Pattern regex = Pattern.compile(check); Matcher matcher = regex.matcher(email); flag = matcher.matches(); }catch(Exception e){ flag = false; } return flag; } public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (!Character.isDigit(str.charAt(i))){ return false; } } return true; } }
package com.zhao.sqlitedatabasedemo.utils;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
/**
* 网络连接工具类
*
*/
public class NetUtils {
/**
* 打开网络设置界面
*/
public static void openSetting(Activity activity) {
Intent intent = new Intent("/");
ComponentName cm = new ComponentName("com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(cm);
intent.setAction("android.intent.action.VIEW");
activity.startActivityForResult(intent, 0);
}
/**
* 检查wifi是否可用
*
* @param context
* @return
*/
public static boolean isWifiConnection(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null
&& activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
return false;
}
/**
* 检查mobile是否可用
*
* @param context
* @return
*/
public static boolean isMobileConnection(Context context) {
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (networkInfo != null) {
return networkInfo.isConnected();
}
return false;
}
/**
* 检查是否有网络
*
* @param context
* @return
*/
public static boolean checkNetConnection(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivity.getActiveNetworkInfo();
if (activeNetInfo != null && activeNetInfo.isConnected()) {
if (activeNetInfo.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}
}
更新用户名和地址:
删除缓存信息:
可以了,完成这个功能,当手机没有网络时,也可以让满足用户的视觉体验啦!
****************************************************************************************************************************************************************************************