繁体   English   中英

将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):解析数据org.json.JSONException时出错:值

有人可以帮忙吗? 谢谢!

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

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

我从Web服务获得的响应是​​:

{“ checkrecord”:[{“ rollno”:“ abc2”,“ percentage”:40,“ attended”:12,“ missed”:34}],“ Table1”:[]}

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

      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看起来像这样:

{“ Table1”:[],“ checkrecord”:[{“ missed”:34,“ attended”:12,“ percentage”:40,“ rollno”:“ abc2”}]}

这就是@ 500865试图建议的内容。 我只是给您一个代码示例。 首先检查您的结果,并确定其是否有效。 还要检查JSONArray结果。 如果可能的话,将其张贴在这里。

希望能帮助到你

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM