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),則會引發異常。