2012-07-31 146 views
0

我想从一个php文件中获取数据。字符串不能转换为JSONArray

这是我的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”, “LAT”: “33.894707”, “LON”: “ - 6.327312”, “速度”:” 0.00000" , “ALT”: “397”, “日期”: “29/07/2012”, “时间”: “23:44”}]

这是一个有效的JSONArray验证上http://jsonlint.com/

+0

粘贴异常堆栈 – waqaslam 2012-07-31 15:20:22

+0

JSONExeption:Java.lang.String类型的值不能转换为JSONArray。 注意:在模拟器上,我可以使用所有功能,但在手机上我收到异常。 – TheSM 2012-07-31 15:45:36

+0

有没有通过** JSONArray **获取**结果**的数据?我需要尽快完成工作,并且在电话无法工作时我感到震惊:/ – TheSM 2012-08-01 14:39:10

回答

2

我发现JSON出了什么问题。 我在开始时发现一个字符“?”添加到代码中的某处,直到我将logCat条目存储到一个文件后才可见。所以我添加了代码行,现在它工作正常。

result = result.substring(1); 

我希望它可以帮助别人,将来感谢名单,以Waqas

+0

只想为此感谢你,它解决了我的问题。我想强调这个错误并没有发生在Android v 4. *上,只在Android v 2上。*。此外,我使用的json文件是本地的,来自我的资产文件夹,其内容是静态的。真奇怪 – Don 2013-03-11 19:12:23

+0

我还是不明白为什么这件事情很无聊,我们现在有办法绕过它。不要忘记将它作为答案投票,因此向其他人推荐 – TheSM 2013-03-11 22:47:59

0

将这个行:

 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"); 

     }