我正在为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();
}
}
答案 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
,以通知环境状态。
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;
}
}