1
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 文档,该方法返回一个字符串数组。

谁能告诉我我做错了什么?

4

4 回答 4

2

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

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;
        }
    }
于 2013-07-25T05:44:42.313 回答
1

在你的 else 语句之后加上这一行:

return null;

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

于 2013-07-25T05:44:58.563 回答
1

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

于 2013-07-25T05:46:15.933 回答
1

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

else
    {
    Toast.makeText(getActivity(), "Media Mounted Issue", Toast.LENGTH_SHORT).show();
    // return something here .. If nothing , return null
    }
于 2013-07-25T05:47:17.813 回答