0

以下のメソッドでは、コンパイラは return ステートメントで String 変数を返すことを許可しません。ローカル変数をアクティビティのクラス フィールドに変更すると、エラーはなくなります。ただし、画像カーソルから取得した文字列を返したいだけでした。ここで何が問題なのですか?これができない場合、なぜできないのでしょうか。

クラスのグローバル フィールド変数を戻り変数として使用したくありません。oncreate 内のような別のメソッド内でメソッドを呼び出すと、カーソルから文字列情報を取得し、その文字列を返すことにもっと興味がありました。

     public String checkCursor(){
        if(!filename.equals("234")){

        String[] proj = {MediaStore.Images.Media.TITLE};
        String selection = MediaStore.Images.Media.DATA + "='" + filename +"'";

        imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,    proj, selection, null, MediaStore.Images.Media._ID );
        if( imageCursor != null ){
            if( imageCursor.moveToFirst() ){

       String testString = (String) imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.IS_PRIVATE));

            }
        }

        }
        return testString;

        }
4

3 に答える 3

1

あなたの変数testStringは、それが返されるスコープで定義されていません。条件のスコープではなく、「外側のスコープ」(メソッドのスコープ) で定義する必要がありifます。

     public String checkCursor(){
        String testString = null; 
       // ^^      ^^   
       //note the declaration of testString here!
        if(!filename.equals("234")){

        String[] proj = {MediaStore.Images.Media.TITLE};
        String selection = MediaStore.Images.Media.DATA + "='" + filename +"'";

        imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,    proj, selection, null, MediaStore.Images.Media._ID );
        if( imageCursor != null ){
            if( imageCursor.moveToFirst() ){

       testString = (String) imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.IS_PRIVATE));

            }
        }

        }
        return testString;

        }
于 2012-11-24T10:16:40.877 に答える
1

これは、testString内部で宣言および初期化しているifためです。そのため、条件imageCursor != nullまたはimageCursor.moveToFirst()が false に評価されるtestStringと、まったく使用できなくなります。

したがって、次のように使用します。

imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,    proj, selection, null, MediaStore.Images.Media._ID );
String testString = null;
if( imageCursor != null ){
   if( imageCursor.moveToFirst() ){
       testString = (String) imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.IS_PRIVATE));
   }
}
于 2012-11-24T10:18:15.243 に答える
1

問題は if 文で testString を宣言していて、返却したいときに宣言されていない可能性があることです。

于 2012-11-24T10:18:21.037 に答える