Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java fromString()返回一个无效的UUID?_Java_Android_Uuid_Illegalargumentexception - Fatal编程技术网

Java fromString()返回一个无效的UUID?

Java fromString()返回一个无效的UUID?,java,android,uuid,illegalargumentexception,Java,Android,Uuid,Illegalargumentexception,在我的Android应用程序中,我有一个接受UUID的方法。不幸的是,当我这样做时: OverviewEvent overviewevent = eventAdapter.getOverviewEvent(UUID.fromString("0f14d0ab-9605-4a62-a9e4-5ed26688389b")); 我收到一个错误,说java.lang.IllegalArgumentException:Invalid UUID:100 getOverviewEvent的实现如下所示: pu

在我的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
}

有人知道我如何解决这个问题吗?

这里有一个避免使用此方法的解决方法

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

我也有这个问题。我想这是因为我的Java版本很低。我发现在我的Android应用程序中,
uuid.split(“-”)
uuid.replace(“-”)
都是无用的。我想这可能是因为Java将“-”视为正则表达式。但是,当我尝试
uuid.split(\\-”
uuid.replace(\\-”
时,它们也不起作用。我不知道为什么会这样。我认为这是Java的一个缺陷

根据的评论,在Android的实现中,
uuid.split(“-”)
用于将uuid字符串拆分为5个部分。然后由于上面提到的错误,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);
}
公共静态UUID makeUuid(字符串UUIString){
字符串[]部分={
UUIString.子字符串(0,7),
UUIString.子字符串(9,12),
UUIString.子字符串(14,17),
UUIString.子字符串(19,22),
UUIString.子字符串(24,35)
};
long m1=long.parseLong(部分[0],16);
long m2=long.parseLong(第[1],16部分);
long m3=long.parseLong(第[2]部分,第16段);
long lsb1=long.parseLong(部分[3],16);
long lsb2=long.parseLong(部分[4],16);

long msb=(m1如果您复制并粘贴了代码,我发现一些看起来正确的字符实际上是错误的ACSII代码

拆下-并再次更换


“不同的编辑器/计算机可能会使用稍有不同的代码。

它在Java 7上运行良好,所以我怀疑有一个bug。@PeterLawrey-啊,是的,但在什么方面有一个bug?你是说在Android基础中,还是在我的程序中?在
UUID.fromString()中?”
,抛出异常的那个,它不应该抛出。Android的实现可以在这里找到:据我所见,它不应该打印“无效UUID:100”…你确定输入字符串吗?它是否像你的问题中那样硬编码?嗨,彼得…请告诉我如何获得正确的UUID