Android操作sqlite数据库之Grid显示图片
在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的、嵌入式的数据库,广泛用于存储应用程序中的数据。本实例将介绍如何在Android应用中操作SQLite数据库,并以Grid形式展示图片。以下是对该主题的详细讲解:
我们需要创建一个SQLite数据库。在Android中,我们通常创建一个SQLiteOpenHelper的子类,如DatabaseHelper,来处理数据库的创建和版本管理。onCreate()方法用于首次创建数据库时执行的SQL语句,onUpgrade()方法则在数据库升级时调用。
public class DatabaseHelper extends SQLiteOpenHelper {
//数据库版本号
private static final int DATABASE_VERSION = 1;
//数据库名称
private static final String DATABASE_NAME = "gg.db";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建图片表的SQL语句
String CREATE_IMAGE_TABLE = "CREATE TABLE " + "Images" + "(" + "id INTEGER PRIMARY KEY," + "name TEXT," + "path TEXT" + ")";
db.execSQL(CREATE_IMAGE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//升级数据库时的操作,比如删除旧表再创建新表
db.execSQL("DROP TABLE IF EXISTS Images");
onCreate(db);
}
}
接下来,我们需要实现图片的插入、查询和删除操作。例如,可以创建一个ImageModel类来表示图片数据,然后在DatabaseHelper中提供对应的方法:
public class ImageModel {
private int id;
private String name;
private String path;
//构造函数、getters和setters...
}
public class DatabaseHelper {
//插入图片
public long insertImage(ImageModel image) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", image.getName());
contentValues.put("path", image.getPath());
return db.insert("Images", null, contentValues);
}
//查询所有图片
public List
List<ImageModel> imageList = new ArrayList<>();
Cursor cursor = db.query("Images", null);
if (cursor.moveToFirst()) {
do {
ImageModel image = new ImageModel();
image.setId(cursor.getInt(cursor.getColumnIndex("id")));
image.setName(cursor.getString(cursor.getColumnIndex("name")));
image.setPath(cursor.getString(cursor.getColumnIndex("path")));
imageList.add(image);
} while (cursor.moveToNext());
}
return imageList;
}
//删除图片
public void deleteImage(int id) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete("Images", "id=?", new String[]{String.valueOf(id)});
}
}
现在,我们有了数据库操作的基础,接下来就是如何在Grid中显示这些图片。在Android中,我们可以使用GridView控件配合BaseAdapter来实现。创建一个GridViewAdapter,继承自BaseAdapter:
public class GridViewAdapter extends BaseAdapter {
private Context context;
private List
public GridViewAdapter(Context context, List
this.context = context;
this.imageList = imageList;
}
//实现BaseAdapter的方法,如getItemCount(), getItem(), getView()...
}
在getView()方法中,我们将为每个ImageView加载图片,可以使用Glide或Picasso等库来实现图片的异步加载:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.grid_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.imageView = convertView.findViewById(R.id.image_view);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Glide.with(context)
.load(imageList.get(position).getPath())
.into(viewHolder.imageView);
return convertView;
}
static class ViewHolder {
ImageView imageView;
}
在主Activity中设置GridView的数据源和适配器:
public class MainActivity extends AppCompatActivity {
private GridView gridView;
private GridViewAdapter adapter;
private DatabaseHelper dbHelper;
private List
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = findViewById(R.id.gridView);
dbHelper = new DatabaseHelper(this);
imageList = dbHelper.getAllImages();
adapter = new GridViewAdapter(this, imageList);
gridView.setAdapter(adapter);
}
}
以上就是如何在Android中操作SQLite数据库并以Grid形式显示图片的基本步骤。在实际项目中,你可能需要根据具体需求进行更多的定制,比如添加图片的上传、删除功能,或者优化图片加载性能等。记住,始终确保在用户交互过程中处理好线程安全问题,避免在主线程中执行耗时操作。在使用任何外部资源(如压缩包中的数据库)时,一定要确保其安全性和合法性,遵循最佳实践。
相关链接:
图片展示: