Android 如何将SoapObject数据存储到数组?
Android 如何将SoapObject数据存储到数组?,android,arrays,sqlite,Android,Arrays,Sqlite,我正在使用.Net Web服务从Android中的服务器获取数据,使用ksoap2 我能够使用以下代码将数据提取到SoapObject。 public class MainActivity extends Activity { private static final String _SOAP_ACTION = "http://tempuri.org/getUserDetails"; private static final String _METHOD_
我正在使用.Net Web服务从Android中的服务器获取数据,使用
ksoap2
我能够使用以下代码将数据提取到
SoapObject
。 public class MainActivity extends Activity {
private static final String _SOAP_ACTION = "http://tempuri.org/getUserDetails";
private static final String _METHOD_NAME = "getUserDetails";
private static final String _NAMESPACE = "http://tempuri.org/";
private static final String _URL = "http://sush19.in/myservice/myservice.asmx";
SoapObject _response;
public void getUserInfo() {
SoapObject request = new SoapObject(_NAMESPACE, _METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
try
{
AndroidHttpTransport aht=new AndroidHttpTransport(_URL);
aht.call(_SOAP_ACTION,envelope);
_response=(SoapObject)envelope.getResponse();
String s1 = (String)_response.getProperty(0);
String s2 = (String)_response.getProperty(1);
String s3 = (String)_response.getProperty(2);
String s4 = (String)_response.getProperty(3);
}
catch (Exception ex)
{
ex.printStackTrace();
Toast.makeText(getBaseContext(), "Oops..."+ex, Toast.LENGTH_LONG).show();
}
}
}
我可以使用上面的\u response.getProperty
获得每个值,并且我得到的值是正确的anyType{anyType=user1;anyType=pswd1;anyType=user2;anyType=pswd2;anyType=user3;anyType=pswd3;anyType=user4;anyType=pswd4;anyType=user5;anyType=pswd5;anyType=user6;anyType=pswd6;}
我获取的数据是用户名和密码。
我想将其存储在一个数组中,以便进行进一步的操作,例如将其存储到Sqlite DB中。我的数据库表有两列,如
username userPassword
我希望我的上述数据采用以下格式:user1 pswd1
user2 pswd2
user3 pswd3
user4 pswd4
user5 pswd5
user6 pswd6
这样就很容易找到用户名和相应的密码。如何将
SoapObject
强制转换为数组步骤1:创建一个与.net服务器返回的bean类相同的bean类
步骤2:解析数据并创建该bean类的对象
步骤3:添加到数组中
然后做任何你想做的事情int-propertyCount=\u response.getPropertyCount();
int propertyCount = _response.getPropertyCount();
if(propertyCount % 2 != 0) {
// The response is not even so you have many option remove last count or return error
}
HashMap<String, String> map = new HashMap<String, String>();
for(int index = 0 ; intdex > propertyCount/2 ; index +=2)
{
map.put((String)_response.getProperty(index), (String)_response.getProperty(index + 1));
}
如果(属性计数%2!=0){
//响应不是偶数,因此您有许多选项删除上次计数或返回错误
}
HashMap=newHashMap();
对于(int index=0;intdex>propertyCount/2;index+=2)
{
map.put((String)\u response.getProperty(index),(String)\u response.getProperty(index+1));
}
多亏了@Basbous
我从您提供的代码中获得了一些想法。
最后,我通过添加以下代码解决了这个问题:
public class MainActivity extends Activity {
private static final String _SOAP_ACTION = "http://tempuri.org/getUserDetails";
private static final String _METHOD_NAME = "getUserDetails";
private static final String _NAMESPACE = "http://tempuri.org/";
private static final String _URL = "http://sush19.in/myservice/myservice.asmx";
SoapObject _response;
public Boolean getUserInfo() {
SoapObject request = new SoapObject(_NAMESPACE, _METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
try
{
AndroidHttpTransport aht=new AndroidHttpTransport(_URL);
aht.call(_SOAP_ACTION,envelope);
_response=(SoapObject)envelope.getResponse();
int propertyCount = _response.getPropertyCount();
String[][] userDetails = new String[propertyCount/2][2];
int temp = 0;
if(propertyCount % 2 != 0) {
return false;
}
else
{
for(int i = 0 ; i < propertyCount/2 ; i++)
{
for(int j = 0; j < 2; j++)
{
userDetails[i][j] = (String)_response.getProperty(temp);
temp = temp + 1;
}
}
}
return true;
}
catch (Exception ex)
{
ex.printStackTrace();
Toast.makeText(getBaseContext(), "Oops..."+ex, Toast.LENGTH_LONG).show();
return false;
}
}
}
公共类MainActivity扩展活动{
私有静态最终字符串_SOAP_ACTION=”http://tempuri.org/getUserDetails";
私有静态最终字符串\u方法\u NAME=“getUserDetails”;
私有静态最终字符串_命名空间=”http://tempuri.org/";
私有静态最终字符串_URL=”http://sush19.in/myservice/myservice.asmx";
SoapObject\u响应;
公共布尔getUserInfo(){
SoapObject请求=新的SoapObject(\u名称空间,\u方法\u名称);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
尝试
{
AndroidHttpTransport aht=新的AndroidHttpTransport(_URL);
aht.呼叫(_SOAP_ACTION,信封);
_response=(SoapObject)envelope.getResponse();
int propertyCount=_response.getPropertyCount();
字符串[][]用户详细信息=新字符串[propertyCount/2][2];
内部温度=0;
如果(属性计数%2!=0){
返回false;
}
其他的
{
对于(int i=0;i
我从服务器获得的值列表现在存储在2D数组中userDetails[][][]
,我可以将其传递给任何活动
,并可以使用for loop
轻松访问它。感谢您的回复。。。我尝试了您上面提供的代码,但我不知道如何从map
获取数据,我查看了HashMap
,发现第一个字符串是Key
,第二个字符串是value
。所以我从你的代码中得到了一些想法,我用2D数组解决了它。。我已经把我的答案贴出来了。。谢谢你…谢谢你的回复,我是android新手,所以我不明白你说了什么,但我已经解决了这个问题,通过使用2D数组获得了我的输出。。我已经把我的答案贴出来了。。