Zamiast pisać własną funkcję, użyj wbudowanej konstrukcji try-catch. Twoim problemem jest, że jsonarray
lub jsonarray.getJSONObject(i)
lub sama wartość jest null
i wywołujesz metodę na odwołanie zerowe. Spróbuj wykonać następujące czynności:
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) {};
W języku Java Wyjątki służą do oznaczania nieoczekiwanych sytuacji. Na przykład parsowanie nieliczbowego numeru String
na numer (NumberFormatException
) lub wywołanie metody na odwołaniu (null
)(). Możesz je złapać na wiele sposobów.
try{
//some code
} catch (NumberFormatException e1) {
e.printStackTrace() //very important - handles the Exception but prints the information!
} catch (NullPointerException e2) {
e.printStackTrace();
}
lub wykorzystując fakt, że wszystkie one przedłużyć Exception
:
try {
//somecode
} catch (Exception e) {
e.printStackTrace;
};
lub od Java 7:
try {
//somecode
} catch (NullPointerException | NumberFormatException e) {
e.printStackTrace;
};
Uwaga
Jak wierzę, że ciebie "Przeczytam odpowiedź dokładnie, proszę, miej to na uwadze na StackOverflow wymagamy Minimal, Complete, and Verifiable example, które zawierają StackTrace twojego wyjątku. W twoim przypadku prawdopodobnie zaczyna się od:
Exception in thread "main" java.lang.NullPointerException
Wówczas debugowanie jest znacznie łatwiejsze. Bez tego, to tylko zgadywanie.
Edit:Zgodnie z przyjętą odpowiedzi
Zaakceptowanych odpowiedź jest dobra i będzie działać tak długo, jak wartości przechowywanej z kluczem: block_id
będzie numeryczny. Jeśli nie jest to numeryczne, aplikacja ulegnie awarii.
Zamiast:
JSONObject jObj = jsonarray.getJSONObject(i);
int block_id = jObj.has("block_id") ? jObj.getInt("block_id") : 0;
Trzeba użyć:
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();
}
Proszę wysłać wiadomość [mcve]. Podejrzewam, że Twój String nie ma wartości "null", ale jest pusty. – Tunaki
Ten kod wygląda na to, że powinien działać, chociaż zwróciłbym 'int' zamiast' Integer', i zmień nazwę twojej metody na 'convertToInt' (lub' parseIntOrNull') –
Po sprawdzeniu, czy ciąg znaków nie jest równy null 'Chciałbym również sprawdzić, czy ciąg zawiera tylko liczby:' str.matches ("[0-9] +"); '. Lub po prostu wychwycisz wyjątek parsowania. – Blobonat