【问题标题】:Gson.fromJson() not working as expectedGson.fromJson() 没有按预期工作
【发布时间】:2014-11-15 10:46:37
【问题描述】:

我有一个巨大的 json 字符串,我想用它来检索对象。 这就是为什么我使用 Gson 而不是像 here 所说的通常的 JsonObject。

这是我的代码:

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 方法有一个奇怪的行为:

Gson 类型中的 fromJson(String, Class) 方法不是 适用于参数(JsonReader、Class)

谢谢。

编辑:

这是我的导入:

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;

【问题讨论】:

标签: android json gson jsonreader


【解决方案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);

【讨论】:

  • 无需修改代码。导入 android.util.JsonReader 是错误的,需要更改为 com.google.gson.stream.JsonReader。这也是此问题被标记为重复问题的原因。
猜你喜欢
  • 2021-10-19
  • 2020-03-18
  • 2012-06-14
  • 1970-01-01
  • 2012-07-02
  • 2011-09-07
  • 2013-03-03
  • 2015-05-18
  • 2018-12-31
相关资源
最近更新 更多