Thay vì viết chức năng của riêng bạn, hãy sử dụng xây dựng inbuild của try-catch. Vấn đề của bạn là, jsonarray
hoặc jsonarray.getJSONObject(i)
hoặc bản thân giá trị là null
và bạn gọi một phương thức có tham chiếu null. Hãy thử các cách sau:
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) {};
Trong Java Ngoại lệ được sử dụng để đánh dấu các tình huống không mong muốn. Ví dụ: phân tích cú pháp số không String
thành một số (NumberFormatException
) hoặc gọi phương thức trên tham chiếu null
(NullPointerException
). Bạn có thể bắt chúng bằng nhiều cách.
try{
//some code
} catch (NumberFormatException e1) {
e.printStackTrace() //very important - handles the Exception but prints the information!
} catch (NullPointerException e2) {
e.printStackTrace();
}
hoặc sử dụng thực tế, rằng tất cả họ đều mở rộng Exception
:
try {
//somecode
} catch (Exception e) {
e.printStackTrace;
};
hoặc kể từ Java 7:
try {
//somecode
} catch (NullPointerException | NumberFormatException e) {
e.printStackTrace;
};
Note
Như tôi tin rằng bạn sẽ đọc kỹ câu trả lời, xin lưu ý rằng trên StackOverflow, chúng tôi yêu cầu Minimal, Complete, and Verifiable example bao gồm StackTrace của ngoại lệ của bạn. Trong trường hợp của bạn, nó có thể bắt đầu với những điều sau đây:
Exception in thread "main" java.lang.NullPointerException
Sau đó, gỡ lỗi dễ dàng hơn nhiều. Không có nó, nó chỉ đoán thôi.
Edit:Theo câu trả lời chấp nhận
Câu trả lời được chấp nhận là tốt và sẽ làm việc càng lâu, như giá trị được lưu trữ với chính: block_id
sẽ là số. Trong trường hợp không phải là số, ứng dụng của bạn sẽ bị lỗi.
Thay vì:
JSONObject jObj = jsonarray.getJSONObject(i);
int block_id = jObj.has("block_id") ? jObj.getInt("block_id") : 0;
Một nên sử dụng:
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();
}
Vui lòng đăng [mcve]. Tôi nghi ngờ chuỗi của bạn không phải là 'null' nhưng trống. – Tunaki
Mã đó trông giống như nó sẽ hoạt động, mặc dù tôi muốn trả về 'int' thay vì' Integer', và đổi tên phương thức thành 'convertToInt' (hoặc' parseIntOrNull') –
Sau khi bạn kiểm tra xem chuỗi có phải là 'null không 'Tôi cũng sẽ kiểm tra xem chuỗi chỉ chứa các số:' str.matches ("[0-9] +"); '. Hoặc bạn chỉ cần bắt được ngoại lệ phân tích cú pháp. – Blobonat