Gson.fromJson() не работает должным образом

У меня есть огромная строка json, которую я хочу использовать для извлечения объектов. Вот почему я использовал Gson вместо обычного 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;
}

поскольку я следил за примерами API.

Но у меня странное поведение в методе fromJson:

Метод fromJson(String, Class) в типе Gson неприменим для аргументов (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;

person Florent Gz    schedule 21.09.2014    source источник
comment
Не могли бы вы показать нам свой импорт?!   -  person reVerse    schedule 21.09.2014
comment
Возможный дубликат stackoverflow.com/questions/17453406/gson-with-mixed-read   -  person Asif Bhutto    schedule 21.09.2014
comment
Только что обновил свой пост   -  person Florent Gz    schedule 21.09.2014
comment
Да, это был дубликат... извините, закрываю тему....   -  person Florent Gz    schedule 21.09.2014


Ответы (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();

to

Type listType = new TypeToken<ArrayList<ProductJavaBean>>() {}.getType();
products  = new Gson().fromJson(EntityUtils.toString(response.getEntity()), listType);
person Harsha Vardhan    schedule 21.09.2014
comment
Нет необходимости изменять код. Импорт android.util.JsonReaderбыл просто неправильным, и его нужно было изменить на com.google.gson.stream.JsonReader. Вот почему этот вопрос был помечен как дубликат. - person reVerse; 21.09.2014