2014-09-21 127 views
0

我有一個巨大的json字符串,我想用來檢索對象。 這就是爲什麼我使用Gson而不是通常的JsonObject作爲hereGson.fromJson()不按預期工作

這裏是我的代碼:

public List<ProductJavaBean> getProductsData() 
{ 
    url = "http://api.xxx/products.json"; 
    String line = ""; 
    Gson gson = new GsonBuilder().create(); 
    List<ProductJavaBean> products = new ArrayList<ProductJavaBean>(); 

    try { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(); 
     URI website = new URI(url); 

     request.setURI(website); 
     HttpResponse response = httpclient.execute(request); 

     JsonReader reader = new JsonReader(new InputStreamReader(response.getEntity().getContent(),"UTF-8")); 
     reader.beginArray();  

     while(reader.hasNext()) 
     { 
      ProductJavaBean product = gson.fromJson(reader ,ProductJavaBean.class); 
      products.add(product); 
     } 
     reader.endArray(); 
     reader.close(); 
    } 
    catch (Exception exc) 
    { 
     Log.e("Error retrieving products data:" , exc.getMessage()); 
     exc.printStackTrace(); 
    } 
    return products; 
} 

I followed the API samples

但我對fromJson方法一個奇怪的行爲:

在類型的方法fromJson(字符串類)GSON不 適用於參數(JsonReader,類)

enter image description here

謝謝。

編輯:

這裏是我進口:

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.URI; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.R; 
import android.os.AsyncTask; 
import android.util.JsonReader; 
import android.util.Log; 

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import com.gz.constancl.model.ProductJavaBean; 
+1

你介意我們展示您的進口? ! – reVerse 2014-09-21 09:32:54

+1

可能的重複http://stackoverflow.com/questions/17453406/gson-with-mixed-read – 2014-09-21 09:36:01

+0

剛剛更新了我的文章 – 2014-09-21 09:36:59

回答

-1

可以修改從

JsonReader reader = new JsonReader(new InputStreamReader(response.getEntity().getContent(),"UTF-8")); 
reader.beginArray();  

while(reader.hasNext()) 
{ 
    ProductJavaBean product = gson.fromJson(reader ,ProductJavaBean.class); 
    products.add(product); 
} 
reader.endArray(); 
reader.close(); 

我們的代碼,以

Type listType = new TypeToken<ArrayList<ProductJavaBean>>() {}.getType(); 
products = new Gson().fromJson(EntityUtils.toString(response.getEntity()), listType); 
+1

有沒有需要修改代碼。導入'android.util.JsonReader'只是錯誤的,需要更改爲'com.google.gson.stream.JsonReader'。這也是爲什麼這個問題被標記爲重複的原因。 – reVerse 2014-09-21 09:57:04