2016-05-27 4 views
0

С Rest API, я получаю JSON данных в следующем формате:Декодирование URL из JSON на Android

[ 
    { 
     "id": "1", 
     "item": "tea", 
     "price": "7.5", 
     "image": "http:\/\/192.168.1.3\/CI\/images\/tea.jpg", 
     "veg": "0", 
     "category": "drinks" 
    }, 
    { 
     "id": "2", 
     "item": "coffee", 
     "price": "10", 
     "image": "http:\/\/192.168.1.3\/CI\/images\/coffee.jpg", 
     "veg": "0", 
     "category": "drinks" 
    } 
] 

Из API я получаю JSON в виде строки, и она содержит слеш перед URL, слэши, который соответствует спецификации кодирования json. И я правильно могу json_decode и получить url из php. В android я храню строку json в переменной с именем «menu_json».

Тогда я пытаюсь разобрать и получить URL изображения из него, используя следующий код:

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
try{ 
    JSONObject menuApiObj = new JSONObject(menu_json); 
    JSONArray menuObj = menuApiObj.getJSONArray("menu"); 
    for (int i = 0; i < menuObj.length(); i++){ 
     JSONObject row = menuObj.getJSONObject(i); 
     rowString = row.getString("image"); 
     imageUrl = row.toString(); 
     Log.e("rowString", rowString); 
     Log.e("imageUrl", imageUrl); 
} 

Выход я получаю:

{ 
    "id": "1", 
    "item": "tea", 
    "price": "7.5", 
    "image": "tea.jpg", 
    "veg": "0", 
    "category": "drinks" 
} 

поле изображения должно быть:

http://192.168.1.3/CI/images/tea.jpg 

Но вместо этого я получаю просто:

tea.jpg 

Когда json_decode ответ API в PHP, я получаю правильно декодированный URL-адрес. Но в Android я не получаю правильно декодированный URL-адрес в поле изображения.

Пожалуйста, помогите!

Вот полный ответ API:

{"menu":[{"id":"1","item":"tea","price":"7.5","image":"tea.jpg","veg":"0","category":"drinks"},{"id":"2","item":"cofee","price":"10","image":"coffee.jpg","veg":"0","category":"drinks"},{"id":"3","item":"crispy chicken","price":"160","image":"crispy-chicken.jpg","veg":"0","category":"curries"}],"cat_wise":[{"category":"drinks","items":[{"id":"1","item":"tea","price":"7.5","image":"http:\/\/192.168.1.3\/CI\/images\/tea.jpg","veg":"0","category":"drinks"},{"id":"2","item":"cofee","price":"10","image":"http:\/\/192.168.1.3\/CI\/images\/coffee.jpg","veg":"0","category":"drinks"}]},{"category":"curries","items":[{"id":"3","item":"crispy chicken","price":"160","image":"http:\/\/192.168.1.3\/CI\/images\/crispy-chicken.jpg","veg":"0","category":"curries"}]},{"category":"main","items":[]}]} 
+0

Показать полные данные JSON. Что означает 'menuApiObj.getJSONArray (" menu ")' означает? В данных JSON нет такого массива, –

ответ

2

Я не уверен, что библиотека Json вы используете, но это выглядит как org.json. Я думал, что ваш код выглядит нормальным, поэтому я его реализовал и не вижу вывод, который вы видите. Я предполагаю, что ваши входные данные не то, что вы ожидаете.

final JSONArray menuObj = new JSONArray("[\n" + 
     " {\n" + 
     "  \"id\": \"1\",\n" + 
     "  \"item\": \"tea\",\n" + 
     "  \"price\": \"7.5\",\n" + 
     "  \"image\": \"http://192.168.1.3/CI/images/tea.jpg\",\n" + 
     "  \"veg\": \"0\",\n" + 
     "  \"category\": \"drinks\"\n" + 
     " },\n" + 
     " {\n" + 
     "  \"id\": \"2\",\n" + 
     "  \"item\": \"coffee\",\n" + 
     "  \"price\": \"10\",\n" + 
     "  \"image\": \"http://192.168.1.3/CI/images/coffee.jpg\",\n" + 
     "  \"veg\": \"0\",\n" + 
     "  \"category\": \"drinks\"\n" + 
     " }\n" + 
     "]"); 
for (int i = 0; i < menuObj.length(); i++){ 
    final JSONObject row = menuObj.getJSONObject(i); 
    System.out.println("imageUrl: " + row.getString("image")); 
    System.out.println("rowString: " + row); 
} 

Выход:

ImageUrl: http://192.168.1.3/CI/images/tea.jpg rowString: { "образ": "http://192.168.1.3/CI/images/tea.jpg", "пункт": "чай", "цена": "7,5", "Век": «0», «id»: «1», «категория»: «напитки»} imageUrl: http://192.168.1.3/CI/images/coffee.jpg rowString: {"image": "http://192.168.1.3/CI/images/coffee.jpg", "item": "coffee", "price": "10 »,« veg »:« 0 »,« id »:« 2 »,« категория »:« напитки »}

+0

Да, я использую org.json – codefire

+1

О, я расстраивался и внимательно изучал ответ API. Похоже, что «меню» в json не содержит полного URL-адреса, только в «cat_wise» меню содержится полный URL-адрес изображения. Ваша помощь очень ценится. Огромное спасибо. – codefire

+0

без проблем! Рад помочь :) –

0

Для разбора JSON массива:

JSONArray jArray = jObject.getJSONArray("menu"); 

    for (int i = 0; i < jArray.length(); i++) { 
     JSONObject innerjObject =jArray.getJSONObject(i); 
     String image =innerjObject.getString("image"); 
     array_list.add(image); 
    } 

выход: http://192.168.1.3/CI/images/tea.jpg

И для отображения этого изображения для использования в ImageView библиотеке:

компиляции «com.nostra13.universalimageloader: универсальный-образ-погрузчик: 1.9.5 '

с использованием метода загрузки изображений Loadimagview в представлении изображения

Смежные вопросы