2016-08-16 16 views
2

JSON文字列をGsonを使用してオブジェクトの配列に変換する際に問題があります。私は見つけることができたすべてを試したが、何も助けなかった。 私のコードは次のとおりです。私はそう壊れるトライキャッチ原因アプリを入れていたGsonを使用してJSON文字列をオブジェクトの配列に変換する

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の年代を読んcouldntの。

そして、私のクラス:

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、およびAPI 16

Editを使用しています:ポストが解決問題。私は、私のapiは、バイト列の2つのプロパティを含むjsonの文字列を返していました(私はどのように)base64の文字列に変換され、私はエラーを引き起こしていたバイト配列にマップしようとしていた。 私はASPで私のAPIを書いた。なぜ誰がこれが起こったのかさらに説明する気があれば、してください。

答えて

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が期待されていましたが、行1の列72のパス$ [0] .Slikaにありました バイト配列があり、それが文字列だと思いますか?これは実際にはピクチャ(バイト単位)ですが、javaがどのように解析するのか分かりません。私はC#のものだけを持っています。これは、私の大学の1つの簡単なタスクに必要なだけです。 - ' – Kadaj

+0

これを確認してください(http://stackoverflow.com/a/28418787/6723193)。 JSONは配列でなければなりません。 JSONを共有してみてください。 – Amg91

関連する問題