Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 分析从.NET web服务返回的JSONArray时出错_Android_Json_Parsing - Fatal编程技术网

Android 分析从.NET web服务返回的JSONArray时出错

Android 分析从.NET web服务返回的JSONArray时出错,android,json,parsing,Android,Json,Parsing,我实现了一个返回JSON字符串的web服务,如下所示: {"checkrecord":[{"rollno":"abc2","percentage":40,"attended":12,"missed":34}],"Table1":[]} public static JSONArray getJSONfromURL(String b) { //initialize InputStream is = null; String result = ""; JS

我实现了一个返回JSON字符串的web服务,如下所示:

 {"checkrecord":[{"rollno":"abc2","percentage":40,"attended":12,"missed":34}],"Table1":[]}
public static JSONArray getJSONfromURL(String b)
    {

    //initialize
    InputStream is = null;
    String result = "";
    JSONArray jArray = null;

    //http post
    try{

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        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);
        StringBuilder sb = new StringBuilder();
        String line = null;
        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());
     } 

    //try parse the string to a JSON array
    try{
            jArray = new JSONArray(result);
    }
            catch(JSONException e)
             {
        Log.e("log_tag", "Error parsing data "+e.toString());
     }

    return jArray;
       }

在我的Android应用程序中,我试图将字符串解析为JSONArray,但我无法这样做,因为我在logcat中遇到以下异常:

 11-16 22:15:57.381: ERROR/log_tag(462): Error parsing data org.json.JSONException: Value <?xml of type java.lang.String cannot be converted to JSONArray
这是返回json的web服务代码

     public class Service1 : System.Web.Services.WebService
{
    [WebMethod]

    public String getdata(String rollno)
    {
        String json;
        try
        {

            using (SqlConnection myConnection = new SqlConnection(@"Data Source=\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123"))
            {

                string select = "select * from checkrecord where rollno=\'" + rollno + "\'";
                SqlDataAdapter da = new SqlDataAdapter(select, myConnection);
                DataSet ds = new DataSet();
                da.Fill(ds, "checkrecord");
                DataTable dt = new DataTable();
                ds.Tables.Add(dt);
                json = Newtonsoft.Json.JsonConvert.SerializeObject(ds);

            }
        }

        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return null;

        }

        return json;

    }

您的结果最初不是一个
JSONArray
,而是一个
JSONObject

试试这个:

JSONObject jsonResult = new JSONObject(new String(reader));

JSONArray jArray = jsonResponse.getJSONArray("checkrecord");

您的结果最初不是一个
JSONArray
,而是一个
JSONObject

试试这个:

JSONObject jsonResult = new JSONObject(new String(reader));

JSONArray jArray = jsonResponse.getJSONArray("checkrecord");

您的web服务不返回纯JSON,它将JSON作为XML SOAP web服务的字符串返回值返回。事实上,这可能是XML中的错误消息,因为您没有从客户端发送有效的SOAP请求

您的URL需要返回原始JSON,周围没有SOAP XML信封。搜索google,了解如何在ASP.NET、WCF或其他您可能熟悉的MS技术中编写基于JSON的web服务

编辑

如果要查看URL的原始结果,请尝试使用之类的工具监视HTTP响应


另外,如果您想从Android进行SOAP web服务调用,请查看

您的web服务不返回纯JSON,而是从XML SOAP web服务返回JSON作为字符串返回值。事实上,这可能是XML中的错误消息,因为您没有从客户端发送有效的SOAP请求

您的URL需要返回原始JSON,周围没有SOAP XML信封。搜索google,了解如何在ASP.NET、WCF或其他您可能熟悉的MS技术中编写基于JSON的web服务

编辑

如果要查看URL的原始结果,请尝试使用之类的工具监视HTTP响应

另外,如果您想从Android进行SOAP web服务调用,请查看

这样做

  JSONObject jsonobject = new JSONObject(result);
  JSONArray array = jsonobject.getJSONArray("checkrecord");
      if(array.length()>0){
          int max = array.length();
        for (int i = 0; i < max; i++) {
            JSONObject tmp = array.getJSONObject(i);
            list.add(tmp.getString("rollno"));
            mandatoryFlagList.add(tmp.getString("percentage"));
        }
     }
JSONObject JSONObject=新的JSONObject(结果);
JSONArray数组=jsonobject.getJSONArray(“checkrecord”);
if(array.length()>0){
int max=array.length();
对于(int i=0;i
像这样试试

  JSONObject jsonobject = new JSONObject(result);
  JSONArray array = jsonobject.getJSONArray("checkrecord");
      if(array.length()>0){
          int max = array.length();
        for (int i = 0; i < max; i++) {
            JSONObject tmp = array.getJSONObject(i);
            list.add(tmp.getString("rollno"));
            mandatoryFlagList.add(tmp.getString("percentage"));
        }
     }
JSONObject JSONObject=新的JSONObject(结果);
JSONArray数组=jsonobject.getJSONArray(“checkrecord”);
if(array.length()>0){
int max=array.length();
对于(int i=0;i
您返回的字符串包含“仅返回json,我发布了我的web服务代码”的事实您返回的字符串包含“仅返回json,我发布了我的web服务代码”的事实什么是“阅读器”?我应该用什么来初始化jsonResponse?虽然您可能对JSON的格式是正确的,但错误表明解析器遇到了XML预处理指令,该指令不是有效JSON字符串的一部分。Reader是您的BufferedReader。是的,但由于他的Web服务返回了原始字符串,代码段应该可以工作……这就是我的观点,它不会返回原始的JSON字符串。在没有其他参数的情况下使用[WebMethod]意味着您将得到一个SOAP(基于XML)结果,并将他的JSON嵌入到XML中。因此,修复方法是使用客户端上的SOAP消息并从中提取JSON,或者更改web服务以返回原始JSON。什么是“阅读器”?我应该用什么来初始化jsonResponse?虽然您可能对JSON的格式是正确的,但错误表明解析器遇到了XML预处理指令,该指令不是有效JSON字符串的一部分。Reader是您的BufferedReader。是的,但由于他的Web服务返回了原始字符串,代码段应该可以工作……这就是我的观点,它不会返回原始的JSON字符串。在没有其他参数的情况下使用[WebMethod]意味着您将得到一个SOAP(基于XML)结果,并将他的JSON嵌入到XML中。因此,修复方法是使用客户端上的SOAP消息并从中提取JSON,或者更改web服务以返回原始JSON。好的,那么有什么方法可以在我的Android应用程序中使用JSON字符串呢。我计划使用JSON创建一个TableLayout。那么我的方法应该是什么呢?有两种选择-1)将您的web服务更改为“类似REST”的web服务,该服务只在结果中返回JSON(),或2)更改您的客户端以像您当前的web服务所期望的那样发出实际的SOAP请求(请参阅ksoap2的编辑链接-适用于Android和移动平台的SOAP web服务库)我尝试过使用SOAP,但又一次问我如何使用ksoap获得JSON格式的响应?好吧,这就是Google或Bing必须介入的地方,但这里有一个来自一个家伙的链接,演示了一个与您非常相似的场景:ok fine将再次尝试使用SOAP。谢谢你的提示!!:-)好的,那么有没有办法在我的Android应用程序中使用JSON字符串呢。我计划使用JSON创建一个TableLayout。那么我的方法应该是什么呢?有两种选择-1)将您的web服务更改为“类似REST”的web服务,该服务只在结果中返回JSON(),或2)更改您的客户端以像您当前的web服务所期望的那样发出实际的SOAP请求(请参阅ksoap2的编辑链接-适用于Android和移动平台的SOAP web服务库)我尝试过使用SOAP,但又一次问我如何使用ksoap获得JSON格式的响应?好吧,这就是Google或Bing必须介入的地方,但这里有一个来自一个家伙的链接,演示了一个与您非常相似的场景:ok fine将再次尝试使用SOAP。谢谢你的提示!!:-)