Android 分析从.NET web服务返回的JSONArray时出错
我实现了一个返回JSON字符串的web服务,如下所示: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
{"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。谢谢你的提示!!:-)