返回字符串数组时编译错误

时间:2013-07-25 05:43:05

标签: java android

public String[] get_file_names_from_SD() /* Compiler complains here */ 
{
    String state = Environment.getExternalStorageState();
    if (state.equals(Environment.MEDIA_MOUNTED)) {
        File root = Environment.getExternalStorageDirectory();
        File dir = new File(root.getAbsolutePath() + "/journal_storage");
        if (dir.exists() & dir.isDirectory()) {
            return (dir.list());            
        }

    } else {
        Toast.makeText(getActivity(), "Media Mounted Issue", Toast.LENGTH_SHORT).show();
    }
}

所以我返回dir.list(),它将包含一个字符串数组但由于某种原因编译器显示错误“此方法必须返回String []类型的结果。”

根据Android documentation,该方法返回一个字符串数组。

任何人都可以告诉我我做错了吗?

4 个答案:

答案 0 :(得分:2)

您方法的所有代码路径都 NOT 返回String[]。您应该还返回String[]块中的nullelse,因为else块是您方法的可访问代码块。

public String[] get_file_names_from_SD() /*Compiler complains here*/
    {
        String state = Environment.getExternalStorageState();
        if(state.equals(Environment.MEDIA_MOUNTED))
        {
            File root = Environment.getExternalStorageDirectory();
            File dir = new File(root.getAbsolutePath()+"/journal_storage");
            if(dir.exists() & dir.isDirectory())
            {
                return(dir.list());

            }

        }
        else
        {
        Toast.makeText(getActivity(), "Media Mounted Issue", Toast.LENGTH_SHORT).show();
        //--> return null;
        }
    }

答案 1 :(得分:1)

在你的其他声明之后这条线:

return null;

这将保证您的方法将成功返回。但是,您应该注意调用此方法的NullPointerException

答案 2 :(得分:1)

并非所有的调用路径都会导致返回String [],例如如果您的SD卡未安装,则控制将转到else块并且不返回任何内容。您可以在块的末尾使用return null;语句结束它,以使该错误消失。

答案 3 :(得分:1)

你的else块没有返回任何东西..那就是抛出错误

else
    {
    Toast.makeText(getActivity(), "Media Mounted Issue", Toast.LENGTH_SHORT).show();
    // return something here .. If nothing , return null
    }