Je reçois une chaîne JSON d'un service WCF, mais je reçois parfois des problèmes et parfois cela fonctionne très bien. C'est bizarre parce que les résultats qui sont retournés devraient être exactement les mêmes, mais parfois ça marche bien, et d'autres fois j'ai besoin de rafraîchir mon application plusieurs fois et ça marche très bien. Donc, je ne suis pas sûr s'il y a une inconstance avec quelque chose dans ma chaîne JSON ou si quelqu'un a des idées. Voici la chaîne JSON qui est retournéAndroid JSON chaîne non terminée au caractère
[{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"3\/30\/2012 3:19:00 PM","iAssessmentID":1,"iAssessmentType":2,"sAssmtName":"Weekly Skin"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"1\/1\/1900","iAssessmentID":1,"iAssessmentType":4,"sAssmtName":"Admission Skin"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"1\/1\/1900","iAssessmentID":1,"iAssessmentType":5,"sAssmtName":"PHQ - 9 - Resident"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"1\/1\/1900","iAssessmentID":1,"iAssessmentType":6,"sAssmtName":"PHQ - 9 - Staff"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"1\/1\/1900","iAssessmentID":1,"iAssessmentType":7,"sAssmtName":"Brief Interview for Metal Status (BIMS)"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"1\/1\/1900","iAssessmentID":1,"iAssessmentType":8,"sAssmtName":"Staff Assessment for Mental Status"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"1\/1\/1900","iAssessmentID":1,"iAssessmentType":1001,"sAssmtName":"Open Note"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"1\/1\/1900","iAssessmentID":1,"iAssessmentType":1002,"sAssmtName":"Labs Test"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"1\/1\/1900","iAssessmentID":1,"iAssessmentType":1003,"sAssmtName":"Smoking Assessment"},{"AssmtStatus":1,"AssmtStatusText":null,"CreatedBy":"","IntervalDescr":null,"Status":0,"WoundLocation":null,"dtAssmtDate":"1\/1\/1900","dtLastCompleted":"5\/7\/2012 9:15:00 AM","iAssessmentID":1,"iAssessmentType":1004,"sAssmtName":"Inquiry Assessment"}]
l'erreur que je reçois est « chaîne non terminée à caractère 2431 » si quelqu'un a des idées, je voudrais vraiment apprécier l'aide. merci
EDIT: Voici la classe entière que j'utilise pour obtenir le JSON.
private class GetAssmts extends AsyncTask<String,Void,Void>{
private ProgressDialog Dialog = new ProgressDialog(AssmtSelectionUnScheduled.this);
protected void onPreExecute(){
Dialog.setMessage("Loading..");
Dialog.show();
}
@Override
protected Void doInBackground(String... params) {
try {
HttpGet request = new HttpGet(SERVICE_URL + "/GetAssmtsUnScheduled/" + FacID + "/" + ResID + "/" + UserID);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
HttpEntity responseEntity = response.getEntity();
// Read response data into buffer
char[] buffer = new char[(int)responseEntity.getContentLength()];
InputStream stream = responseEntity.getContent();
InputStreamReader reader = new InputStreamReader(stream);
reader.read(buffer);
stream.close();
JSONArray plates = new JSONArray(new String(buffer));
MyAssmts.clear();
for (int i = 0; i < plates.length(); ++i) {
JSONObject jo = (JSONObject) plates.get(i);
Assmt myassmt = new Assmt(Integer.parseInt(jo.getString("iAssessmentType")),Integer.parseInt(jo.getString("iAssessmentID")),jo.getString("sAssmtName"),jo.getString("dtLastCompleted"),
Integer.parseInt(jo.getString("Status")),jo.getString("WoundLocation"),jo.getString("IntervalDescr"),jo.getString("CreatedBy"),Integer.parseInt(jo.getString("AssmtStatus")),
jo.getString("AssmtStatusText"),jo.getString("dtAssmtDate"));
MyAssmts.add(myassmt);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void unused){
Dialog.dismiss();
final GridView lv = (GridView) AssmtSelectionUnScheduled.this.findViewById(R.id.gridView_AssmtList);
lv.setAdapter(new MyAdapter(AssmtSelectionUnScheduled.this, MyAssmts));
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
Assmt sel = (Assmt) (lv.getItemAtPosition(arg2));
boolean isNewAssmt = true;
if(sel.getsCreatedBy().length() > 0 && sel.getsCreatedBy().toUpperCase().equals(UserID.toUpperCase())){
isNewAssmt = false;
}
launchAssmt(sel.getiAssessmentType(), sel.getiAssessmentID(), isNewAssmt, sel.getsAssmtDate());
}
});
}
}
Votre JSON ne semble pas être mal formé. Vous pouvez le vérifier avec un vérificateur en ligne comme celui-ci: http://jsonviewer.stack.hu/ Comment obtenez-vous votre JSON et que faites-vous avec? Avez-vous des erreurs dans votre journal? Pourriez-vous ajouter du code ou le journal, s'il vous plaît? –
à cette ligne JSONArray plates = new JSONArray (new String (buffer)); vous essayez de passer la chaîne comme JSON Array 1. cela fonctionne bien s'il n'y a pas d'espaces ex. [android, google, xml] 2. il va à travers l'erreur si votre chaîne/liste comme ça. Ex. [android, google, XML, virtusa Polaris, Amazon] –