如何修复java中的“Missing return statement”

时间:2013-07-25 04:02:22

标签: java android

我正在为Android应用程序创建一个java方法,该应用程序返回应用程序应该在外部目录中工作的目录。

我在处理退货时遇到问题,我不知道如何解决“缺少退货声明”的错误。

public String getpath() {
    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state)) {
        String extdir = Environment.getExternalStorageDirectory().getAbsolutePath();
        File path = new File(extdir, "App");
        if(path.exists()) {
            return path.getAbsolutePath();
        }
        else {
            checkandmakepath();
            getpath();
        }
    }
    else {
        Toast.makeText(this, "Could not access External Directory!", Toast.LENGTH_LONG).show();
        Intent to_main = new Intent(this, MainActivity.class);
        startActivity(to_main);
        MainActivity.this.finish();
    }
}

7 个答案:

答案 0 :(得分:2)

public String getpath()

意味着您的方法将返回一个String对象,该对象只在if语句中完成。将其置于方法的最后,以确保无论您经历何种条件,始终会返回某些内容。 (由于您已经在if分支返回,因此您不需要在其他所有内容的末尾执行此操作。)

return null;

如果你不想在返回路径之前退出方法,你可以为它做一个while循环,但这可能会导致它无限,所以最好通过调用你的方法处理方法改为。

答案 1 :(得分:1)

针对您的问题的可能解决方案(还有更多)返回有评论的内容:

public String getpath() {
    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state)) {
        String extdir = Environment.getExternalStorageDirectory().getAbsolutePath();
        File path = new File(extdir, "App");
        if(path.exists()) {
            return path.getAbsolutePath();
        }
        else {
            checkandmakepath();
            return getpath(); // Return the recursive call's value
        }
    }
    else {
        Toast.makeText(this, "Could not access External Directory!", Toast.LENGTH_LONG).show();
        Intent to_main = new Intent(this, MainActivity.class);
        startActivity(to_main);
        MainActivity.this.finish();
        // RETURN SOMETHING HERE (return ""; or the like)
        return null;
    }
}

答案 2 :(得分:1)

return

中添加else blocks语句

答案 3 :(得分:1)

java中签名中包含返回类型的每个方法都应该返回一个值。在您的代码中,由于if / else语句,有多个执行路径。并且您只在if语句中进行返回。但是在没有执行if的情况下,流将转到其他其他块,并且没有return语句,这会导致编译器抱怨。

答案 4 :(得分:1)

取决于你想要什么。 但我会像下面那样做

public String getpath() {
String returnPath = null;
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)) {
    String extdir = Environment.getExternalStorageDirectory().getAbsolutePath();
    File path = new File(extdir, "App");
    if(path.exists()) {
        return path.getAbsolutePath();
    }
    else {
        checkandmakepath();
        returnPath = getpath();

    }
}
else {
    Toast.makeText(this, "Could not access External Directory!", Toast.LENGTH_LONG).show();
    Intent to_main = new Intent(this, MainActivity.class);
    startActivity(to_main);
    MainActivity.this.finish();
}
return returnPath;

}

答案 5 :(得分:1)

您可以使用另一个变量作为标志来检查何时返回String。

我还认为如果Environment.MEDIA_MOUNTED.equals(state)返回false,我认为你应该定义一些String而不是null,以通知环境状态。

只有在程序收到通知字符串时,才应调用{p> startActivity(to_main);MainActivity.this.finish();

答案 6 :(得分:0)

else {
  Toast.makeText(this, "Could not access External Directory!", Toast.LENGTH_LONG).show();
  Intent to_main = new Intent(this, MainActivity.class);
  startActivity(to_main);
  MainActivity.this.finish();
}

在这个块中,您正在启动MainActivity类,然后将其销毁,这是没有意义的。在这里检查你的逻辑。

对于return语句,你可以这样做

public String getpath() {
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)) {
    String extdir = Environment.getExternalStorageDirectory().getAbsolutePath();
    File path = new File(extdir, "App");
    if(path.exists()) {
        return path.getAbsolutePath();
    }
    else {
        checkandmakepath();
        return getpath();
    }
}
else {
    Toast.makeText(this, "Could not access External Directory!", Toast.LENGTH_LONG).show();
    Intent to_main = new Intent(this, MainActivity.class);
    startActivity(to_main);
    MainActivity.this.finish();
    return null;
 }
}