Il y a d'autres réponses à cette question ici mais je ne sais pas comment les faire fonctionner avec mon code. J'ai beaucoup de JSON à transmettre, donc j'ai besoin de le diffuser plutôt que de le faire en une seule fois. Je n'arrive pas à extraire les erreurs du code. Voici mon code:Prévoir une chaîne mais BEGIN_OBJECT: JsonReader
HttpGet request = new HttpGet(getUri + "&"
+ credentials.getOauthStructure());
HttpResponse response = client.execute(request);
ICustomerDAO customerDAO = (ICustomerDAO) DAOFactory.getDAO(
ICustomerDAO.class.getName(), context);
customerDAO.open();
Gson gson = new GsonBuilder().serializeNulls()
.excludeFieldsWithoutExposeAnnotation().create();
Reader streamReader = new InputStreamReader(response
.getEntity().getContent());
JsonReader reader = new JsonReader(streamReader);
reader.beginArray();
while (reader.hasNext()) {
//Do the JSON parsing and data saving here
Customer customer = gson.fromJson(reader.nextString(), Customer.class);<-----error here
customerDAO.saveCustomer(customer);
}
reader.endArray();
reader.close();
customerDAO.close();
Je reçois l'erreur:
attendant une chaîne, mais était BEGIN_OBJECT:
Sur la ligne marquée dans le code ci-dessus.
EDIT: La valeur du "lecteur" est "JsonReader près de [{" Action ": null". Adr » Donc, cela semble être coupé près du début de la JSON
je. pour obtenir le JSON comme ceci:
HttpGet request = new HttpGet(getUri + "&"
+ credentials.getOauthStructure());
String content = client.execute(request, new BasicResponseHandler());
Mais il est revenu une grande quantité de JSON tellement changé à la façon dont je l'utilise actuellement, pour tenter de le diffuser
.Edit 2: Mon code original était:
public class CustomerSync implements ICustomerSync {
public static final int QUANTITY = 0;
private long offset;
private ProgressDialog progressDialog;
private Context context;
private HttpClient client;
private final String HTTPS_GET_CUSTOMERS = "https://plcloud.c6.ixsecure.com/PLService.svc/GetCustomers";
private final String GET_URL = "{0}?quant={1}&offset={2}";
private final String HTTPS_SYNC_CUSTOMERS = "https://plcloud.c6.ixsecure.com/PLService.svc/SyncCustomers";
private CustomerSync() {
client = new DefaultHttpClient();
}
public CustomerSync(Context context, ProgressDialog progressDialog) {
this();
this.context = context;
this.progressDialog = progressDialog;
}
public Customer[] initCustomersFromJson(Credentials credentials)
throws ClientProtocolException, IOException, URISyntaxException {
String getUri;
getUri = MessageFormat.format(GET_URL, HTTPS_GET_CUSTOMERS,
QUANTITY + "", offset + "");
credentials.initGetOAuthStructure(HTTPS_GET_CUSTOMERS);
HttpGet request = new HttpGet(getUri + "&"
+ credentials.getOauthStructure());
String content = client.execute(request, new BasicResponseHandler());
Gson gson = new GsonBuilder().serializeNulls()
.excludeFieldsWithoutExposeAnnotation().create();
return gson.fromJson(content, Customer[].class);
}
@Override
public void getCustomers(Credentials credentials)
throws ClientProtocolException, IOException, URISyntaxException {
ICustomerDAO customerDAO = (ICustomerDAO) DAOFactory.getDAO(
ICustomerDAO.class.getName(), context);
customerDAO.open();
Customer[] customers;
//do {
customers = initCustomersFromJson(credentials);
progressDialog.setMax(customers.length);
progressDialog.setProgress(0);
customerDAO.saveCustomers(customers, progressDialog);
if (customers.length > 0) {
offset = customers[customers.length - 1].getId();
}
//} while (customers.length > 0);
customerDAO.close();
Settings.getInstance().setLastSyncCustomerDatetime(new Date());
}
Mais cela n'a pas flux les données il a causé des problèmes de mémoire.
S'il vous plaît nous montrer le 'client 'classe avec le JSON que vous essayez d'analyser. L'erreur se produit probablement parce que le client ne reflète pas avec précision le format JSON –
Imprimer ce que 'lecteur.nextString()' vous donne –
utiliser 'nextObject()' – njzk2