0

これは常に発生するとは限らないため、何が起こっているのかを正しく理解できません。アプリケーションで写真を撮って変更し、それを外部ストレージに保存します。ギャラリーからではなくファイルマネージャーから新しく保存された画像をアプリケーションで開こうとすると、cursor.getCount()を実行するとクラッシュします。DDMSでは、「カーソルが最後まで閉じられていません」というエラーが表示されます。問題のあるコード、必要に応じてもっと投稿できます、ありがとうございます!psこのコードはstackoverflowの他の回答から取得されています。私は専門家ではないことが予想されるので、しばらくお待ちください。pps保存した後、ギャラリーに表示された画像がすぐに表示されないので、しばらくお待ちください。エラーが消えます。

public static int getOrientation(Context context, Uri photoUri) {
        /* it's on the external media. */
        Cursor cursor = context.getContentResolver().query(photoUri,
                new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null);


        if (cursor.getCount() != 1) { //HERE IS THE PROBLEM
            return -1;
        }

        cursor.moveToFirst();
        return cursor.getInt(0);
    }
4

2 に答える 2

2

あなたは使用することができます

if(cursor.moveToFirst()) 
{
    //Your code here
}

代わりにオフ

cursor.getCount() 

カーソルサイズが0より大きい場合はtrueを返し、そうでない場合はfalseを返します........このように書くことができます.........

if (!cursor.moveToFirst())
   return -1;

else 
   return 1;
于 2012-08-24T13:43:57.453 に答える
0

returnステートメントの代わりにこれを使用してください。カーソルを閉じていないため、カーソルがリークしています

try{

    if (cursor.getCount() != 1) { //HERE IS THE PROBLEM
        return -1;
    }

    int i = 0;
    i++;
    cursor.moveToFirst();
   return cursor.getInt(0);

}finally{
if(cursor != null)
   cursor.close();
}

編集:
ファイルマネージャーからファイルを開くと、URIはfile:/// sdcard / filenameの形式になりますが、Mediastoreはcontent:// media / audio/1の形式のURIしか理解できません。これが、カーソルがnullになる理由です。

1つの方法は、Mediastore全体をクエリして、MediaStore.Images.Media.DATA列を取得し、URIから取得したパスと比較することです。

于 2012-08-24T13:43:03.787 に答える