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)
                );
    }

デフォルトのカメラアプリケーションから私のアプリケーションから呼び出された写真をキャプチャして保存する前は、問題はありませんでした。

解決すべき問題が1つあると思いますが、アプリケーションから呼び出さずに写真をキャプチャするなどの情報を含む画像を保存するにはどうすればよいですか?

編集:

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

あなたのスタックトレースは自明のようです:あなたはCursorから閉じたものにアクセスしていindexingForImageMediaStore()ます。

于 2012-12-09T20:02:46.417 に答える