2015-01-21 2 views
1

Я провел последние 4 часа, глядя на различные ответы и другие ресурсы, но я просто не могу обернуть голову вокруг разбора JSON. Мне нужна помощь.Чтение данных JSON с использованием GSON

Вот JSON строка:

{ 
    "success": true, 
    "categories": [ 
    { 
     "category_id": "20", 
     "parent_id": "0", 
     "name": "Desktops", 
     "image": "***", 
     "href": "***", 
     "categories": null 
    }, 
    { 
     "category_id": "25", 
     "parent_id": "0", 
     "name": "Components", 
     "image": "***", 
     "href": "***", 
     "categories": null 
    }, 
    { 
     "category_id": "34", 
     "parent_id": "0", 
     "name": "MP3 Players", 
     "image": "***", 
     "href": "***", 
     "categories": null 
    } 
    ] 
} 

Вот мой класс данных:

public class Data 
{ 
    String success; 
    List<Category> categories; 

    // Various get/set functions and a toString override 

    public class Category 
    { 
     String category_id; 
     String name; 
     String image; 

     // Various get/set functions 
    } 
} 

Вот где я пытаюсь прочитать:

private class GetJson extends AsyncTask<String, Void, String> 
    { 
     @Override 
     protected String doInBackground(String... params) 
     { 
      String results = "Fail"; 
      URL url = null; 
      try 
      { 
       url = new URL("***"); 
      } 

      catch (MalformedURLException e) 
      { 
       e.printStackTrace(); 
      } 

      URLConnection ucon = null; 

      try 
      { 
       ucon = url.openConnection(); 
       InputStream is = ucon.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); 
       String line = ""; 
       String result = ""; 
       while((line = bufferedReader.readLine()) != null) 
       { 
        result += line; 
       } 

       Data data = new Gson().fromJson(result, Data.class); 

       result = data.toString(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 

      return results; 
     } 

     protected void onPostExecute(String result) 
     { 
      Toast.makeText(con, result, Toast.LENGTH_SHORT); 
     } 
    } 

I» я ничего не получаю от stacktrace. Я проверил АБР несколько раз. Кажется, что все работает, но я не получаю сообщение «Тост» или сообщение об ошибке.

Что я делаю неправильно?

+0

Прежде всего успеха типа булево –

+0

использование ДЖЕКСОНА (https://github.com/FasterXML/jackson) – Pierry

+0

Вы забыли закрыть входной поток .. – smb

ответ

2

вы забыли показать свою Toast

попробовать этот

Toast.makeText(con, result, Toast.LENGTH_SHORT).show(); 

лол

и дальнейшее

Data data = new Gson().fromJson(result, Data.class); 

    result = data.toString(); 
    return result; // need return this 

иначе всегда получите "Fail"

+0

Спасибо. И я должен признать, что это была самая тупая ошибка, которую я когда-либо публиковал в stackoverflow. Я был сонным, и я думаю, что это то, что происходит. Благодаря! Отмеченный. – Asim

+0

добро пожаловать. Я сам часто делаю такие ошибки :-) – SorryForMyEnglish

0
//First generate getter setter of data class variables. 

TypeToken<Data> tokenPoint1 = new TypeToken<Data>() {}; 

//SYSO result string here for Confirmation 

    Gson gson = new Gson(); 

Data dataobj= gson.fromJson(result, tokenPoint1.getType()); 

// syso dataobj.getname(); 

// Надеюсь, что это будет работать для вас

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