连接android到移动数据库时JSONArray错误


JSONArray error while connecting android to mobile db

我正在尝试连接到我的在线数据库与android。在遵循教程之后,我想出了这段代码:

package com.example.helloandroid;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.*;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class HelloAndroid extends Activity {
    JSONArray jArray;
    String result = null;
    InputStream is = null;
    StringBuilder sb=null;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://192.168.1.4/~jasptack/Software%20engineering/connector.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());
           }
        //convert response to string
        try{
              BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
               sb = new StringBuilder();
               sb.append(reader.readLine() + "'n");
               String line="0";
               while ((line = reader.readLine()) != null) {
                              sb.append(line + "'n");
               }
               is.close();
               result=sb.toString();
               }catch(Exception e){
                      Log.e("log_tag", "Error converting result "+e.toString());
               }
      //parse json data
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                        JSONObject json_data = jArray.getJSONObject(i);
                        Log.i("log_tag","x-co: "+json_data.getInt("x-coordinaat")+
                                ", straat: "+json_data.getString("straat")
                        );
                }
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }
    }
}

当我执行这个,我得到以下错误:[12-04] 23:25:07.711: E/log_tag(353): Error parsing data org.json.JSONException: Value . Error

有人能帮忙吗?谢谢!

如果JSON字符串格式错误,就会发生这种情况。确保String result是有效的JSONArray(应该以'['开头)。另外,您可以尝试将result映射到JSONObject。如果这些都很好,JSONArray内部的一个元素是畸形的。

我曾经尝试解析我的web服务返回的JSON字符串。以下是我所做的:

我从web服务得到的响应是:

{"checkrecord":[{"rollno":"abc2"、"比例":40岁的"出席":12,"错过":34}],"表1":[]}

为了解析,我做了以下操作:

      JSONObject jsonobject = new JSONObject(result);
      JSONArray array = jsonobject.getJSONArray("checkrecord"); 
      int max = array.length();
      for (int j = 0; j < max; j++) 
   {
      JSONObject obj = array.getJSONObject(j);
      JSONArray names = obj.names();
     for (int k = 0; k < names.length(); k++) 
   {
      String name = names.getString(k);
      String value= obj.getString(name);  
   }

我的JSONObject是这样的:

{"表1":[],"checkrecord":[{"错过":34岁"出席":12,"比例":40岁的"rollno":"abc2"}]}

这就是@500865想要暗示的。我刚给了你一个代码样本。先检查你的结果,确定它是否有效。还要检查JSONArray结果。如果可能的话,把它贴在这里。

希望有帮助

欢呼