安卓调用webservice返回Dataset类型赋值给litseview 安卓webservicedataset 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://bbs.csdn.net/topics/390480255没用过dataset,不过看网上的评论,你可以将dataset自己转换为对象或json。再继续处理。 下面是我写的解析 dataset 成为 ArrayList<HashMap<String, String>> 的代码,希望可以帮到楼主:如果好用的话,40分感觉有点少了吧,自主研发的哦。package lib;import java.util.ArrayList;import java.util.HashMap;import org.ksoap2.serialization.AttributeInfo;import org.ksoap2.serialization.PropertyInfo;import org.ksoap2.serialization.SoapObject;public class DataParser { /** * DataSet 解析 HashMap, 仅支持含一张表的 DataSet * @param soapObject * @return */ public static ArrayList<HashMap<String, String>> parseDataSet(SoapObject soapObject){ ArrayList<HashMap<String, String>> res = new ArrayList<HashMap<String,String>>(); ArrayList<String> level=new ArrayList<String>(); processSoapObjectTableRow = null; processSoapObjectColumnType = null; ProcessSoapObject(res, level, soapObject); return res; } /** * 临时表名 */ private static String processSoapObjectTablename = ""; /** * 临时行对象 */ private static HashMap<String, String> processSoapObjectTableRow = null; /** * 字段名及字段类型 */ private static HashMap<String, String> processSoapObjectColumnType = null; /** * DataSet 解析 HashMap 子函数, 递归调用 * @param res * @param level * @param soapObject */ private static void ProcessSoapObject(ArrayList<HashMap<String, String>> res, ArrayList<String> level, SoapObject soapObject) { HashMap<String, String> attrval = GetAttributes(soapObject); if (soapObject.getPropertyCount() == 0) { if( processSoapObjectColumnType != null && "element".equals(getLevel(level, -1)) && "sequence".equals(getLevel(level, -2)) && "complexType".equals(getLevel(level, -3)) ){ processSoapObjectColumnType.put(attrval.get("name"), attrval.get("type")); } } else { if("element".equals(getLevel(level,-1)) && "choice".equals(getLevel(level,-2)) && "complexType".equals(getLevel(level,-3)) && "element".equals(getLevel(level,-4)) && "schema".equals(getLevel(level,-5)) ){ processSoapObjectTablename = attrval.get("name"); processSoapObjectColumnType = new HashMap<String, String>(); } PropertyInfo pi = new PropertyInfo(); for (int i = 0; i < soapObject.getPropertyCount(); i++) { soapObject.getPropertyInfo(i, pi); String name = pi.name; Object obj = soapObject.getProperty(i); if (obj instanceof SoapObject) { level.add(name); if( name.equals(processSoapObjectTablename) && ( "NewDataSet".equals(getLevel(level, -2)) || "DocumentElement".equals(getLevel(level, -2))) && "diffgram".equals(getLevel(level, -3)) ){ processSoapObjectTableRow = new HashMap<String, String>(); res.add(processSoapObjectTableRow); ProcessSoapObject(res, level, (SoapObject) obj); processSoapObjectTableRow = null; } else{ ProcessSoapObject(res, level, (SoapObject) obj); } level.remove(level.size()-1); } else{ if( processSoapObjectTableRow != null && processSoapObjectTablename.equals(getLevel(level, -1))){ String fieldname = name.toUpperCase(); String valtype = processSoapObjectColumnType==null? null : processSoapObjectColumnType.get(name); if("xs:boolean".equals(valtype)){ processSoapObjectTableRow.put(fieldname, "" + obj); } else if("xs:dateTime".equals(valtype)){ //String tmp = ("" + obj).replace("T", " "); //processSoapObjectTableRow.put(fieldname, tmp); processSoapObjectTableRow.put(fieldname, "" + obj); } else{ processSoapObjectTableRow.put(fieldname, "" + obj); } } } } } } private static String getLevel(ArrayList<String> level, int offset) { int i = level.size() + offset; if(i>=0 && i<level.size()){ return level.get(i); } return ""; } private static HashMap<String, String> GetAttributes(SoapObject soapObject) { HashMap<String, String> res=new HashMap<String, String>(); AttributeInfo ai = new AttributeInfo(); for(int i=0; i<soapObject.getAttributeCount(); i++){ soapObject.getAttributeInfo(i, ai); res.put(ai.name, "" + soapObject.getAttribute(i)); } return res; }} ExpandableListView展开的childen列表的item问题 android usb 插拔监听 请教:一个程序可以启动两次 如何在GLSurfaceView中应用Canvas和Paint画2D? Android SAX解析 怎么得到单独属性 android button把textview 覆盖了怎么办 摄像头数据能弄到steam中吗? 请教 如何处理fb0内容 eclipse 安卓打包出错Failed to export application 请问andriod studio 则么使用的?求助 开发工具推荐哪个? ListView 异步加载图片时遇到的问题
如果好用的话,40分感觉有点少了吧,自主研发的哦。
package lib;import java.util.ArrayList;
import java.util.HashMap;import org.ksoap2.serialization.AttributeInfo;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;public class DataParser {
/**
* DataSet 解析 HashMap, 仅支持含一张表的 DataSet
* @param soapObject
* @return
*/
public static ArrayList<HashMap<String, String>> parseDataSet(SoapObject soapObject){
ArrayList<HashMap<String, String>> res = new ArrayList<HashMap<String,String>>();
ArrayList<String> level=new ArrayList<String>();
processSoapObjectTableRow = null;
processSoapObjectColumnType = null;
ProcessSoapObject(res, level, soapObject);
return res;
} /**
* 临时表名
*/
private static String processSoapObjectTablename = "";
/**
* 临时行对象
*/
private static HashMap<String, String> processSoapObjectTableRow = null;
/**
* 字段名及字段类型
*/
private static HashMap<String, String> processSoapObjectColumnType = null;
/**
* DataSet 解析 HashMap 子函数, 递归调用
* @param res
* @param level
* @param soapObject
*/
private static void ProcessSoapObject(ArrayList<HashMap<String, String>> res,
ArrayList<String> level, SoapObject soapObject) {
HashMap<String, String> attrval = GetAttributes(soapObject);
if (soapObject.getPropertyCount() == 0) {
if( processSoapObjectColumnType != null
&& "element".equals(getLevel(level, -1))
&& "sequence".equals(getLevel(level, -2))
&& "complexType".equals(getLevel(level, -3)) ){
processSoapObjectColumnType.put(attrval.get("name"), attrval.get("type"));
}
} else {
if("element".equals(getLevel(level,-1))
&& "choice".equals(getLevel(level,-2))
&& "complexType".equals(getLevel(level,-3))
&& "element".equals(getLevel(level,-4))
&& "schema".equals(getLevel(level,-5)) ){
processSoapObjectTablename = attrval.get("name");
processSoapObjectColumnType = new HashMap<String, String>();
}
PropertyInfo pi = new PropertyInfo();
for (int i = 0; i < soapObject.getPropertyCount(); i++) {
soapObject.getPropertyInfo(i, pi);
String name = pi.name;
Object obj = soapObject.getProperty(i);
if (obj instanceof SoapObject) {
level.add(name);
if( name.equals(processSoapObjectTablename)
&& ( "NewDataSet".equals(getLevel(level, -2)) || "DocumentElement".equals(getLevel(level, -2)))
&& "diffgram".equals(getLevel(level, -3)) ){
processSoapObjectTableRow = new HashMap<String, String>();
res.add(processSoapObjectTableRow);
ProcessSoapObject(res, level, (SoapObject) obj);
processSoapObjectTableRow = null;
}
else{
ProcessSoapObject(res, level, (SoapObject) obj);
}
level.remove(level.size()-1);
}
else{
if( processSoapObjectTableRow != null
&& processSoapObjectTablename.equals(getLevel(level, -1))){
String fieldname = name.toUpperCase();
String valtype = processSoapObjectColumnType==null? null : processSoapObjectColumnType.get(name);
if("xs:boolean".equals(valtype)){
processSoapObjectTableRow.put(fieldname, "" + obj);
}
else if("xs:dateTime".equals(valtype)){
//String tmp = ("" + obj).replace("T", " ");
//processSoapObjectTableRow.put(fieldname, tmp);
processSoapObjectTableRow.put(fieldname, "" + obj);
}
else{
processSoapObjectTableRow.put(fieldname, "" + obj);
}
}
}
}
}
} private static String getLevel(ArrayList<String> level, int offset) {
int i = level.size() + offset;
if(i>=0 && i<level.size()){
return level.get(i);
}
return "";
} private static HashMap<String, String> GetAttributes(SoapObject soapObject) {
HashMap<String, String> res=new HashMap<String, String>();
AttributeInfo ai = new AttributeInfo();
for(int i=0; i<soapObject.getAttributeCount(); i++){
soapObject.getAttributeInfo(i, ai);
res.put(ai.name, "" + soapObject.getAttribute(i));
}
return res;
}
}