我正在尝试从包含Facebook ID的字符串中获取"long"值,这是一个10位数字。这是我的函数的样子:
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
try {
final long opponentId;
opponentId = jsonArray.getJSONObject(position).getLong("uid");
String opponentName = jsonArray.getJSONObject(position).getString("name");
Toast.makeText(this, "UID: " + opponentId + "n" + "Name: " + opponentName, Toast.LENGTH_SHORT).show();
SharedPreferences myPrefs = getSharedPreferences("user", MODE_WORLD_READABLE);
String playerUidString = myPrefs.getString("uid", null);
if (playerUidString == null) {
Log.d(GlobalVars.TAG, "Empty UID");
return;
}
Log.d(GlobalVars.TAG, "ID: " + playerUidString);
Log.d(GlobalVars.TAG, "ID Long: " + String.valueOf(Long.getLong(playerUidString)));
// long player_id = Long.getLong(playerUidString);
// new GameRequest(getBaseContext(), player_id, opponentId);
} catch (JSONException e) {
Log.d(GlobalVars.TAG, e.getMessage());
}
}
通常,我会将 long player_id 设置为等于将 playerUidString 转换为 long,但 Long.getLong(playerUidString) 的结果为 null,而 playUidString 等于 10 位 ID 号。为什么会发生这种情况?
编辑:我的日志输出:
06-29 11:06:37.823: D/I See It(16053): ID: 1089490706
06-29 11:06:37.823: D/I See It(16053): ID Long: null
您缺少这样一个事实,即Long.getLong(String str)
不应该将字符串解析为长整型,而是返回由该字符串表示的系统属性的长整型值。正如其他人所建议的那样,您真正需要的是Long.parseLong(String str)
查看此处的 Java 文档以获取更多信息。
你必须使用 Long.parseLong(yourstring)
我希望我能帮助你。