2012-07-31 151 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"); 

     }