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

本文介绍了一种在安卓应用中创建和操作SQLite数据库的详细步骤,包括数据库和表的创建、数据的增删改查等核心操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在安卓中,数据库操作创建调用的方法多样,下面我就提供一种最为合理的操作方法

一、首先创建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来实现睡眠

andriod移动端记事本一、题目要求 设计并实现一个基于 Android 原生开发技术的移动端记事本系统。该系统应具备以下功能: 笔记管理:用户可以创建、编辑、删除和查看笔记。 分类功能:用户可以为笔记添加分类标签(如“工作”“生活”“学习”等)。 搜索功能:用户可以通过关键词搜索笔记内容。 数据存储:笔记数据应持久化存储,支持本地存储。 界面友好:界面简洁美观,用户体验良好。 二、界面设计稿 1. 主界面(MainActivity) 顶部导航栏: 标题:记事本 右侧按钮:添加笔记(+图标) 中间内容区: 列表显示所有笔记的标题和分类标签。 每个笔记条目可以击进入查看详细内容。 底部导航栏: 搜索按钮 设置按钮 2. 添加/编辑笔记界面(AddEditNoteActivity) 顶部导航栏: 标题:添加笔记/编辑笔记(根据操作显示) 右侧按钮:保存 中间内容区: 标题输入框(EditText) 内容输入框(EditText,支持多行) 分类选择(Spinner下拉菜单) 底部: 保存按钮(与导航栏的保存按钮功能一致) 3. 笔记详情界面(NoteDetailActivity) 顶部导航栏: 标题:笔记详情 右侧按钮:编辑按钮 中间内容区: 显示笔记标题 显示笔记内容 显示分类标签 底部: 删除按钮 4. 搜索界面(SearchActivity) 顶部导航栏: 标题:搜索笔记 返回按钮 中间内容区: 搜索框(EditText) 搜索结果列表(显示匹配笔记的标题和分类) 5. 设置界面(SettingsActivity) 顶部导航栏: 标题:设置 返回按钮 中间内容区: 主题切换(夜间模式/白天模式) 关于应用(击后弹出对话框显示版本信息) 三、系统设计方案 1. 技术选型 开发工具:Android Studio 开发语言:Java/Kotlin 数据存储SQLite 数据库 2. 功能模块设计 笔记模块: 数据结构:Note 类,包含 id(主键)、title(标题)、content(内容)、category(分类)、timestamp(时间戳)。 数据库表结构:notes 表,字段包括 id(INTEGER)、title(TEXT)、content(TEXT)、category(TEXT)、timestamp(TEXT)。 功能:创建、读取、更新、删除笔记。 - 分类模块: 数据结构:Category 类,包含 id(主键)、name(分类名称)。 数据库表结构:categories 表,字段包括 id(INTEGER)、name(TEXT)。 功能:添加、删除、显示分类。 - 搜索模块: 功能:通过关键词搜索笔记标题或内容,返回匹配的笔记列表。 - 数据存储模块: 使用 SQLite 数据库,创建 NoteDatabaseHelper 类,继承 SQLiteOpenHelper,实现数据库的创建、升级和数据操作。 - 界面模块: 使用 XML 布局文件定义界面,使用 RecyclerView 显示笔记列表,Spinner 实现分类选择。 使用 Intent 在不同 Activity 之间传递数据。 3. 数据流设计 - 启动应用: 主界面加载,从数据库中读取笔记数据,显示在列表中。 - 添加笔记: 击添加按钮,跳转到添加笔记界面。 输入标题、内容和选择分类后,击保存按钮,将数据存储数据库,并返回主界面刷新列表。 - 查看笔记: 击笔记条目,跳转到笔记详情界面。 击编辑按钮,跳转到编辑笔记界面,修改后保存更新数据库击删除按钮,删除笔记并返回主界面刷新列表。 - 搜索笔记: 击搜索按钮,跳转到搜索界面。 输入关键词,搜索数据库中的笔记,显示匹配结果。 4. 代码结构 - MainActivity: 显示笔记列表,处理添加、搜索和设置按钮的击事件。 - AddEditNoteActivity: 提供添加和编辑笔记的界面,处理数据保存逻辑。 - NoteDetailActivity: 显示笔记详情,处理编辑和删除操作。 - SearchActivity: 提供搜索界面,处理搜索逻辑。 - SettingsActivity: 提供应用设置界面,处理主题切换等设置。 - NoteDatabaseHelper: 管理数据库的创建、升级和数据操作。 - Note 类: 定义笔记的数据结构。 - Category 类: 定义分类的数据结构。
05-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值