2016-08-16 2 views
2

У меня возникла проблема с преобразованием строки JSON в массив объектов с использованием Gson. Я пробовал все, что мог найти, и ничего не помогло. Мой код:Преобразование строки JSON в массив объектов с использованием Gson

public static ProizvodiViewModel GetProizvode(String tip) { 
    String strJson = HttpManager.simpleResponseGet("http://192.168.0.15:21951/api/Proizvodi/SearchProizvodiByVrsta", tip); 

    Gson gson = new Gson(); 
    ProizvodiViewModel x = new ProizvodiViewModel(); 
    x.Proizvodi = new ProizvodViewModel[]{};//tried also with this line commented 

    try { 
     //1st attempt 
     //x.Proizvodi = gson.fromJson(strJson, ProizvodViewModel[].class); 

     //2nd 
     //Type type = new TypeToken<List<ProizvodViewModel[]>>() {}.getType(); 
     //x.Proizvodi = gson.fromJson(strJson, type); 

     //3rd and so forth (cause many of answers here on SO had almost same idea) 
     Type collectionType = new TypeToken<Collection<ProizvodViewModel>>() {}.getType(); 
     Collection<ProizvodViewModel> enums = gson.fromJson(strJson, collectionType);    
    } catch (Exception e) { 
     System.out.println("ERROR IN GSON"); 
     System.out.println(e.getMessage()); 
    } 
    return x; 
} 

Я поставил попробовать поймать причину приложение сломается иначе, и я не смог прочитать Println годов.

И мои занятия:

public class ProizvodViewModel { 
    public int Id ;  
    public boolean IsDeleted ;  
    public String Naziv ; 
    public float Cijena ; 
    public byte[] Slika ;  
    public byte[] SlikaThumb ;  
    public String Status ; 
    public int ProizvodDetaljiId ;  
    public int VrstaId ; 
} 

public class ProizvodiViewModel 
{ 
public ProizvodViewModel[] Proizvodi; 
} 

получить данные в формате JSON, как вы можете увидеть здесь: http://pastebin.com/6C7936Uq Я использую Android Studio 1.1.0 и апи 16.

Edit: Post решена проблема. Я получил строку api return json, содержащую 2 свойства байтовых массивов, которые были преобразованы (я не знаю, как) в строку base64, и я пытался сопоставить их в массив байтов, что вызывало ошибку. Я написал свой api в asp. net application, поэтому, если кто-то заботится о том, чтобы объяснить, почему это произошло, сделайте это.

ответ

1

Я бы использовал ProizvodViewModel без массива. Как следует:

public class ProizvodViewModel { 
    public int Id ;  
    public boolean IsDeleted ;  
    public String Naziv ; 
    public float Cijena ; 
    public byte[] Slika ;  
    public byte[] SlikaThumb ;  
    public String Status ; 
    public int ProizvodDetaljiId ;  
    public int VrstaId ; 
} 

затем, создать список ProizvodViewModel, как это:

List<ProizvodViewModel> list = gson.fromJson(strJson, new TypeToken<List<ProizvodViewModel>>(){}.getType()); 

Кроме того, если специально вам нужен массив, вы можете:

ProizvodViewModel[] array = new ProizvodViewModel[list.size()]; 
list.toArray(array); 
+0

В это время нужно, Genymotion занимает 2 долгих ответа. Я буду проверять код как можно скорее и дать обратную связь. Большое спасибо за ответ. – Kadaj

+0

К сожалению, он не работает. Я получаю эту ошибку: java.lang.IllegalStateException: ожидается BEGIN_ARRAY, но был STRING в строке 1 столбец 72 путь $ [0] .Slika Может быть, потому что у меня есть массив байтов, и он думает, что это строка? Это на самом деле изображение (в байтах), я не знаю, как java анализирует их, у меня есть только exp с C# stuff. Это необходимо только для одной простой задачи в моем колледже -.- '' – Kadaj

+0

Проверьте это [ссылка] (http://stackoverflow.com/a/28418787/6723193). JSON должен быть массивом. Попробуйте поделиться своим JSON. – Amg91

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