Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 Enum toString有时会将i替换为ı;_Java_Android_Google Analytics - Fatal编程技术网

Java Enum toString有时会将i替换为ı;

Java Enum toString有时会将i替换为ı;,java,android,google-analytics,Java,Android,Google Analytics,我最近收到一份报告说,一些Google Analytics事件类别名称被记录为带有一个I字符,顶部没有一个点 页面浏览量和事件发生两次,一次在i上没有点 我不得不去相信它。果不其然,我举办了一个名为“最爱”的活动,还有一个名为“最爱”的活动。将那个奇怪的字符复制粘贴到终端或单空格字体中,看看它有多奇怪偏爱ıte 我的第一个怀疑是我的代码,我使用枚举上的toString为类别名称生成字符串 public enum AnalyticsEvent { SCREEN_VIEW, FAV

我最近收到一份报告说,一些Google Analytics事件类别名称被记录为带有一个I字符,顶部没有一个点

页面浏览量和事件发生两次,一次在i上没有点

我不得不去相信它。果不其然,我举办了一个名为“最爱”的活动,还有一个名为“最爱”的活动。将那个奇怪的字符复制粘贴到终端或单空格字体中,看看它有多奇怪<代码>偏爱ıte

我的第一个怀疑是我的代码,我使用枚举上的
toString
为类别名称生成字符串

public enum AnalyticsEvent {

    SCREEN_VIEW,
    FAVORITE,
    UN_FAVORITE,
    CLICK_EVENT,
    ... reduced for brevity;

    public String val() {
        return this.toString().toLowerCase();
    }
}
如何使用该枚举的示例:

@Override
public void logSearchTag(String type, String value) {
    ...
    logGAEvent(AnalyticsEvent.SEARCH_TAG.val(), type, value);
}

private void logGAEvent(String category, String action, String label) {
    ... // mGATracker = instance of com.google.android.gms.analytics.Tracker;
            mGATracker.send(addCustomDimensions(new HitBuilders.EventBuilder()
                    .setCategory(category)
                    .setAction(action)
                    .setLabel(label))
                    .build());
    ...
}
我将通过实际为枚举分配一个字符串来解决这个问题,并在
val()
函数中返回该字符串

不过,我很好奇,是否有人知道为什么在少数设备上
Enum.toString
返回Enum名称,并用奇怪的字符替换I。我是说小的。5万人中有8人是平均数。或者有没有可能假设是错误的,错误就在分析服务端的某个地方?确实非常怀疑。

字符串#toLowerCase方法使用系统的默认区域设置。这将使用特定于区域设置的字符,例如
ı
,而不是
i
。要解决此问题,请使用区域设置调用
toLowerCase

String test = "testString";
test.toLowerCase(java.util.Locale.ENGLISH) // Or your preferred locale
String#toLowerCase
方法使用系统的默认区域设置。这将使用特定于区域设置的字符,例如
ı
,而不是
i
。要解决此问题,请使用区域设置调用
toLowerCase

String test = "testString";
test.toLowerCase(java.util.Locale.ENGLISH) // Or your preferred locale

谢谢我不小心在另一个时间点关掉了录音室里的线头。当我alt enter尝试修复另一个小写字母,但意外地选择了错误选项关闭检查时。:/有趣的是,我并没有注意到它并没有线头,而是在完全错误的地方寻找问题。谢谢!我不小心在另一个时间点关掉了录音室里的线头。当我alt enter尝试修复另一个小写字母,但意外地选择了错误选项关闭检查时。:/有趣的是,我并没有注意到它并没有使用lint,而是在完全错误的地方查找问题。Android的最佳实践是使用常量而不是枚举。是的,我知道。不要担心代码库中没有枚举。那是他们唯一被使用的地方。不管它是一个枚举还是一个常量,都没有什么区别。不,现在枚举已经在代码中了,必须使用枚举例程来执行它。常量就在字节码里。你在向唱诗班布道。我已经知道了。我并不是说它的表现更好,只是说我愿意在那里接受小小的表现冲击。这不是世界末日。我非常清楚枚举和常量的不同。@danny117没有什么不愉快的感觉,完全同意这个问题需要向下投票(这很糟糕)。这对我来说只是一时的疏忽。但是请阅读这篇文章,它是你思考的食物。帮你打开思路。Android的最佳实践是使用常量而不是枚举。是的,我知道。不要担心代码库中没有枚举。那是他们唯一被使用的地方。不管它是一个枚举还是一个常量,都没有什么区别。不,现在枚举已经在代码中了,必须使用枚举例程来执行它。常量就在字节码里。你在向唱诗班布道。我已经知道了。我并不是说它的表现更好,只是说我愿意在那里接受小小的表现冲击。这不是世界末日。我非常清楚枚举和常量的不同。@danny117没有什么不愉快的感觉,完全同意这个问题需要向下投票(这很糟糕)。这对我来说只是一时的疏忽。但是请阅读这篇文章,它是你思考的食物。帮你打开一点心扉。