【发布时间】:2014-08-13 18:18:53
【问题描述】:
我开发了一个 android 应用程序,我知道 return; 在 void return 方法中会中断流程。但是,android 应用程序并没有返回,而是继续执行该块旁边的代码
例如:
public static void displayImage(String img){
if(img.contains("http")){
loadImage(img);
return;
}
Uri uri = Uri.parseUri(img); // even though it hit the return statement above, it continued to this block
.....
}
即使执行了 return;,它也会继续调用该块旁边的方法。是我的编译问题吗?还是在调试时它是Android中Java的工作方式?我很困惑,请帮助我理解。
更新:该方法是静态方法,确切地说
详细解释
根据chooser api,我的 android 应用程序支持 Dropbox,我在MainActivity.java 中实现了以下内容
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DBX_CHOOSER_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
DbxChooser.Result result = new DbxChooser.Result(data);
..
ContentHelper.displayImage(result.getData().toString());
} else {
// Failed or was cancelled by the user
现在在我的ContentHelper.java
public static void displayImage(String img){
if(img.contains("http")){
loadImage(img);
return;
}
Uri uri = Uri.parseUri(img); // even though it hit the return statement above, it continued to this block
.....
//load some activity etc.,
}
因为这个 displayImage 能够从 SD 卡加载图像,并且它提供的任何链接都具有 if 块和 return 语句。 (我知道我可以放if .. else 并在上面创作一个作品。但我的问题是为什么它没有在return; 中断)
谢谢。
【问题讨论】:
-
您确定
if条件评估为真吗? -
如果调用return,该方法将停止执行。这一点也不例外。
-
你确定img包含http吗???顺便说一句,java 将 100% 归还它。
-
那么当
imgnot 包含"http"时,要么调试器向您显示与正在执行的代码不同的代码,要么再次调用该方法。如果您点击了return语句,那么程序将不会继续执行以下语句。 -
您设备上安装的代码可能与您在 Eclipse 中看到的代码不同。尝试清理、构建并重新安装应用程序。