我已经在我的应用程序中实现了从电话簿中选择联系人的功能。为了使动作 PICK 的意图在 android 11 上工作,我将其添加到我的清单中:
<queries>
<intent>
<action android:name="android.intent.action.PICK" />
<data android:mimeType="vnd.android.cursor.dir/phone_v2" />
</intent>
</queries>
Run Code Online (Sandbox Code Playgroud)
该代码在 Android 版本 10 及更低版本上运行良好。但在 Android 版本 11 上,我从电话簿中选择的联系人不会插入到我的应用程序的文本字段中,因为 ContentResolver.query 返回空光标。it.moveToFirst() 返回 false 这是我的代码:
Constants.START_PICK_CONTACT_ACTION -> {
data?.data?.let { uri ->
activity.contentResolver.query(uri, null, null, null, null)?.use {
if (it.moveToFirst()) {
val number: String? = it.getString(it.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
etPhoneNumber.setText(number)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请帮我。
我需要这样的格式数字:
23.0 -> 23
23.20 -> 23.20
23.00 -> 23
23.11 -> 23.11
23.2 -> 23.20
23.999 -> 24
23.001 -> 23
1345.999 -> 1346 // Edited the question to add this from the OP's comment
Run Code Online (Sandbox Code Playgroud)
这是我的代码:java:
public static String toPrice(double number) {
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setGroupingSeparator(' ');
DecimalFormat format = new DecimalFormat("#,###,###.##", formatSymbols);
return format.format(number);
}
Run Code Online (Sandbox Code Playgroud)
科特林:
fun Double.toPrice(): String = DecimalFormat("#,###,###.##", DecimalFormatSymbols().apply {
groupingSeparator = ' '
}).format(this)
Run Code Online (Sandbox Code Playgroud)
但对于输入 23.20 或 23.2,我得到结果 23.2。这对我来说是错误的。我需要 23.20。我应该使用哪种字符串模式来实现此结果?请帮我。
我有一个可以为空的实例。狐狸的例子
var str: String? = null
Run Code Online (Sandbox Code Playgroud)
所以我需要检查 str 是否是字符串。如果我使用 is 运算符,是否需要检查 null。第一个选项:
if(str is String) {}
Run Code Online (Sandbox Code Playgroud)
第二个选项:
if(str != null && str is String) {}
Run Code Online (Sandbox Code Playgroud)
请帮助我使用哪种方式更好?