您的位置:首页 > 数据库

9.将数据存储到数据库中处理显示分离SQLite数据库操作,以及也买跳转的注意点

2016-08-15 13:33 696 查看
在安卓中,数据库操作创建调用的方法多样,下面我就提供一种最为合理的操作方法

一、首先创建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来实现睡眠
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐