在安卓中,数据库操作创建调用的方法多样,下面我就提供一种最为合理的操作方法
一、首先创建DB文件夹,创建DBHelper文件
package DB; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /**BDHelper是创建数据库的模板 * Created by Administrator on 2016/8/13. */ public class DBHelper extends SQLiteOpenHelper{ public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context,name, factory,version); } //创建表 @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DBinfo.Table.CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
二、在DB文件夹中创建DBInfo,s数据库的帮助类,主要来存储创建数据库,以及其中表的数据
package DB; /**创建数据库帮助类,及录入创建爱表时候必要的数据 * Created by Administrator on 2016/8/13. */ public class DBinfo { public static class DB { //数据库名称 public static final String DB_NAME="weibo"; //数据库版本 public static final int VERSION=1; } public static class Table{ //数据,删除库创建 public static final String TABLE_NAME="User"; public static final String CREATE_TABLE1="CREATE TABLE IF NOT EXISTS"+TABLE_NAME+"( _id INTEGER PRIMARY KEY AUTOINCREMENT,uerId TEXT,userName TEXT,token TEXT,tokenSecret TEXT,isDefault TEXT,userIcon BLOB)"; public static final String CREATE_TABLE="CREATE TABLE IF NOT EXISTS"+" "+TABLE_NAME+"(" +"_id INTEGER PRIMARY KEY AUTOINCREMENT," +"userId TEXT," +"userName TEXT," +"token TEXT," +"tokenSecret TEXT," +"isDefault TEXT," +"userIcon BLOB)"; public static final String DROP_TABLE="DROP TABLE"+TABLE_NAME; } }
三、创建Bean文件夹,创建UserInfo类,主要是一个JAVABEAN,是用来统一存储数据的
package Bean; import android.graphics.drawable.Drawable; /**用于传入数据 * Created by Administrator on 2016/8/13. */ public class UserInfo { private int _id; private String userId; private String userName; private String token; private String tokenSecret; private String isDefault; private Drawable userIcon; public UserInfo( String userId, String userName, String token, String tokenSecret, String isDefault) { this.userId = userId; this.userName = userName; this.token = token; this.tokenSecret = tokenSecret; this.isDefault = isDefault; } public int get_id() { return _id; } public void set_id(int _id) { this._id = _id; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public String getTokenSecret() { return tokenSecret; } public void setTokenSecret(String tokenSecret) { this.tokenSecret = tokenSecret; } public String getIsDefault() { return isDefault; } public void setIsDefault(String isDefault) { this.isDefault = isDefault; } public Drawable getUserIcon() { return userIcon; } public void setUserIcon(Drawable userIcon) { this.userIcon = userIcon; } }
四、创建Service包,在里面创建UserInfoServices类,用于写数据库中对表的增删改查等统一操作
/**对user表进行创建正删改查等操作 * Created by Administrator on 2016/8/13. */ public class UserInfoServices { //这种只是说明变量 private static DBHelper dbHelper; private UserInfo userInfo=new UserInfo(); private String[] couloms=new String[]{userInfo.ID,userInfo.USER_ID,userInfo.USER_NAME,userInfo.TOKEN, userInfo.TOKEN_SECRET,userInfo.IS_DEFAULT,userInfo.USER_ICON};
创建数据库放在构造函数中进行 public UserInfoServices(Context context) { //这种才是实例化对象 dbHelper=new DBHelper(context, DBinfo.DB.DB_NAME,null,DBinfo.DB.VERSION); dbHelper.getWritableDatabase(); } /** * 创建数据库,表 * @param context */ // public void createTable(Context context){ // dbHelper=new DBHelper(context, DBinfo.DB.DB_NAME,null,DBinfo.DB.VERSION); // dbHelper.getWritableDatabase(); // } /** * 添加用户信息 * @param userInfo */ public void insertUserInfo(UserInfo userInfo){ SQLiteDatabase db=dbHelper.getWritableDatabase(); ContentValues values= new ContentValues(); values.put("userId",userInfo.getUserId()); values.put("userName",userInfo.getUserName()); values.put("token",userInfo.getToken()); values.put("tokenSecret",userInfo.getTokenSecret()); values.put("isDefault",userInfo.getIsDefault()); db.insert(DBinfo.Table.TABLE_NAME,null,values); db.close(); } /** * 更新用户信息 * @param userInfo */ public void updateUserInfo(UserInfo userInfo){ SQLiteDatabase db=dbHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("token",userInfo.getToken()); values.put("tokenSecret",userInfo.getTokenSecret()); db.update(DBinfo.Table.TABLE_NAME,values,"userId=?",new String[]{userInfo.getUserId()}); db.close(); } /** *查询用户userId * @return */ public String getUserId(String id){ SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query(DBinfo.Table.TABLE_NAME, null, "userId=?", new String[]{id}, null, null, null); if(null != cursor && cursor.getCount() >0) { cursor.close(); db.close(); return "1111"; }else{ cursor.close(); db.close(); return null; } } /** * 获取数据库中所有的数据,放在集合中 * @return */ public List<UserInfo> findAllUsers() ????????private Handler handler只是声明变量,如果有空指针一定要实例化,这里可以放在构造函数中进行 { SQLiteDatabase db =dbHelper.getReadableDatabase(); Log.d("1231321","++++++"); List<UserInfo> users=new ArrayList<UserInfo>(); Cursor cursor = db.query(DBinfo.Table.TABLE_NAME,null, null, null, null, null, null); if(null != cursor && cursor.getCount() >0) { UserInfo userInfo ; while(cursor.moveToNext()) { userInfo = new UserInfo(); int id =cursor.getInt(cursor.getColumnIndex("_id")); String uId = cursor.getString(cursor.getColumnIndex("userId")); String userName = cursor.getString(cursor.getColumnIndex("userName")); String token = cursor.getString(cursor.getColumnIndex("token")); String tokenSecret = cursor.getString(cursor.getColumnIndex("tokenSecret")); String isDefault = cursor.getString(cursor.getColumnIndex("isDefault")); byte[] byteIcon = cursor.getBlob(cursor.getColumnIndex("userIcon")); userInfo.set_id(id); userInfo.setUserId(uId); userInfo.setIsDefault(isDefault); userInfo.setToken(token); userInfo.setTokenSecret(tokenSecret); userInfo.setToken(token); userInfo.setUserName(userName); if(null !=byteIcon) { ByteArrayInputStream is = new ByteArrayInputStream(byteIcon); Drawable userIcon=Drawable.createFromStream(is, "image"); userInfo.setUserIcon(userIcon); } users.add(userInfo); } } cursor.close(); db.close(); return users; } }
五、最后一步,在Activity类中写入你要创建数据库和表的语句
package app.coolweather.com.weibo; import android.app.Activity; import android.os.Bundle; import android.util.Log; import Bean.UserInfo; import Services.UserInfoServices; import Util.AutoUtil; import Util.JavascriptUtil; /** * Created by Administrator on 2016/8/12. */ public class AccessActivity extends Activity { private JavascriptUtil javascriptUtil=new JavascriptUtil(); private String data; private AutoUtil autoUtil=new AutoUtil(); private UserInfoServices userInfoServices=new UserInfoServices(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); data=javascriptUtil.PIN; do{ data=javascriptUtil.PIN; //不停地去读data的值,知道读到为止,因为view.loadUrl("javascript:window.Methods.getPin('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); //和Intent是异步处理的,当处理第一个的时候,不等结果返回就会执行Intent,实现页面的跳转 }while(data==null);Log.d("DATA的值位:",data); autoUtil.getAccessToken(data); userInfoServices=new UserInfoServices(getApplicationContext());//创建表 if(userInfoServices.getUserId(autoUtil.userId)==null) { userInfoServices.insertUserInfo(new UserInfo(autoUtil.userId, autoUtil.accessToken.getScreenName(), autoUtil.token, autoUtil.tokenSecret, "1")); }else{ Log.d("数据库:","有数据Id"); userInfoServices.updateUserInfo(new UserInfo(autoUtil.userId, autoUtil.accessToken.getScreenName(), autoUtil.token, autoUtil.tokenSecret, "1")); } Intent intent = new Intent(this, LoginActivity.class); startActivity(intent);}
第六步、在登录页面中判断数据库中是否有数据
package app.coolweather.com.weibo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Window; import java.util.List; import Bean.UserInfo; import Services.UserInfoServices; /** * Created by Administrator on 2016/8/3. */ public class LoginActivity extends Activity { private UserInfoServices userInfoServices; private List<UserInfo> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); requestWindowFeature(Window.FEATURE_NO_TITLE); // // Intent intent=new Intent(getApplicationContext(),AuthActivity.class); // startActivity(intent); init(); } public void init(){ userInfoServices=new UserInfoServices(getApplicationContext()); list=userInfoServices.findAllUsers(); if(list==null||list.isEmpty()){ Intent intent=new Intent(getApplicationContext(),AuthActivity.class); startActivity(intent); finish(); }else{ Log.d("点击下拉框","111111111111111"); } } }第七点、重点:当一个页面中存在存在webview的loadView验证处理和页面跳转时,需要运用thread来实现睡眠