0

我正在尝试从我的应用程序中打开 android 自己的相机应用程序。它正在工作!但是当我想获取类似的信息时遇到了问题,

-图像 ID

-图像显示名称

-图像标题

-图像数据

-图片尺寸

- 拍摄日期

它应该存储在 MediaStore。我成功获取了图像的路径。之后,我必须获取上述信息,但是当我尝试获取信息时,应用程序会抛出异常。

部分我的代码是这样的:

while(cursor.moveToNext())
    {
        Date date = new Date(Long.valueOf(cursor.getString(5)));
        SimpleDateFormat dateF = new SimpleDateFormat("yyyy/MM/dd");
        SimpleDateFormat timeF = new SimpleDateFormat("HH:mm");

        imageListInfo.add(
                cursor.getString(0) + ";" 
                + cursor.getString(1) + ";" 
                + cursor.getString(2) + ";" 
                + cursor.getString(3) + ";" 
                + cursor.getString(4) + ";"
                + dateF.format(date) + ";"
                + timeF.format(date)
                );
    }

在我捕获并保存从我的应用程序调用的默认相机应用程序中的照片之前,没有任何问题。

我认为应该解决一个问题。我如何在不从我的应用程序调用的情况下保存图像及其信息,例如捕获照片?

编辑:

获取 id "cursor.getString(0)" 代码时会发生这种情况

android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: 
cursor is deactivated prior to calling this method.
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at android.database.CursorWrapper.getString(CursorWrapper.java:114)
at com.canberk.data.warehouse.BaseActivity.indexingForImageMediaStore(BaseActivity.java:313)
at com.canberk.data.warehouse.BaseActivity$BackGroundWorker.doInBackground(BaseActivity.java:109)
at com.canberk.data.warehouse.BaseActivity$BackGroundWorker.doInBackground(BaseActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)

提前致谢

4

2 回答 2

2

但是当我想获取诸如...之类的信息时遇到了问题,这些信息应该存储在 MediaStore

好吧,只有MediaStore当用户直接调用相机应用程序来拍照时,该数据才会出现。当应用程序被调用以Intent将照片返回给您的应用程序时,图像数据可能会保存在您请求的位置,但没有任何内容隐式存储在MediaStore.

MediaStore如果您的应用程序正在请求照片,一种常见的技术是首先使用您想要关联的所有初始元数据进行插入,这将返回Uri您可以传递给相机应用程序以存储捕获的图像。然后返回后,如果您需要输入其他元数据,例如图像大小,您可以读取此信息并更新数据库。

于 2012-12-09T19:51:46.963 回答
1

您的堆栈跟踪似乎不言自明:您正在访问一个封闭CursorindexingForImageMediaStore().

于 2012-12-09T20:02:46.417 回答