Когда я звоню в свою сервисную сеть, у меня возникает следующее исключение: org.json.JSONException:Value[{}] типа org.json.JSONArray не может быть преобразован в JSONObject.
private void jsonParse(){
String url = "http://192.168.56.1:8095/rest/workouts/all";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("");
for(int i = 0; i < jsonArray.length(); i++) {
JSONObject w = jsonArray.getJSONObject(i);
String title = w.getString("title");
String goal = w.getString("goal");
txtv.append(title + ", " + goal +"\n\n");
}
...Кстати это формат JSON
[{"id":"1","title":"title","goal":"goal","exercice":"Exercice
1","difficulty":"Beginner","duration":"3","image":"..","description":"..."},]
Вы должны использовать JsonArrayRequest вместо JsonObjectRequest
Ваш ответ json на самом деле является JsonArray, поэтому вам нужно изменить свой код на:
private void jsonParse(){
String url = "http://192.168.56.1:8095/rest/workouts/all";
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null,
new Response.Listener<JSONArray >() {
@Override
public void onResponse(JSONArray response) {
try {
for(int i = 0; i < response.length(); i++) {
JSONObject w = response.getJSONObject(i);
String title = w.getString("title");
String goal = w.getString("goal");
txtv.append(title + ", " + goal +"\n\n");
}
Пытаться
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
Request.Method.GET,
url,
null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
for(int i = 0; i < response.length(); i++) {
JSONObject w = response.getJSONObject(i);
String title = w.getString("title");
String goal = w.getString("goal");
txtv.append(title + ", " + goal +"\n\n");
}
}catch (JSONException e){
e.printStackTrace();
}
}
},
new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error){
// Do something when error occurred
}
}
);
Хотя ответы могут помочь в вашем случае, но, глядя на ваш JSON, очевидно, что это массив, а не объект, правильный формат вашего JSON может быть примерно таким:
{"id":"1","title":"title","goal":"goal","exercice":"Exercice1","difficulty":"Beginner","duration":"3","image":"..","description":"..."}
У которых нет "[", "]" и ",". Итак, вот мое решение: если ожидается, что он будет получать только один объект все время, вам следует изменить свой API, отправив вам только объект, как я упоминал выше, в противном случае это "," в конце неверно для массива, имеющего только один-единственный элемент, и в любом случае вы должны изменить свою модель, исключив массив [который вы можете объявить в виде списка, например: List<Model> myModelList], чтобы синтаксический анализатор работал нормально.
Попробуй это
try{
JSONArray jsonArray = new JSONArray(response.string());
for (int i=0;i<jsonArray.length();i++){
String Title=jsonArray.getJSONObject(i).getString("title");
String Goal=jsonArray.getJSONObject(i).getString("goal");
}
}
catch (Exception e){
e.printStackTrace();
}
попробуйте это ... Это должно быть
JSONArray jsonarray = new JSONArray(response);
а потом
for(int i=0; i < jsonarray.length(); i++) {
JSONObject jsonobject = jsonarray.getJSONObject(i);
//your code
}
Это решение, которое я нашел, спасибо всем, ребята ♥ ..
private void jsonParse(){
String url = "http://192.168.56.1:8095/rest/workouts/all";
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,url,null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
try {
for(int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonobject = jsonArray.getJSONObject(i);
String title = jsonobject.getString("title");
String goal = jsonobject.getString("goal");
txtv.append(title + ", " + goal +"\n\n");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
mQueue.add(jsonArrayRequest);
}
Измените JSONObject на JSONArray в прослушивателе ответов