在我的Android应用程序中,我有这个方法需要一个UUID。不幸的是,当我这样做时:
OverviewEvent overviewevent = eventAdapter.getOverviewEvent(UUID.fromString("0f14d0ab-9605-4a62-a9e4-5ed26688389b"));
我收到错误java.lang.IllegalArgumentException: Invalid UUID: 100
getOverviewEvent的实现如下:
public OverviewEvent getOverviewEvent(UUID uuid) throws Exception {
// Do stuff
}
有人知道如何解决这个问题吗?
答案 0 :(得分:11)
这是一种避免使用此方法的解决方法,
String s = "0f14d0ab-9605-4a62-a9e4-5ed26688389b";
String s2 = s.replace("-", "");
UUID uuid = new UUID(
new BigInteger(s2.substring(0, 16), 16).longValue(),
new BigInteger(s2.substring(16), 16).longValue());
System.out.println(uuid);
打印
0f14d0ab-9605-4a62-a9e4-5ed26688389b
答案 1 :(得分:1)
您是否复制并粘贴了代码,我发现一些看起来正确的字符实际上是错误的ACSII代码。
删除-并再次替换。
我经常将其与“一起使用,因为不同的编辑器/计算机可能使用略有不同的代码。
答案 2 :(得分:0)
我也有这个问题。我认为这是因为我的Java版本很低。我发现在我的Android应用中,uuid.split("-")
和uuid.replace("-")
都没用。我想这可能是因为Java将“ - ”视为正则表达式。但是,当我尝试uuid.split("\\-")
和uuid.replace("\\-")
时,它们也无法正常工作。我不知道为什么会这样。我认为这是Java的一个错误。
根据Fildor的评论,在Android的实现中,uuid.split("-")
用于将uuid字符串拆分为5个部分。然后由于上面提到的bug,uuid字符串无法拼接成5个部分。因此抛出了“无效的UUID”异常。
但是,我们可以修改android的源代码以避免这个问题。使用substring()
方法,我们可以将uuid字符串拆分为5个部分。然后我们可以制作uuid。
以下代码对我有用:
public static UUID makeUuid(String uuidString) {
String[] parts = {
uuidString.substring(0, 7),
uuidString.substring(9, 12),
uuidString.substring(14, 17),
uuidString.substring(19, 22),
uuidString.substring(24, 35)
};
long m1 = Long.parseLong(parts[0], 16);
long m2 = Long.parseLong(parts[1], 16);
long m3 = Long.parseLong(parts[2], 16);
long lsb1 = Long.parseLong(parts[3], 16);
long lsb2 = Long.parseLong(parts[4], 16);
long msb = (m1 << 32) | (m2 << 16) | m3;
long lsb = (lsb1 << 48) | lsb2;
return new UUID(msb, lsb);
}