安卓资源为什么Java会将字符串误认为整数?

6

对于我的每个XML偏好设置,我都会得到以下警告。我理解Java认为我给出的默认值是整数,并且它期望字符串。但是我该如何输入一个字面字符串呢?

虽然我知道这个警告是无害的,但我可以忍受它。如果有一种简单的方法可以纠正它,我也愿意尝试。

05-16 16:28:03.210: I/ActivityManager(68): Starting activity: Intent { cmp=com.delta.app/.Preferences }
05-16 16:28:03.750: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0x1388 a=-1}
05-16 16:28:03.870: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0x64 a=-1}
05-16 16:28:03.901: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0xa a=-1}
05-16 16:28:03.970: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0x0 a=-1}
05-16 16:28:03.970: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0x2 a=-1}

这里是XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<EditTextPreference
    android:defaultValue="5000"
    android:key="@string/MAX_MESSAGES"
    android:summary="@string/MAX_MESSAGES_desc"
    android:title="@string/MAX_MESSAGES_title" />

<EditTextPreference
    android:defaultValue="100"
    android:key="@string/VIEW_MAX_ROWS"
    android:summary="@string/VIEW_MAX_ROWS_desc"
    android:title="@string/VIEW_MAX_ROWS_title" />

<EditTextPreference
    android:defaultValue="10"
    android:key="@string/VIEW_EDGE_ROWS"
    android:summary="@string/VIEW_EDGE_ROWS_desc"
    android:title="@string/VIEW_EDGE_ROWS_title" />

<ListPreference
    android:defaultValue="0"
    android:entries="@array/level_list"
    android:entryValues="@array/level_values"
    android:key="@string/INITIAL_ORG"
    android:summary="@string/INITIAL_ORG_desc"
    android:title="@string/INITIAL_ORG_title" />

<ListPreference
    android:defaultValue="2"
    android:entries="@array/view_list"
    android:entryValues="@array/view_values"
    android:key="@string/INITIAL_VIEW"
    android:summary="@string/INITIAL_VIEW_desc"
    android:title="@string/INITIAL_VIEW_title" />

<CheckBoxPreference
    android:defaultValue="true"
    android:key="@string/AUTOSCROLL"
    android:summary="@string/AUTOSCROLL_desc"
    android:title="@string/AUTOSCROLL_title" />

<CheckBoxPreference
    android:defaultValue="true"
    android:key="@string/SEND_THEN_EXIT"
    android:summary="@string/SEND_THEN_EXIT_desc"
    android:title="@string/SEND_THEN_EXIT_title" />

<Preference
    android:key="@string/DEFAULT_PREFS"
    android:summary="@string/DEFAULT_PREFS_desc"
    android:title="@string/DEFAULT_PREFS_title" />

</PreferenceScreen>

将此值添加到string.xml中并设置默认值? - Samir Mangroliya
@samirmangroliya,我猜那会起作用。我原本期望有一些更简单的解决方案,比如使用“@5000”而不是“5000”之类的东西。 - ilomambo
@samirmangroliya 如果你将你的评论发布为答案,我可以审核它。 - ilomambo
@ilimambo 这是我的答案和描述... - Samir Mangroliya
3个回答

4

string.xml文件中添加以下代码:

<string name="five_thousand">5000</string>

然后将其设置为默认值,你也可以为其他默认值执行此操作...

<EditTextPreference
    android:defaultValue="@string/five_thousand"
    android:key="@string/MAX_MESSAGES"
    android:summary="@string/MAX_MESSAGES_desc"
    android:title="@string/MAX_MESSAGES_title" />

谢谢,但是如果您查看我发布的XML,您会发现有许多不同的默认值,我不能将相同的值分配给所有值。而且问题是“如何放置文字字符串?” 文字,与引用相对。 - ilomambo
为每个<string>在string.xml中创建一个,并不知道最后一个是什么? - Samir Mangroliya
字面值 => "5000" vs. 引用值 => "@string/five_thousand" ::::: 换句话说,这不是我问题的答案。 - ilomambo

2

在我的情况下,为每个defaultValue添加双引号消除了警告,但也带来了其他问题:

<EditTextPreference
    android:defaultValue="'5000'"
    android:key="@string/MAX_MESSAGES"
    android:summary="@string/MAX_MESSAGES_desc"
    android:title="@string/MAX_MESSAGES_title" />

虽然defaultValue是一个字符串转换成XML,但似乎在传送到Java之前外部引号被剥离了。

但是当您尝试在Android应用程序中编辑首选项时,该框现在包含字符串“5000”而不是数字5000,这可能会导致其他问题。

如果我们必须容忍不必要的警告或无效字段,我想前者是唯一的真正选择。


-1
实际上,你可以尝试一下这个方法,只需要在数值后面加一个空格:
<EditTextPreference
    android:defaultValue="5000 "

但在将字符串转换为值之前,您需要使用trim()函数对其进行修剪,例如:Integer.valueOf(prefer.getstring(...).trim())


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接