Я пытаюсь получить данные из php-файла.
Это мой PHP-код:
$sql=mysql_query("select * from `tracking`"); while($row=mysql_fetch_assoc($sql)) $output[]=$row; print(json_encode($output));
И мне действительно нужны все данные. Это код, который я использую для получения и преобразования данных:
String result = null; InputStream is = null; StringBuilder sb = null; ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://server/getData.php"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch(Exception e) { Log.e("log_tag", "Error in http connection"+e.toString()); } //convertion de la réponse en String try { //BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"),8); BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8); sb = new StringBuilder(); sb.append(reader.readLine() + "\n"); String line="0"; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); //sb.append(line); } is.close(); result=sb.toString(); } catch(Exception e) { Log.e("log_tag", "Error converting result "+e.toString()); } // Affectation des données try { JSONArray jArray = new JSONArray(result); Log.d("jArray", ""+jArray); JSONObject json_data= null; for(int i=0; i<jArray.length(); i++) { p = new Position(); json_data = jArray.getJSONObject(i); Log.d("js", ""+json_data); id=json_data.getInt("id"); lat=(float) json_data.getDouble("lat"); lon=(float) json_data.getDouble("lon"); speed=(float) json_data.getDouble("speed"); alt=json_data.getDouble("alt"); time=json_data.getString("time"); date=json_data.getString("date"); p.setId(id); p.setLat(lat); p.setLon(lon); p.setSpeed(speed); p.setAlt(alt); p.setDate(date); p.setTime(time); datasource.createPosition(p); } } catch(JSONException e1) { Log.e("JSONEX", ""+e1); } catch (ParseException e1) { e1.printStackTrace(); }
Это действительно работает на эмуляторе, но не на моем телефоне Android, и я не понимаю причину.
Теперь это мой результат json от сервера:
[{ "ID": "180", "ш": "33,894707", "долгота": "- 6,327312", "скорость": "0.00000", "ALT": "397", "дата": "29 / 07/2012" , "время": "23:44"}]
Это действительный JSONArray
подтвержденный на http://jsonlint.com/
Я нашел, что было не так с JSON. Я нашел в начале персонажа «?» добавлен где-то в код, и он не был виден, пока я не сохранил запись logCat в файл. Поэтому я добавил строку кода, и теперь она работает нормально.
result = result.substring(1);
Я надеюсь, что это может помочь кому-то в будущем, чем к Вакасу
Поместите эти строки:
while(result.charAt(0)!='[') //or result.charAt(0)!='{' { result = result.substring(1); Log.d("Tag1", "remove 1st char"); }
после:
result = sb.toString();
Чтобы стать следующим :;
result = sb.toString(); while(result.charAt(0)!='[') { result = result.substring(1); Log.d("Tag1", "remove 1st char"); }
вresult = sb.toString(); while(result.charAt(0)!='[') { result = result.substring(1); Log.d("Tag1", "remove 1st char"); }