KSoap2 Android接收对象数组
我试图在我的应用程序中使用.NETWebService,该服务返回一个对象数组作为响应 这是来自web服务的响应的格式KSoap2 Android接收对象数组,android,arrays,web-services,android-ksoap2,Android,Arrays,Web Services,Android Ksoap2,我试图在我的应用程序中使用.NETWebService,该服务返回一个对象数组作为响应 这是来自web服务的响应的格式 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.x
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetPickersResponse xmlns="http://tempuri.org/">
<GetPickersResult>
<Picker>
<Id>int</Id>
<StartTime>dateTime</StartTime>
<EndTime>dateTime</EndTime>
<PickerCount>int</PickerCount>
</Picker>
<Picker>
<Id>int</Id>
<StartTime>dateTime</StartTime>
<EndTime>dateTime</EndTime>
<PickerCount>int</PickerCount>
</Picker>
</GetPickersResult>
</GetPickersResponse>
</soap:Body>
</soap:Envelope>
SoapObject request = new SoapObject(NAMESPACE, METHOD_GET_CONTROL);
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION_GET_CONTROL, envelope);
..........=envelope.getResponse(); //To get the data. }
我的问题是,如何替换源代码中的“…”,以接收作为服务响应的对象数组?
我需要接收多个对象,然后使用它们各自的数据成员
请帮忙。我不熟悉Web服务和Ksoap。要获得多个响应,只需在代码中添加几行代码,而不是
..=envelope.getResponse();
soapobjectobj1=(SoapObject)envelope.getResponse();
SoapObject obj2=(SoapObject)obj1.getProperty(0);
对于(int i=0;i我总是将向量作为响应类型,因此我的解决方案是:
HttpTransportSE conn = new HttpTransportSE(url);
try{
conn.call(soapAction, envelope); //send request
Vector<SoapObject> result= (Vector<SoapObject>)envelope.getResponse();
int length = result.size();
for(int i=0;i<length; ++i){
SoapObject so = result.get(i);
Log.d(TAG,so.getPropertyAsString(3));
}
} catch(Exception e){
e.printStackTrace();
}
HttpTransportSE conn=新的HttpTransportSE(url);
试一试{
conn.call(soapAction,信封);//发送请求
Vector结果=(Vector)envelope.getResponse();
int length=result.size();
对于(int i=0;ipackage com.service;
导入java.util.ArrayList;
导入org.ksoap2.SoapEnvelope;
导入org.ksoap2.serialization.PropertyInfo;
导入org.ksoap2.serialization.SoapObject;
导入org.ksoap2.serialization.SoapPrimitive;
导入org.ksoap2.serialization.SoapSerializationEnvelope;
导入org.ksoap2.transport.AndroidHttpTransport;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类KSOAP扩展活动
{
列表视图列表;
ArrayList ArrayList=新的ArrayList();
ArrayAdapter ArrayAdapter;
按钮btn;
TextView电视、tv2、tv3;
编辑文本1号、2号;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.textView1);
tv2=(TextView)findViewById(R.id.textView2);
//tv3=(TextView)findViewById(R.id.textView3);
列表=(ListView)findViewById(R.id.listView1);
no1=(EditText)findViewById(R.id.editText1);
no2=(EditText)findViewById(R.id.editText2);
btn=(按钮)findViewById(R.id.button1);
btn.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
字符串命名空间=”http://tempuri.org/" ;
//"http://vladozver.org/";
字符串方法\u NAME=“GetSumOfTwoIntsList”/“GetStringList”//
字符串SOAP_ACTION=”http://tempuri.org/GetSumOfTwoIntsList";
//"http://vladozver.org/GetSumOfTwoInts";
字符串URL=”http://192.168.0.203/recharge_service/service.asmx";
//"http://192.168.0.203/Recharge_Service/Service.asmx";
SoapObject请求=新的SoapObject(名称空间、方法名称);
PropertyInfo pi=新的PropertyInfo();
pi.setName(“操作数1”);
setValue(Integer.parseInt(no1.getText().toString());
pi.setType(int.class);
请求。添加属性(pi);
PropertyInfo pi2=新的PropertyInfo();
pi2.集合名(“操作数2”);
setValue(Integer.parseInt(no2.getText().toString());
pi2.集合类型(int.class);
请求。添加属性(pi2);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
尝试
{
AndroidHttpTransport=新的AndroidHttpTransport(URL);
传输呼叫(SOAP_动作、信封);
SoapObject obj1=(SoapObject)envelope.bodyIn;
SoapObject obj2=(SoapObject)obj1.getProperty(0);
对于(int i=0;i
这是一种方法
String NAMESPACE=“您的名称空间”
public void involk(字符串na,字符串WebMethodName)引发IllegalStateException{
SoapObject request=new SoapObject(NAMESPACE,WebMethodName);
PropertyInfo sayHellopi=new PropertyInfo();
sayHellopi.setName("get");
sayHellopi.setValue(na);
sayHellopi.setType(String.class);
request.addProperty(sayHellopi);
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
AndroidHttpTransport transp = new AndroidHttpTransport(URL);
try {
transp.call(SOAP_ACTION,envelope);
//ArrayList primitive= (ArrayList) envelope.bodyIn;
SoapObject primitive= (SoapObject) envelope.bodyIn;
// SoapObject obj2=(SoapObject)obj1.getProperty(0);
// KvmSerializable ks=(KvmSerializable)envelope.bodyIn;
// System.out.println("Values.............."+envelope.bodyIn);
/* for(int i=0;i<obj2.getPropertyCount();i++){
String id1=obj2.getProperty(0).toString();
if(""!=id1 ){
System.out.println("Count " + obj2.getPropertyCount());
arraylist.add(""+id1);
System.out.println("Array ::::::::::::: " + arraylist);
}
}*/
//resText= envelope.bodyIn;
//resText = new ArrayList<Objects>();
//for(int i=0;i<resText.equals(resText);i++){
//}
System.out.println("List+++++++++++++++++");
/* //System.out.println("value of result " + primitive);
System.out.println("Count " + primitive.getPropertyCount());
//System.out.println("Prop 1 " + primitive.getProperty(0));
//System.out.println("A list b4 :; " + arrayList);*/
/* for(int i=0;i<obj1.getPropertyCount();i++){
//discount=new Discount((SoapObject)primitive.getProperty(i));
//Toast.makeText(getApplicationContext(),"Hi",Toast.LENGTH_SHORT).show();
//System.out.println("is result null????????????"+result);
arraylist.add(obj1.getPropertyCount());
System.out.println("Array ::::::::: " + arraylist);
}*/
// arraylist=new ArrayList();
//resText=new String[primitive.getPropertyCount()];
for(int i=0;i<primitive.getPropertyCount();i++){
arraylist.add((String) primitive.getProperty(i));
//arraylist.add(primitive.getPropertyCount());
System.out.println("ForLoop--------------"+primitive.getProperty(i));
// System.out.println("is result null????????????"+arrayList.listIterator());
}
// ListIterator it = arraylist.listIterator();
//while(it.hasNext())
// {
// System.out.println("arrayListValue--------------"+it.next());
//}
// System.out.println("List+++++++++++++++++"+resText.length);
// list.setAdapter(arrayadapter);
}catch (Exception e){
System.out.println("Error Value" + e);
//resText="Error Occur";
e.printStackTrace();
}
//list.setAdapter(arrayadapter);
//return "";
}
我希望这是能帮助你的朋友:)你是否解决了你的问题?@SachinD:我解决了!使用了你的代码的修改版本,它工作了。非常感谢。你能告诉我你是如何在你的Web服务中添加了多个属性的吗..即..你的Id
,开始时间
,结束时间
,PickerCount
。我只是想知道如何实现..@Lal:你说的是服务器端吗?是的..服务器端..@SwayamI实际上已经使用Sachin D的解决方案的修改版本解决了这个问题,但是,谢谢你的帮助。还有+1使用了Vector
。谢谢!:)听说我正在传递两个参数并获取编号列表。这段代码也可以用于访问和显示字符串。它不应该是:SoapObject obj3=(SoapObject)obj2.getProperty(i);否则,对于每个循环,您从第二个对象拾取位置0,而不是在其内容中循环
package com.service;
import java.util.ArrayList;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class KSOAP extends Activity
{
ListView list;
ArrayList<String> arraylist = new ArrayList<String>();
ArrayAdapter<String> arrayadapter;
Button btn;
TextView tv,tv2,tv3;
EditText no1,no2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.textView1);
tv2=(TextView)findViewById(R.id.textView2);
//tv3=(TextView)findViewById(R.id.textView3);
list=(ListView)findViewById(R.id.listView1);
no1=(EditText)findViewById(R.id.editText1);
no2=(EditText)findViewById(R.id.editText2);
btn =(Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String NAMESPACE = "http://tempuri.org/" ;
//"http://vladozver.org/";
String METHOD_NAME = "GetSumOfTwoIntsList";//"GetStringList"; //
String SOAP_ACTION = "http://tempuri.org/GetSumOfTwoIntsList";
//"http://vladozver.org/GetSumOfTwoInts";
String URL = "http://192.168.0.203/recharge_service/service.asmx";
//"http://192.168.0.203/Recharge_Service/Service.asmx";
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("Operand1");
pi.setValue(Integer.parseInt(no1.getText().toString()));
pi.setType(int.class);
Request.addProperty(pi);
PropertyInfo pi2 = new PropertyInfo();
pi2.setName("Operand2");
pi2.setValue(Integer.parseInt(no2.getText().toString()));
pi2.setType(int.class);
Request.addProperty(pi2);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);
try
{
AndroidHttpTransport transp = new AndroidHttpTransport(URL);
transp.call(SOAP_ACTION, envelope);
SoapObject obj1 = (SoapObject) envelope.bodyIn;
SoapObject obj2 =(SoapObject) obj1.getProperty(0);
for (int i = 0; i< obj2.getPropertyCount(); i++)
{
int id1 = Integer.parseInt(obj2.getProperty(0).toString());
// String id1=obj2.getProperty(0).toString();
if(id1 != 0)
{
arraylist.add(""+ id1);
}
/* tv3.setText(id3);*/
}
}
catch(Exception e)
{ tv.setText(e.toString());
e.printStackTrace();
}
//tv.setText(""+ count);
list.setAdapter(arrayadapter);
}
});
arrayadapter = new ArrayAdapter<String>( this,
android.R.layout.simple_list_item_1, arraylist );
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
}
});
}
}
//"http://vladozver.org/";
String METHOD_NAME = "get";//"GetStringList"; //
String SOAP_ACTION = "Your SoapAction";
//"http://vladozver.org/GetSumOfTwoInts";
String URL = "Your Soap Url";
SoapObject request=new SoapObject(NAMESPACE,WebMethodName);
PropertyInfo sayHellopi=new PropertyInfo();
sayHellopi.setName("get");
sayHellopi.setValue(na);
sayHellopi.setType(String.class);
request.addProperty(sayHellopi);
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
AndroidHttpTransport transp = new AndroidHttpTransport(URL);
try {
transp.call(SOAP_ACTION,envelope);
//ArrayList primitive= (ArrayList) envelope.bodyIn;
SoapObject primitive= (SoapObject) envelope.bodyIn;
// SoapObject obj2=(SoapObject)obj1.getProperty(0);
// KvmSerializable ks=(KvmSerializable)envelope.bodyIn;
// System.out.println("Values.............."+envelope.bodyIn);
/* for(int i=0;i<obj2.getPropertyCount();i++){
String id1=obj2.getProperty(0).toString();
if(""!=id1 ){
System.out.println("Count " + obj2.getPropertyCount());
arraylist.add(""+id1);
System.out.println("Array ::::::::::::: " + arraylist);
}
}*/
//resText= envelope.bodyIn;
//resText = new ArrayList<Objects>();
//for(int i=0;i<resText.equals(resText);i++){
//}
System.out.println("List+++++++++++++++++");
/* //System.out.println("value of result " + primitive);
System.out.println("Count " + primitive.getPropertyCount());
//System.out.println("Prop 1 " + primitive.getProperty(0));
//System.out.println("A list b4 :; " + arrayList);*/
/* for(int i=0;i<obj1.getPropertyCount();i++){
//discount=new Discount((SoapObject)primitive.getProperty(i));
//Toast.makeText(getApplicationContext(),"Hi",Toast.LENGTH_SHORT).show();
//System.out.println("is result null????????????"+result);
arraylist.add(obj1.getPropertyCount());
System.out.println("Array ::::::::: " + arraylist);
}*/
// arraylist=new ArrayList();
//resText=new String[primitive.getPropertyCount()];
for(int i=0;i<primitive.getPropertyCount();i++){
arraylist.add((String) primitive.getProperty(i));
//arraylist.add(primitive.getPropertyCount());
System.out.println("ForLoop--------------"+primitive.getProperty(i));
// System.out.println("is result null????????????"+arrayList.listIterator());
}
// ListIterator it = arraylist.listIterator();
//while(it.hasNext())
// {
// System.out.println("arrayListValue--------------"+it.next());
//}
// System.out.println("List+++++++++++++++++"+resText.length);
// list.setAdapter(arrayadapter);
}catch (Exception e){
System.out.println("Error Value" + e);
//resText="Error Occur";
e.printStackTrace();
}
//list.setAdapter(arrayadapter);
//return "";
}
protected void onPreExecute(){
super.onPreExecute();
// pg.setVisibility(View.VISIBLE);
dialog=new ProgressDialog(MainActivity.this);
dialog.setIndeterminate(false);
dialog.setMessage("Loding...");
dialog.setCancelable(false);
dialog.show();
}
protected Void doInBackground(Void... parms){
involk(editText,"get");
// return null;
// return null;
return null;
}
protected void onPostExecute(Void result){
super.onPreExecute();
// tv.setText(displayText);
if(arraylist.size()!=0){
dialog.dismiss();
arrayadapter = new ArrayAdapter<String>( MainActivity.this,
android.R.layout.simple_list_item_activated_1, arraylist );
list.setAdapter(arrayadapter);
}else{
dialog.dismiss();
getError();
}
// pg.setVisibility(View.INVISIBLE);
}
}
public void onClick(View view) {
if(no1.getText().length()!=0&&no1.getText().length()!=0){
editText=no1.getText().toString();
AsyncCall task=new AsyncCall();
task.execute();
}
}
});