我遇到了一个非常奇怪的情况。我在Android 2.1平台上使用Java(通过Eclipse Galileo)执行以下操作:
// Get gravity & geomagnetic data to return to the caller.
final int SIZE_GRAVITY = 3, SIZE_GEOMAGNETIC = 3;
final float[] NOT_USED = null;
float[] outGravity = new float[SIZE_GRAVITY];
float[] outGeomagnetic = new float[SIZE_GEOMAGNETIC];
final String NO_DATA_COULD_BE_READ = null;
boolean succeeded = SensorManager.getRotationMatrix(NOT_USED, NOT_USED, outGravity, outGeomagnetic);
if (!succeeded)
{
return NO_DATA_COULD_BE_READ;
}
Log.v("Test", "This should be printed - but it isn't!!");
// Prepare the data to return.
final int X = 0, Y = 1, Z = 2;
final String FIELD_SEPARATOR = ",", VECTOR_SEPARATOR = ";";
String returnValue = "" +
outGravity[X] + FIELD_SEPARATOR +
outGravity[Y] + FIELD_SEPARATOR +
outGravity[Z] + VECTOR_SEPARATOR +
outGeomagnetic[X] + FIELD_SEPARATOR +
outGeomagnetic[Y] + FIELD_SEPARATOR +
outGeomagnetic[Z];
// Return data.
return returnValue;
当SensorManager.getRotationMatrix(...)
返回false
时,Eclipse调试器会显示if (!succeeded)
的if语句突然跳转到return returnValue;
。抛出没有异常,LogCat - 即使在详细模式下 - 也不会收到异常消息。它甚至没有收到我在代码中输入的消息。我尝试了明显的清理和重启Eclipse方法,但没有帮助。我很困惑。
Eclipse调试器告诉我正在调用第二个return
语句。但是,在显示第一个return
语句实际上是达到的语句的显示中添加其他打印语句。也许我偶然发现了一个Eclipse bug?或者任何人都可以解释这种异常现象?
答案 0 :(得分:3)
看起来succeeded
是假的。当您执行任何return
时,调试将使方法看起来像跳到底部return
。在
return NO_DATA_COULD_BE_READ;
答案 1 :(得分:2)
我猜,你有误解。控件未到达最后一个return
语句,因为之前的return
语句正在执行。
return NO_DATA_COULD_BE_READ;
由于succeeded
结果为false
(如您所说),if条件已满足,然后只返回null
的{{1}}值字符串,它位于if条件块内。
因此,根据观察情况,永远不会达到NO_DATA_COULD_BE_READ
。
答案 2 :(得分:2)
你怎么确定它会跳到最后return
?你在if中有return
,这很可能是这个被调用的。{/ p>