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 != nullimageCursor.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 回答