在android studio中我现在有一个书单表,现在我要实现一个能将本地照片设为书籍的封面,并且存放数据库中
时间: 2023-06-19 09:06:56 浏览: 48
实现这个功能需要分为两个步骤:选择本地照片作为封面,将封面存储到数据库中。
1. 选择本地照片作为封面
可以使用Android自带的图库来选择照片,具体实现如下:
```java
//声明一个常量,用于标识请求图库
private static final int REQUEST_CODE_PICK_IMAGE = 1;
//打开图库
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
```
在`onActivityResult`方法中获取选择的照片:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_PICK_IMAGE && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri imageUri = data.getData();
//TODO: 显示选择的照片
}
}
```
2. 将封面存储到数据库中
可以使用SQLite数据库来存储书籍的封面,具体实现如下:
首先,在`Book`类中添加一个字段`cover`,表示书籍的封面:
```java
public class Book {
private long id;
private String title;
private String author;
private String publisher;
private String cover; //书籍封面的本地路径
//...
}
```
在`Book`的数据库表中添加一个`cover`列:
```sql
CREATE TABLE book (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
author TEXT NOT NULL,
publisher TEXT NOT NULL,
cover TEXT
);
```
在选择照片后,将照片的本地路径存储到`Book`对象中,并将`Book`对象保存到数据库中:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_PICK_IMAGE && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri imageUri = data.getData();
//获取照片的本地路径
String imagePath = getRealPathFromUri(imageUri);
//更新当前书籍的封面
book.setCover(imagePath);
//将书籍保存到数据库中
BookDatabaseHelper dbHelper = BookDatabaseHelper.getInstance(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("title", book.getTitle());
values.put("author", book.getAuthor());
values.put("publisher", book.getPublisher());
values.put("cover", book.getCover());
if (book.getId() == -1) {
db.insert("book", null, values);
} else {
db.update("book", values, "_id=?", new String[]{String.valueOf(book.getId())});
}
db.close();
}
}
```
其中`getRealPathFromUri`方法可以通过Uri获取照片的本地路径:
```java
private String getRealPathFromUri(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String imagePath = cursor.getString(column_index);
cursor.close();
return imagePath;
}
```
这样就实现了将本地照片设为书籍的封面,并且将封面存放到数据库中的功能。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)