文章的目的为了记录使用java 进行android app 开发学习的经历。本职为嵌入式软件开发,公司安排开发app,临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。
相关链接:
开源 java android app 开发(一)开发环境的搭建-优快云博客
开源 java android app 开发(二)工程文件结构-优快云博客
开源 java android app 开发(三)GUI界面布局和常用组件-优快云博客
开源 java android app 开发(四)GUI界面重要组件-优快云博客
开源 java android app 开发(五)文件和数据库存储-优快云博客
开源 java android app 开发(六)多媒体使用-优快云博客
开源 java android app 开发(七)通讯之Tcp和Http-优快云博客
开源 java android app 开发(八)通讯之Mqtt和Ble-优快云博客
开源 java android app 开发(九)后台之线程和服务-优快云博客
开源 java android app 开发(十)广播机制-优快云博客
开源 java android app 开发(十一)调试、发布-优快云博客
开源 java android app 开发(十二)封库.aar-优快云博客
推荐链接:
开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-优快云博客
开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-优快云博客
开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-优快云博客
开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-优快云博客
开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-优快云博客
本章节主要内容是常态化的存储,SharedPreferences存储组件,sqlite3 数据库存储组件。
在APP中经常需要读写用户密码,或本地信息。这时就需要用到文件和数据库,需要常态化的存储编程。
本章内容如下:
1.SharedPreferences存储组件
2.sqlite3 数据库存储组件
一、SharedPreferences 是一个轻量级的存储组件,用于存储简单的键值对数据。它通常用于存储应用的配置信息、用户偏好设置等。
下面是一个使用 Java 在 Android Studio 中编写 SharedPreferences 读写操作的示例。
1.1新建SharedPreferencesHelper类
public class SharedPreferencesHelper {
private static final String PREFS_NAME = "MyAppPreferences"; // SharedPreferences 文件名
/**
* 保存数据到 SharedPreferences
*
* @param context 上下文
* @param key 键
* @param value 值
*/
public static void saveData(Context context, String key, String value) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.apply(); // 或者使用 editor.commit(),但 apply() 是异步的,性能更好
}
/**
* 从 SharedPreferences 读取数据
*
* @param context 上下文
* @param key 键
* @return 保存的值,如果不存在则返回 null
*/
public static String getData(Context context, String key) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
return sharedPreferences.getString(key, null); // 第二个参数是默认值,如果键不存在则返回
}
/**
* 删除 SharedPreferences 中的某个键值对
*
* @param context 上下文
* @param key 键
*/
public static void removeData(Context context, String key) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove(key);
editor.apply();
}
/**
* 清空 SharedPreferences 中的所有数据
*
* @param context 上下文
*/
public static void clearAllData(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.apply();
}
}
1.2添加MainActivity代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 示例:保存数据
SharedPreferencesHelper.saveData(this, "username", "JohnDoe");
SharedPreferencesHelper.saveData(this, "email", "johndoe@example.com");
// 示例:读取数据
String username = SharedPreferencesHelper.getData(this, "username");
String email = SharedPreferencesHelper.getData(this, "email");
Log.d("username","Username: " + username);
Log.d("email","Email: " + email);
// 示例:删除数据
SharedPreferencesHelper.removeData(this, "email");
// 示例:清空所有数据
SharedPreferencesHelper.clearAllData(this);
}
}
工程最后如下图
二、SQLite3是一个嵌入式数据库系统,它的数据库就是一个文件。
2.1首先需要创建一个 SQLiteOpenHelper 的子类,用于管理数据库的创建和版本管理。
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "example.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "users";
private static final String COLUMN_ID = "id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_AGE = "age";
private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NAME + " TEXT, " +
COLUMN_AGE + " INTEGER)";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
2.2数据库操作类,创建DatabaseManager类用于执行增删改查操作。
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DatabaseManager {
private DBHelper dbHelper;
public DatabaseManager(Context context) {
dbHelper = new DBHelper(context);
}
// 插入数据
public void insert(String name, int age) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DBHelper.COLUMN_NAME, name);
values.put(DBHelper.COLUMN_AGE, age);
db.insert(DBHelper.TABLE_NAME, null, values);
db.close();
}
// 更新数据
public void update(int id, String name, int age) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DBHelper.COLUMN_NAME, name);
values.put(DBHelper.COLUMN_AGE, age);
db.update(DBHelper.TABLE_NAME, values, DBHelper.COLUMN_ID + " = ?",
new String[]{String.valueOf(id)});
db.close();
}
// 删除数据
public void delete(int id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(DBHelper.TABLE_NAME, DBHelper.COLUMN_ID + " = ?",
new String[]{String.valueOf(id)});
db.close();
}
// 查询所有数据
public Cursor getAllData() {
SQLiteDatabase db = dbHelper.getReadableDatabase();
return db.rawQuery("SELECT * FROM " + DBHelper.TABLE_NAME, null);
}
}
3.在Activity中使用,可以使用 DatabaseManager 来执行数据库操作。
import android.database.Cursor;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private DatabaseManager dbManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbManager = new DatabaseManager(this);
// 插入数据
dbManager.insert("Alice", 25);
dbManager.insert("Bob", 30);
// 更新数据
dbManager.update(1, "Alice Smith", 26);
// 删除数据
dbManager.delete(2);
// 查询数据
Cursor cursor = dbManager.getAllData();
if (cursor != null && cursor.moveToFirst()) {
do {
int id = cursor.getInt(cursor.getColumnIndex(DBHelper.COLUMN_ID));
String name = cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_NAME));
int age = cursor.getInt(cursor.getColumnIndex(DBHelper.COLUMN_AGE));
Toast.makeText(this, "ID: " + id + ", Name: " + name + ", Age: " + age, Toast.LENGTH_SHORT).show();
} while (cursor.moveToNext());
cursor.close();
}
}
}
最后工程如下图