A. android 怎么解析webservice 返回的dataset数据 看了好多,还是没搞明白,请教高手!!!!
android 解析WEBService返回的DataSet其实就是解析XML文件,但是我建议你不要使用XML,解析比较复杂容易出错,使用JSON吧
B. android手机端解析webservice返回的dataset数据,用ksoap来实现急
/**################################################################################################
* ####################################【所属部门】查询################################################
* ###############################################################################################
* */
public void getUserDept(String userId) {
try {
SoapObject rpc = new SoapObject(NAMESPACE, UserDept_METHOD_NAME);
rpc.addProperty("userId", userId);
AndroidHttpTransport ht = new AndroidHttpTransport(URL);
ht.debug = true;
// 设置Soap的请求信息,参数部分为Soap协议的版本号
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet = false;
envelope.setOutputSoapObject(rpc);
// System.out.println("before method call:" + rpc);
ht.call(UserDept_SOAP_ACTION, envelope);
// System.out.println("after method call:" + rpc);
SoapObject result = (SoapObject) envelope.bodyIn;
// System.out.println("result is:" + result);
rpc = (SoapObject) result.getProperty("out");
// System.out.println("detail is:" + rpc);
SoapObject so=(SoapObject)rpc.getProperty(1);
String get_deptid=getReturnUserDept(so,"id");
String get_deptname=getReturnUserDept(so,"f_deptname");
// System.out.println("get_deptname is:"+get_deptname+"get_deptid is:"+get_deptid);
//把值【添加】到全局变量
Moveoa_Application PUBLIC_VARIABLES=(Moveoa_Application)this.getApplication();
//【所属部门】
PUBLIC_VARIABLES.setDeptname(get_deptname);
//【所属部门ID】
PUBLIC_VARIABLES.setDeptid(get_deptid);
return;
}catch(Exception e){
Toast.makeText(MoveActivity.this, "所属部门查询错误", Toast.LENGTH_LONG).show();
System.out.println("所属部门查询失败! 错误信息:"+e.getMessage());
}
}
/**
* 根据需要查找某一列的值
* @param keytobefind 列值字符串
* @return 该列对应的值
*/
public static String getReturnUserDept(SoapObject so,String userdept)
{
String returnValue="";
try{
HashMap<String, String> keyIndexMapping =new HashMap();
keyIndexMapping.put("id","0");
keyIndexMapping.put("f_no","1");
keyIndexMapping.put("f_pno","2");
keyIndexMapping.put("f_deptname","3");
keyIndexMapping.put("f_deptshort","4");
keyIndexMapping.put("f_deptpresent","5");
keyIndexMapping.put("f_order","6");
keyIndexMapping.put("f_note","7");
int indexInReturn=Integer.parseInt(""+keyIndexMapping.get(userdept));
returnValue=so.getProperty(indexInReturn).toString();
}catch(Exception e){
// TODO: handle exception
e.printStackTrace();
System.out.println("解析数据报错,错误信息:"+e.getMessage());
}
return returnValue;
}
C. C# webservice返回DataSet类型,android怎么调用解析
您好,这样的:
package test.webservice;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import test.webservice.R;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.os.AsyncTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ListView;
import android.os.PatternMatcher;
import java.util.Iterator;
import java.util.Set;
import java.util.List;
import android.app.ListActivity;
import android.graphics.Color;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.net.NetworkInfo;
import android.os.Build.VERSION;
public class kehu extends Activity{
EditText editText1;
TextView textView1;
Button button1;
ListView lv;
ArrayList<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
public static String flags ="";
private SimpleAdapter listAdapter;
public static String phoneNum ="";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kehu);
editText1 = (EditText) findViewById(R.id.editText1);
textView1 = (TextView) findViewById(R.id.textView1);
button1 = (Button) findViewById(R.id.button1);
lv=(ListView)findViewById(R.id.ListView_detail);
textView1.setText("请输入客户姓名!");
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
phoneNum = editText1.getText().toString().trim();
getRemoteInfo(phoneNum);
}
public void getRemoteInfo(String phoneSec) {
// 命名空间
String nameSpace = "http://tempuri.org/";
// 调用的方法名称
String methodName = "GetListfhkh";
// EndPoint
String endPoint = "http://10.141.37.197/AndroidServiceS/AndroidService.asmx";
// SOAP Action
String soapAction = "http://tempuri.org/GetListfhkh";
// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(nameSpace, methodName);
// 设置需调用WebService接口需要传入的两个参数mobileCode、userId
rpc.addProperty("khlxr",phoneSec);
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
// 设置是否调用的是.Net开发的WebService
envelope.dotNet = true;////指定webservice的类型的(java,PHP,dotNet)
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
HttpTransportSE transport = new HttpTransportSE(endPoint);
try {
// 调用WebService
transport.call(soapAction, envelope);
} catch (Exception e) {
e.printStackTrace();
}
// 获取返回的数据
SoapObject object = (SoapObject) envelope.bodyIn;//在这里出现错误,因为webservice端返回的是一个dataset
// 获取返回的结果,这里添加数据,返回的是整数类型,也能被解析出来,就是dataset不能被正常解析,在删除操作的时候,返回的是布尔类型true,也能正确解析
//http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx?op=getDomesticAirlinesTime,这个就是返回dataset数据,如果能解决这个就能解决上面的问题
// 使用Map来表示列表数据
Map<String, Object> mapOne = new HashMap<String, Object>();
flags= object.getProperty(0).toString();
Pattern pattern=Pattern.compile("ds=anyType\\{[^}]*\\};");
Matcher m = pattern.matcher(flags);//import java.util.regex.Matcher;
while (m.find())
{
String tmp=m.group().replace("ds=anyType{","");
String[] Strlen=tmp.split(";");
if(Strlen.length>1)
{
mapOne = new HashMap<String, Object>(); //只要新建1个new map,就能预防值被覆盖的情况
String khbh=Strlen[0].split("=")[1];
String khqc=Strlen[1].split("=")[1];
mapOne.put("user_name",khbh);
mapOne.put("user_pasword",khqc);//map的键是不允许重复的,否则之前的值会被覆盖掉
list.add(mapOne);
}
}
String title="查询结果如下:";
textView1.setText(title);
listAdapter = new SimpleAdapter(this, list, R.layout.user, new String[] { "user_name", "user_pasword" },new int[] { R.id.user_name, R.id.user_pasword });
// 设置显示ListView
lv.setAdapter(listAdapter);
}
}
以上代码在android真机2.2上测试通过,但是在4.0中无法测试通过(主线程不能访问网络),有没有哪位高手能帮忙修改,使其能在4.0版本以上也能正常访问网络。
D. android studio 的xml数据获取
这个很简单啊xml解析,pull解析
public class PullBookParser {
@Override
public List<Book> parse(InputStream is) throws Exception {
List<Book> books = null;
Book book = null;
// XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// XmlPullParser parser = factory.newPullParser();
XmlPullParser parser = Xml.newPullParser(); //由android.util.Xml创建一个XmlPullParser实例
parser.setInput(is, "UTF-8"); //设置输入流 并指明编码方式
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
books = new ArrayList<Book>();
break;
case XmlPullParser.START_TAG:
if (parser.getName().equals("book")) {
book = new Book();
} else if (parser.getName().equals("id")) {
eventType = parser.next();
book.setId(Integer.parseInt(parser.getText()));
} else if (parser.getName().equals("name")) {
eventType = parser.next();
book.setName(parser.getText());
} else if (parser.getName().equals("price")) {
eventType = parser.next();
book.setPrice(Float.parseFloat(parser.getText()));
}
break;
case XmlPullParser.END_TAG:
if (parser.getName().equals("book")) {
books.add(book);
book = null;
}
break;
}
eventType = parser.next();
}
return books;
}
}
E. android读取.net webservice数据,怎么解析获取到的Dataset数据
如同手动连接数据库一样吧
F. DataAdapter的Update方法的用法
调用 DataAdapter 的 Update 方法可以将 DataSet 中的更改解析回数据源。 与 Fill 方法类似,Update 方法将 DataSet 的实例和可选的 DataTable 对象或 DataTable 名称用作参数。 DataSet 实例是包含已做的更改的 DataSet,DataTable 标识从其中检索这些更改的表。 如果未指定 DataTable,则使用 DataSet 中的第一个 DataTable。
当调用 Update 方法时,DataAdapter 会分析已做的更改并执行相应的命令(INSERT、UPDATE 或 DELETE)。 当 DataAdapter 遇到对 DataRow 所做的更改时,它将使用InsertCommand、UpdateCommand 或 DeleteCommand 来处理该更改。 这样,您就可以通过在设计时指定命令语法并在可能时通过使用存储过程来尽量提高 ADO.NET 应用程序的性能。 在调用 Update 之前,必须显式设置这些命令。 如果调用了 Update 但不存在用于特定更新的相应命令(例如,不存在用于已删除行的 DeleteCommand),则会引发异常。