从 sqlite 存储和检索 Uri

2023-12-01

我是一名新手开发人员,目前正在开发一个应用程序,其中部分功能允许用户捕获图像,将其存储在应用程序的文件系统中,并将其引用存储在 SQLite 数据库的列中。然后,用户将能够根据与数据库中关联的任何标准在网格视图中查看这些图像(例如,仅显示特定颜色的图像)。

起初,我实际上“抓取”了捕获图像的文件名并将其存储在数据库中,使用以下代码:

//Initializing Variables:
protected ImageButton _button;
protected ImageView _image;
protected TextView _field;
protected String _path;
protected String name;
protected boolean _taken;
protected static final String PHOTO_TAKEN = "photo_taken";

@Override
protected void onCreate(Bundle savedInstanceState) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newitemui);

    //Creating the "item_images" directory and File:
    File dir = new File("sdcard/item_images"); 
    try
    {
        //Create new directory:
        if(dir.mkdir()) 
        {
            System.out.println("Directory created");
        } 
        else 
        {
            System.out.println("Directory is not created");
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

    //Setting the current time stamp for image name:
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date());

    _image = ( ImageView ) findViewById( R.id.image );
    _field = ( TextView ) findViewById( R.id.field );
    _button = ( ImageButton ) findViewById( R.id.button );
    _button.setOnClickListener( new ButtonClickHandler() );
    name = "IMG_" + timeStamp + ".png";
    _path = Environment.getExternalStorageDirectory() + File.separator + "/item_images" + "/" + name;

    Toast toast = Toast.makeText(NewItemUI.this,"Touch Camera to Capture Image", Toast.LENGTH_LONG);
    toast.show();
    toast.setGravity(Gravity.DISPLAY_CLIP_HORIZONTAL|Gravity.BOTTOM, 0, 200);
}

 public class ButtonClickHandler implements View.OnClickListener 
    {
        public void onClick( View view ){
            startCameraActivity();
        }
    }

 protected void startCameraActivity()
    {
        File file = new File( _path );
        Uri outputFileUri = Uri.fromFile( file );

        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
        intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );

        startActivityForResult( intent, 0 ); 
    }


 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {               
        switch( resultCode )
        {
            //If user did not take photo, return to the original screen with no result:
            case 0:
                break;

            //If user took a photo, insert the image name into database and return to the original screen with the captured image displayed:
            case -1:

                    AppDatabase appdb = new AppDatabase(this);
                    SQLiteDatabase sql = appdb.getWritableDatabase();
                    sql.execSQL("INSERT INTO tblClothingItem (imagePath) VALUES ('"+name+"');");
                    sql.close();
                    appdb.close();

                    onPhotoTaken();
                    break;  
        }

    }

但是我意识到存储的文件名只是应用程序上下文中的普通字符串,实际上并不指向文件系统中存储的任何一张图像。

我想知道的是:

  1. 我怎么能存储图像的Uri在我的 SQLite 数据库中 被捕获
  2. 我将如何根据存储的图像检索它们 要在网格视图中显示的 Uri。

欢迎任何建议、示例代码、反馈。


在我的应用程序中,我想将用户的个人资料图片存储在 SQLite 数据库中,因此我添加了一个字符串列来存储图像路径,图像将从图库中选择

//Executed When user Click on image for selecting profile from Gallery

ImageView profileperson = (ImageView) findViewById(R.id.profileperson);
    profileperson.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i, 1);
        }
    });

String path;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] fillPath = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(selectedImage, fillPath, null, null, null);
        assert cursor != null;
        cursor.moveToFirst();
        path = cursor.getString(cursor.getColumnIndex(fillPath[0]));
        cursor.close();
        profileperson.setImageBitmap(BitmapFactory.decodeFile(path));
    }
}

然后在显示中我使用光标获取图像路径

String employeeimage;
...
employeeimage = cursor.getString(cursor.getColumnIndex("employeeimage"));  //employeeimage is column name

现在我已经在 RecyclerView 中显示所有数据,因此我使用 Adapter 来绑定数据。

List<Data> list = Collections.emptyList();
...
    @Override
public void onBindViewHolder(final ViewHolder holder, final int position) {

    /*
    * get items from list of particular position and set into respective textview
    * */

    String path=list.get(position).employeeImage;

    Picasso.with(context).load(new File(path)).into(holder.imageViewPerson);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 sqlite 存储和检索 Uri 的相关文章

  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 如何在 Android / Java 中获取图像的分辨率

    如何在 Android 中找到任何图像的分辨率 获取存储在磁盘中的图像大小的有效方法 例如获取用户选择上传的图像文件的大小 是使用BitmapFactory Options并设置inJustDecodeBounds为真 这样做你就会获取图像
  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • 强制用户在 Android 中的 EditText 中输入内容

    我的活动中有几个编辑文本 我希望我的用户在提交表单之前正确输入 我该怎么做 我还有旋转器和 RadioGroup 按钮 你可以加验证在提交按钮上单击 private boolean validateFields int yourDesire
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • 安卓无法玩ogg

    有人知道这是什么意思吗 ogg使用phonegap is Media播放 它使用MediaPlayer 05 26 15 41 50 007 1160 3631 E AudioFlinger no more track names avai
  • 将正确的上下文传递给 greendao 的 OpenHelper 构造函数

    如果我理解正确的话 在使用数据库时 我必须执行以下操作 DaoMaster OpenHelper helper new DaoMaster OpenHelper this test db null Override public void
  • Android 应用被 Google Play 拒绝

    我最近向 Google Play 商店提交了一个 Android 应用程序 但收到一条消息说我的应用程序已被拒绝 我不确定问题是什么 也找不到确切的解决方案 拒绝原因 违反了禁止行为条款 内容政策 经过定期审核后 我们确定您的应用程序支持
  • 如何以编程方式断开拨出呼叫

    我使用以下代码以编程方式断开呼叫 但它不起作用 private void callDisconnect try TelephonyManager manager TelephonyManager this getSystemService
  • finish() 完成活动但它仍然在后台

    我有一个关于 android studio 中活动的 finish 方法的问题 我有这个简单的代码 public class MainActivity extends AppCompatActivity Override protected
  • 在 Jetpack Compose 中跨可组合函数重复使用一组预览注释

    在 Jetpack Compose 中迈出第一步 这非常令人惊奇 除了一个恼人的问题 我有一组固定的预览 正常 深色和 RTL Preview name Normal group Screen showBackground true Pre
  • java.lang.IllegalArgumentException:找不到片段的 id 0x1020002 (android:id/content) 的视图

    我正在尝试从一个片段移动到另一个片段 它在片段事务期间显示以下错误 java lang IllegalArgumentException No view found for id 0x1020002 android id content f
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • NoClassDefFoundError:无法解析:Landroid/support/v7/appcompat/R$styleable

    新手尝试完成 Google 提供的我的第一个应用程序教程 在这个致命异常的过程中 我确实导入了很多随机包来消除许多事情的 无法解析 错误 例如 ActionBarActivity EditText Fragment LayoutInflat
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • 在 Honeycomb Android 3.0 中显示 Action Bar 菜单项的图标

    我正在使用 Honeycomb android 3 0 开发 Android 应用程序 我正在尝试在 Action Bar 中显示菜单 菜单有一个图标和标题 当我们单击菜单项时 它会以下拉列表的形式显示其项目 它是下拉列表中带有项目名称但不
  • 直接使用从密钥库加载的 SecretKey 时,密钥用户未经过身份验证

    我正在尝试使用 Cipher 和在 KeyStore 中加载的 SecretKey 来加密数据 但总是收到此错误 导致 android security KeyStoreException 关键用户未经过身份验证 我尝试自己创建 Secre
  • 安卓的限制

    我需要构建一个应用程序 该应用程序拍摄相机图像并将其上传到网络 在网络上进行一些处理并返回真 假 我在这方面遇到了一些问题 希望得到澄清 1 我的应用程序有什么方法可以知道 Android 相机捕获的图像吗 我从这里明白了什么 Androi

随机推荐

  • 如何使用 python-docx 以编程方式在 MS Word 中的页面布局中实现列

    我需要实现word文档的设计 我必须使用 python docx 库以编程方式将该文档的页面布局设置为 2 列布局 请帮忙 我用谷歌搜索这个问题并关注你在 stackoverflow 和谷歌论坛上的评论 我解决了这个问题 下面的代码帮助了我
  • 如何在管理表单的日期字段中接受本地化日期格式(例如 dd/mm/yy)?

    是否可以自定义 django 应用程序以在管理表单的 DateField 中接受本地化日期格式 例如 dd mm yy 我有一个模型类 class MyModel models Model date models DateField Dat
  • 将日期转换为正确的格式

    我有一个网络服务 它通过以下方式返回我的日期 Wed Oct 31 11 59 44 0000 2012 但我希望它以这种方式还给我 31 10 2012 11 59 我知道应该使用 NSDateFormatter 来完成 但我现在不知道如
  • 在 PHP 中使用具有抽象类型的 WSDL

    我正在研究我们的 Web 应用程序和 Microsoft Exchange 2007 之间的集成 我正在使用 Exchange Web 服务 EWS 与 Exchange Server 进行通信 但是 我在使用 WSDL 时遇到了一些问题
  • 从 BroadcastReceiver 更新 Activity

    这个问题提出了一个有趣的问题 OP 有一个显示地图的应用程序 该地图需要使用通过 SMS 消息接收的位置标记进行更新 各个步骤相当简单 SMS 消息可以由BroadcastReceiver 标记可以通过ItemizedOverlay在一个上
  • 将 JTextArea 或 JTextPane 中的文本居中 - 水平文本对齐

    有没有办法像 JTextField 一样为 JTextArea 创建水平居中的文本 setHorizontalAlignment JTextField CENTER 有没有办法可以使用多行文本区域完成同样的事情 我找不到 JTextArea
  • Firebase 存储和访问控制允许来源

    我正在尝试通过 XMLHttpRequest 从 Firebase Storage 下载文件 但资源上未设置 Access Control Allow Origin 因此这是不可能的 有没有办法在存储服务器上设置这个标头 let xhr j
  • PHP/Mysqli:为什么此代码会使插入行加倍?

    我的代码需要帮助 不知何故 我的代码创建了两个房间 它一次将两行插入表中 我不知道为什么 我需要每个插入都需要一个 id 才能知道我们在哪个房子中创建一个新房间 我的数据库包含表 house 和表 room 表 room 有一个字段 hou
  • python用多个键填充搁置对象/字典

    我有一个 4 gram 列表 我想用它来填充字典对象 shevle 对象 I go to work I go there often it is nice being I live in NY I go to work 这样我们就有了类似的
  • Python 中递归调用的 return 语句如何保存中间值?

    正在查看一些与递归调用相关的 python 代码 并注意到 return 语句看起来很有趣 当下一次递归调用的返回语句中没有变量赋值时 递归如何工作 当进行递归调用时 中间求和值没有存储在明显的位置 调试器似乎显示列表每次调用都会减少一 但
  • NLog 内部记录器的编程配置

    任何人都可以帮助 NLog 内部记录器的编程配置吗 我有各种目标 电子邮件目标不发送任何电子邮件 尽管它确实有日志记录规则 所以我希望通过启用内部日志来获得更多见解 但是 我进行了编程配置 但没有找到任何在代码中设置内部记录器的资源 索姆斯
  • 定义一个特定表格单元格的高度

    我有一个带有两个自定义单元格的 tableView 我需要定义一个单元格的高度 但不理会另一个单元格的高度 我正在尝试学习 Objective C 所以任何帮助将不胜感激 在 UITableView 委托中 实现例程 tableView h
  • 如何比较两个数组列表中至少有一个属性不同的相似对象?

    我有两个数组列表 每个都有用户类型的对象列表 User 类如下所示 public class User private long id private String empCode private String firstname priv
  • 将字节数组转换为字符串 (Java)

    我正在 Google app Engine 中编写一个网络应用程序 它允许人们基本上编辑 html 代码 并将其存储为 htmlblobstore 中的文件 我正在使用 fetchData 返回一个byte 文件中的所有字符 我正在尝试打印
  • 将文本数据库分成 N 个相等的块并保留标题

    我有几个大型 30 百万行 文本数据库 我正在使用以下代码清理它们 我需要将文件拆分为 100 万行或更少 并保留标题行 我查看了 chunk 和 itertools 但无法得到明确的解决方案 它用于 arcgis 模型 根据 icyroc
  • 如何设置引导文本的大小和卡片大小

    我使用引导程序实现了该卡 但我的卡片尺寸根据文本字符的数量而变化 详细信息链接也有所不同 当我缩小浏览器时 它会与我的卡片文本重叠 如何固定卡片文字的大小 类 card text 以避免重叠并避免不同的卡片尺寸 div class card
  • 如何愚弄jqXHR始终成功

    我试图让 jQuery 的 ajax 调用总是返回 就像它们成功一样 例如即使没有网络 我也会返回一些本地保存的数据 这可能吗 我尝试使用 ajaxPrefilter 并调用 jqXHR 的成功函数 但它仍然不会表现得好像请求已经完成 Th
  • 这是我的网络应用程序的“记住我”功能的合法实现吗?

    我正在尝试向我的网络应用程序添加 记住我 功能 以使用户在浏览器重新启动之间保持登录状态 我想我已经得到了大部分 我使用谷歌应用程序引擎作为后端 它允许我使用java servlet 这是一些演示的伪代码 public class MySe
  • Docker 网络 Nginx 解析器

    我正在尝试删除配置中已弃用的 Docker 链接 剩下的就是摆脱那些Bad Gateway当我重新创建容器时 nginx 反向代理错误 注意 我在桥接模式下使用 Docker 网络 docker network create nettest
  • 从 sqlite 存储和检索 Uri

    我是一名新手开发人员 目前正在开发一个应用程序 其中部分功能允许用户捕获图像 将其存储在应用程序的文件系统中 并将其引用存储在 SQLite 数据库的列中 然后 用户将能够根据与数据库中关联的任何标准在网格视图中查看这些图像 例如 仅显示特