0

ここで、managedQuery カーソルを使用するコードの単純なセクションで問題が発生しました。コードの上半分は、MediaStore データベース コンテンツ プロバイダーの LATITUDE 列に文字列を挿入します。

以下のコードの 2 番目の部分は、データベースから同じ文字列を読み取ります。これは、null の結果を返す場所です。コードの最初の部分で文字列がデータベースに正しく読み取られなかったか、データベースから文字列を読み取る 2 番目の部分にエラーがあるためです。

Media.images コンテンツ プロバイダーの LATITUDE 列を使用して文字列を格納しています。使用可能な他の未使用の列がないため、使用しています。目標は、mp3 ファイルの文字列パス名を画像の LATITUDE 列に入れ、後で別のクエリで再度読み取ることです。

問題を次のコードまで追跡しました。コードの 2 番目の部分のカーソルが null を返しています。カーソルの使用に何か問題がありますか、それとも私が知らないエラーですか?

  String displayName; // string pathname of the mp3 file to be put into LATITUDE column
  String filename; // the pathname of the image that I want to add the database info to

  ContentValues imageValues = new ContentValues();
  String selection3 = MediaStore.Images.Media.DATA + "='" + filename +"'";
  imageValues.put(MediaStore.Images.Media.LATITUDE, displayName);
  getContentResolver().update(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
  imageValues, selection3, null);

  String[] proj6 = { MediaStore.Images.Media.LATITUDE };
  String selection6 = MediaStore.Images.Media.DATA + "='" + filename +"'";
  Cursor cursor2 = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
  proj6, selection6, null, null);
   cursor2.moveToFirst();        
  String displayer = (String)
  cursor2.getString(cursor2.getColumnIndex(MediaStore.Images.Media.LATITUDE));
4

1 に答える 1

0

思っていたようなエラーはなかったことがわかりました。単なる入力ミスでした。

put メソッドには "Images.Media.LATITUDE" があります update メソッドには "Audio.Media.LATITUDE" がありますが、これを put メソッドのように "Images.Media.LATITUDE" に変更し、動作するようになりました。

  imageValues.put(MediaStore.Images.Media.LATITUDE, displayName);
  getContentResolver().update(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
  imageValues, selection3, null);
于 2012-12-18T00:56:12.170 に答える