У меня есть веб-служба SOAP (.asmx), реализованная с использованием платформы .NET, которая возвращает мне строку JSON в этой форме:
{ "Checkrecord": [{ "rollno": "abc2", "процент": 40, "участие": 12, "пропустили": 34}], "Таблица1": []}
Теперь в моем приложении для Android я использую ksoap для вызова веб-службы следующим образом:
public String getjsondata(String b)
{
String be="";
SoapObject request = new SoapObject(namespace, method_NAME);
request.addProperty("rollno",b);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE android = new HttpTransportSE(url);
android.debug = true;
try
{
//android.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
android.call(soap_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
Log.i("myapp",result.toString());
System.out.println(" --- response ---- " + result);
be=result.toString();
if (be.startsWith("["))
{ // if JSON string is an array
JSONArr = new JSONArray(be);
System.out.println("length" + JSONArr.length());
for (int i = 0; i < JSONArr.length(); i++)
{
JSONObj = (JSONObject) JSONArr.get(i);
bundleResult.putString(String.valueOf(i), JSONObj.toString());
System.out.println("bundle result is"+bundleResult);
}
}
}
catch (SocketException ex) {
ex.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return be;
}
Я получаю ответ, но ответ не содержит записей и показывает пустые значения.
Вот ответ от Logcat:
11-21 20:13:03.283: INFO/myapp(1173): {"checkrecord":[],"Table1":[]}
11-21 20:13:03.283: INFO/System.out(1173): --- response ---- {"checkrecord":[],"Table1":[]}
Может ли кто-нибудь сказать мне, почему это происходит?
Мой код веб-службы:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Data.SqlClient;
namespace returnjson
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
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;
}
}
}
Изменить: я протестировал свой код веб-службы с помощью клиентского приложения на .NET, и он отлично работает. Запустите правильный ответ по возвращенной строке JSON со всеми записями и значениями.