【发布时间】:2018-03-21 13:08:14
【问题描述】:
这里是编程新手。
我正在制作一个应用程序来存储商店中所有商品的数据。
该应用有一个活动,可以在列表视图中显示商品名称和库存数量。 (完成)
单击列表视图项会将您带到另一个活动,该活动显示该特定项目的详细信息,其中包括一张图片(我不知道该怎么做)。
我在数据库中添加了一个这样的 BLOB 类型的列。
@Override
public void onCreate(SQLiteDatabase db) {
String SQL_CREATE_ITEMS_TABLE = "CREATE TABLE "
+ ItemEntry.TABLE_NAME + " ("
+ ItemEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ ItemEntry.COLUMN_ITEM_IMAGE + "BLOB, "
+ ItemEntry.COLUMN_ITEM_NAME + " TEXT NOT NULL, "
+ ItemEntry.COLUMN_ITEM_QUANTITY
+ " INTEGER NOT NULL DEFAULT 0, "
+ ItemEntry.COLUMN_ITEM_COST_PRICE
+ " INTEGER NOT NULL, "
+ ItemEntry.COLUMN_ITEM_SELLING_PRICE + " INTEGER NOT NULL);";
db.execSQL(SQL_CREATE_ITEMS_TABLE);
}
我在详细信息活动中放置了一个“添加图片”按钮,点击后,它应该将用户带到画廊并允许选择一张照片并将照片添加到数据库中并在图像视图中显示照片相同的活动。
这是我在 addImage 按钮上的 onClickListener 代码。
addImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent in = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
in.setType("image/*");
in.putExtra("crop", "true");
in.putExtra("outputX", 100);
in.putExtra("outputY", 100);
in.putExtra("scale", true);
in.putExtra("return-data", true);
startActivityForResult(in, 1);
}
});
这里是onActivityResult方法的代码。
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
Uri imageUri = data.getData();
mImage.setImageURI(imageUri);
}
}
在上面的代码中,我不知道如何将每个项目的照片存储在数据库中。
我检查了其他使用导致 Nullpoint 异常的 get("data") 方法的答案。有些答案使用 TEXT 类型来创建图像列,而另一些则使用 BLOB,所以真的很混乱。
我不担心应用程序变慢或内存不足,所以请帮助我以最简单的方式完成此操作。
【问题讨论】:
-
您需要将其转换为base64广告存储该字符串在数据库中,并在设置imagview时调用该字段
-
您可以将图片的 URI 保存在您的表格中。
-
我同意@SripadRaj,你应该恢复图片的URI,当你在imageview中设置图片时,你可以使用image fromuri来获取图片。
-
谢谢,我使用全局字符串变量来存储图像 URI,但在我的 onActivityResult() 方法中,我无法更新变量以保存 URI。