问题描述
我有一个在 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!