将一个字符串转换为int。如果字符串为空,将int设为0[英] Converting a String to int. Set the int to 0 if String is null

问题描述

我有一个函数,它在sqlite中保存了android数据,但我必须将String数据转换为Integer.

每当String是null时,我想另存为0

以下是我的代码,只要值为null

 int block_id = Integer.parseInt(jsonarray.getJSONObject(i).getString("block_id"));

上面的block_id转换为Integer.

这是我决定做的,但仍然无法将字符串值转换为0,每当它的null.

int block_id = Converttoint(jsonarray.getJSONObject(i).getString("block_id"));
然后函数convertToInt

 public static Integer convertToInt(String str) {
    int n=0;
  if(str != null) {
      n = Integer.parseInt(str);
  }
    return n;
}

如何更改它,以使其工作?

推荐答案

而不是编写自己的函数,请使用try-catch的内置构建.您的问题是,jsonarray或jsonarray.getJSONObject(i)或值本身是null,并且您将在NULL引用上调用方法.尝试以下内容:

int block_id = 0;        //this set's the block_id to 0 as a default.
try {
    block_id =  Integer.parseInt(jsonarray.getJSONObject(i).getString("block_id"));    //this will set block_id to the String value, but if it's not convertable, will leave it 0.
} catch (Exception e) {};

在Java例外用于标记意外情况.例如,将非数字String解析为数字(NumberFormatException)或在null参考(NullPointerException)上调用方法.你可以在很多方面抓住它们.

try{
    //some code
} catch (NumberFormatException e1) {
    e.printStackTrace()     //very important - handles the Exception but prints the information!
} catch (NullPointerException e2) {
    e.printStackTrace();
}

或使用事实,它们都延伸Exception:

try {
    //somecode
} catch (Exception e) {
    e.printStackTrace;
};

或自Java 7:

try {
    //somecode
} catch (NullPointerException | NumberFormatException e) {
    e.printStackTrace;
};

注意

我相信,你会仔细阅读答案,请记住,在stackoverflow上,我们要求最小,完成,和可验证的示例,其中包含异常的堆栈.在您的情况下,它可能从以下开始:

Exception in thread "main" java.lang.NullPointerException

然后,调试更容易.没有它,这只是猜测.

编辑: 根据接受的答案

已接受的答案是好的并且将工作很长,因为存储有键的值:block_id将是数字.如果它不是数字,您的应用程序将崩溃.

而不是:

JSONObject jObj = jsonarray.getJSONObject(i);
int block_id = jObj.has("block_id") ? jObj.getInt("block_id") : 0;

一个应该使用:

int block_id;
try{
    JSONObject jObj = jsonarray.getJSONObject(i);
    block_id = jObj.has("block_id") ? jObj.getInt("block_id") : 0;
} catch (JSONException | NullPointerException e) {
    e.printStackTrace();
}

其他推荐答案

只是使用内置方法 JSONObject#getInt(String) ,它将通过呼叫场景Integer.parseInt(String)如果是String或通过调用Number#intValue(),则会自动将值转换为int.如果是Number,则通过调用Number#intValue().为了避免在不可用的键时,如果您的JSONObject实例使用 JSONObject#has(String) ,这足以是安全的,因为键不能具有null值,无论是一个非null值还是它不存在.

JSONObject jObj = jsonarray.getJSONObject(i);
int block_id = jObj.has("block_id") ? jObj.getInt("block_id") : 0;

其他推荐答案

还有一种方法可以与答案的剩余部分中给出的方法分开.

String blockId=jsonarray.getJSONObject(i).getString("block_id");
int block_id = blockId==null ? 0 :  Integer.parseInt(blockId);

本文地址:https://www.itbaoku.cn/post/978700.html