3.11

数据存储与网络通信在安卓开发中的应用​
安卓应用常常需要存储和读取数据,常见的数据存储方式有 SharedPreferences、SQLite 数据库和文件存储。​
SharedPreferences 适合存储简单的键值对数据,比如应用的配置信息。以下是使用 SharedPreferences 存储和读取数据的示例:​

// 存储数据​
SharedPreferences sharedPreferences = getSharedPreferences("myPrefs", Context.MODE_PRIVATE);​
SharedPreferences.Editor editor = sharedPreferences.edit();​
editor.putString("username", "John");​
editor.putInt("age", 30);​
editor.apply();​
// 读取数据​
SharedPreferences sharedPreferences = getSharedPreferences("myPrefs", Context.MODE_PRIVATE);​
String username = sharedPreferences.getString("username", "");​
int age = sharedPreferences.getInt("age", 0);​

SQLite 数据库用于存储结构化数据,适用于需要复杂数据管理的场景。下面是一个简单的 SQLite 数据库操作示例,创建一个数据库帮助类 MyDatabaseHelper:​

import android.content.Context;​
import android.database.sqlite.SQLiteDatabase;​
import android.database.sqlite.SQLiteOpenHelper;​
public class MyDatabaseHelper extends SQLiteOpenHelper {​
private static final String DATABASE_NAME = "myDatabase.db";​
private static final int DATABASE_VERSION = 1;​
public static final String TABLE_NAME = "users";​
public static final String COLUMN_ID = "_id";​
public static final String COLUMN_NAME = "name";​
public 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 MyDatabaseHelper(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);​
}​
}​

然后可以进行数据的插入、查询等操作:​

// 插入数据​
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);​
SQLiteDatabase db = dbHelper.getWritableDatabase();​
ContentValues values = new ContentValues();​
values.put(MyDatabaseHelper.COLUMN_NAME, "Alice");​
values.put(MyDatabaseHelper.COLUMN_AGE, 25);​
db.insert(MyDatabaseHelper.TABLE_NAME, null, values);​
db.close();​
// 查询数据​
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);​
SQLiteDatabase db = dbHelper.getReadableDatabase();​
String[] projection = {​
MyDatabaseHelper.COLUMN_ID,​
MyDatabaseHelper.COLUMN_NAME,​
MyDatabaseHelper.COLUMN_AGE​
};​
Cursor cursor = db.query(​
MyDatabaseHelper.TABLE_NAME,​
projection,​
null,​
null,​
null,​
null,​
null​
);​
while (cursor.moveToNext()) {​
int id = cursor.getInt(cursor.getColumnIndexOrThrow(MyDatabaseHelper.COLUMN_ID));​
String name = cursor.getString(cursor.getColumnIndexOrThrow(MyDatabaseHelper.COLUMN_NAME));​
int age = cursor.getInt(cursor.getColumnIndexOrThrow(MyDatabaseHelper.COLUMN_AGE));​
Log.d("Database", "ID: " + id + ", Name: " + name + ", Age: " + age);​
}​
cursor.close();​
db.close();​

在网络通信方面,安卓可以使用 HttpURLConnection 或第三方库如 OkHttp 进行网络请求。以 OkHttp 为例,进行一个简单的 GET 请求:​

OkHttpClient client = new OkHttpClient();​
String url = "https://api.example.com/data";​
Request request = new Request.Builder()​
.url(url)​
.build();​
client.newCall(request).enqueue(new Callback() {​
@Override​
public void onFailure(Call call, IOException e) {​
e.printStackTrace();​
}​
@Override​
public void onResponse(Call call, Response response) throws IOException {​
try (ResponseBody responseBody = response.body()) {​
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);​
String responseData = responseBody.string();​
Log.d("Network", responseData);​
}​
}​
});​

掌握数据存储和网络通信技术,能极大地增强安卓应用的实用性和功能性。

posted @ 2025-03-11 13:59  Echosssss  阅读(11)  评论(0)    收藏  举报