将String转换为int。如果String为null,则将int设置为0 [英] Converting a String to int. Set the int to 0 if String is null

查看:3737
本文介绍了将String转换为int。如果String为null,则将int设置为0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个在 sqlite 中保存Android数据的功能,但我必须将 String 数据转换为整数

I have a function which saves Android data in sqlite but I have to convert the String data to an Integer.

每当字符串 null 我想保存为 0

以下是我的代码每当值 null时失败

The following is my code which fails whenever the value is null

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

上面的 block_id 转换为整数

这是我决定要做但仍无法将字符串值转换为 0 每当 null

This is what i have decided to do but still it fails to convert the string value to 0 whenever its 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;
}

我应该如何改变它,使其有效?

How should I change it, to make it work?

推荐答案

使用try-catch的inbuild构造而不是编写自己的函数。你的问题是, jsonarray jsonarray.getJSONObject(i)或者值本身是 null 并在null引用上调用方法。请尝试以下方法:

Instead of writing your own function use the inbuild construction of try-catch. Your problem is, that jsonarray or jsonarray.getJSONObject(i) or the value itself is a null and you call a method on null reference. Try the following:

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 reference( NullPointerException )。您可以通过多种方式捕获它们。

In Java Exceptions are used for marking unexpected situations. For example parsing non-numeric String to a number (NumberFormatException) or calling a method on a null reference (NullPointerException). You can catch them in many ways.

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

或使用这一事实,他们都扩展例外

or using the fact, that they all extend Exception:

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

或自Java 7以来:

or since Java 7:

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

注意

我相信,你会仔细阅读答案,请记住,在StackOverflow上我们需要最小,完整和可验证示例,其中包括您的异常的StackTrace。在你的情况下,它可能从以下开始:

As I believe, that you'll read the answer carefully, please have in mind, that on StackOverflow we require the Minimal, Complete, and Verifiable example which include the StackTrace of your exception. In your case it probably starts with the following:

Exception in thread "main" java.lang.NullPointerException

然后,调试就容易多了。没有它,它只是在猜测。

Then, debugging is much easier. Without it, it's just guessing.

编辑 根据接受的答案

接受的答案很好,并且工作时间很长,因为使用密钥存储的值: block_id 将是数字。如果它不是数字,你的应用程序将崩溃。

The accepted answer is good and will work as long, as the value stored with key: block_id will be numeric. In case it's not numeric, your application will crash.

而不是:

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();
}

这篇关于将String转换为int。如果String为null,则将int设置为0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆