У меня такая ошибка:
org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject
Я пытаюсь показать некоторые записи из базы данных в приложении для Android в соответствии с фильтром. Почтальон показывает мне правильные результаты, показывает ошибку. Я использую в основном те же методы во втором приложении, и оно работает.
Скрипт PHP:
function findUsers($odkial, $co){
$stmt = $this->con->prepare("SELECT Meno, RodneCislo, PIK FROM zamestnanci WHERE $odkial LIKE ?");
$stmt->bind_param("s", $co);
$stmt->execute();
$stmt->bind_result($Meno, $RC, $PIK);
$foundUsers = array();
while($stmt->fetch()){
$user = array();
$user['meno'] = $Meno;
$user['rodnecislo'] = $RC;
$user['pik'] = $PIK;
array_push($foundUsers, $user);
}
return $foundUsers;
}
Метод кода Android для получения некоторых параметров из текста редактирования и счетчика:
public void hladajZaznamy(){
HashMap<String, String> params = new HashMap<>();
String pod = podla.getSelectedItem().toString();
String co = "%"+podlac.getText().toString()+"%";
params.put("PodlaCoho", pod);
params.put("Co", co);
PerformNetworkRequest request = new PerformNetworkRequest(Api.HLADAJ_ZAMESTNANCA, params, CODE_POST_REQUEST);
request.execute();
}
Сетевой запрос кода Android:
private class PerformNetworkRequest extends AsyncTask<Void, Void, String> {
String url;
HashMap<String, String> params;
int requestCode;
PerformNetworkRequest(String url, HashMap<String, String> params, int requestCode) {
this.url = url;
this.params = params;
this.requestCode = requestCode;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try {
JSONObject object = new JSONObject(s); // HERE IS THE ERROR
if (!object.getBoolean("error")) {
Toast.makeText(getApplicationContext(), object.getString("message"), Toast.LENGTH_SHORT).show();
saveRecords(object.getJSONArray("foundUsers"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
//the network operation will be performed in background
@Override
protected String doInBackground(Void... voids) {
RequestHandler requestHandler = new RequestHandler();
if (requestCode == CODE_POST_REQUEST)
return requestHandler.sendPostRequest(url, params);
if (requestCode == CODE_GET_REQUEST)
return requestHandler.sendGetRequest(url);
return null;
}
}
И некоторые результаты почтальона, например, когда PodlaCoho = Meno и Co = %TESTTEST%:
{"error":false,"message":"Zamestnanci uspesne vyhladani","foundUsers":[{"meno":"TESTTEST","rodnecislo":"1111225555","pik":"111111"}]}
Спасибо за любой совет :)
private void saveRecords (JSONArray foundUsers) выбрасывает исключение JSONException {userList.clear (); for (int i = 0; i <foundUsers.length (); i ++) {JSONObject obj = foundUsers.getJSONObject (i); userList.add (новый пользователь (obj.getString ("meno"), obj.getString ("rodnecislo"), obj.getString ("pik"))); } Адаптер UserAdapter = новый UserAdapter (userList); zoznam.setAdapter (адаптер); }






Это связано с тем, что строка ответа, которую вы конвертируете в JSONObject, должна иметь форму JSONArray, поэтому измените строку с ошибкой на эту.
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
JSONArray objectArray = new JSONArray();
for (int i = 0; i < objectArray.length(); i++) {
//here you can iterate through the array elements and find respective JSONObject and/or other values.
}
}
Надеюсь это поможет..
выглядит хорошо, но что я могу использовать в качестве аргумента в saveRecords? добавлен метод saveRecords
Я вижу вызовы метода saveRecord, но то, что делает этот метод, а также я вижу этот метод ниже той части, где вы получаете сообщение об ошибке .. Итак, как этот метод выполняется, если у вас есть ошибка над этим кодом ..
Возможный дубликат Значение типа org.json.JSONArray не может быть преобразовано в JSONObject