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);
}
}
});
掌握数据存储和网络通信技术,能极大地增强安卓应用的实用性和功能性。
浙公网安备 33010602011771号