Adroid与webservice进行实体对象的传递
我是半吊子的安卓开发者,之前没接触过java的网站开发。因此在开发android应用程序中,首选工具就是VS2010+Eclipse。那么android开发中与服务器的通讯也理所当然的使用webservice。
android程序与服务器端的数据交互无非是对象的接收与发送。在网络中能够传递的除了值类型还有json和xml。估计刚学习android开发的同学也和我当初一样,遇到过这个难题——如何安全顺畅的在客户端与服务器端进行数据传递。
先说说使用到第三方类库。android项目中使用了ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar,这个类库如何使用大家可以谷哥度娘哈,网上一大堆!在webservice项目中使用了Newtonsoft.Json.dll,这个是个新鲜玩意,稍后讲到如何使用!
1、值类型的传递
值类型通过ksoap可以直接进行传递,这里就不多说了!利用ksoap,值类型的变量即可作参数,也可以当作返回值。
2、在android端获取服务器端的数据列表。
先说说项目结构。webservice的项目中我建立了Model层,Android中建立了Model的包。这两个是对应的,每个model的字段名称必须一致。就拿图片作为对象来说吧。
Webservices中ImageModel.cs
[csharp]
public class ImageModel
{
public string Id { get; set; }
public string Name { get; set; }
public string Path { get; set; }
public string FId { get; set; }
public string FIdType { get; set; }
public string FileExtension { get; set; }
public string FileSize { get; set; }
public string Adder { get; set; }
public string AddTime { get; set; }
}
在C#中可以将实体对象直接序列化为xml进行传递。
[csharp]
[WebMethod(Description = "获取单个图片")]
public ImageModel GetImageModel(string id)
{
return new ImageModel();
}
[WebMethod(Description = "获取图片列表")]
public List<ImageModel> GetImageModels(string id)
{
return new List<ImageModel>();
}
在调用webservice时,这两个方法的返回值都以标准的xml形式展现。大家可以发布后自己用浏览器测试。
在android端,以下代码为了方便大家使用,我将几个类中的方法进行了整合,大家弄明白后可以自己进行重构。
[java]
public static ArrayList<ImageModel> getImageModels(String id) {
String methodName = "GetImageModels";
PropertyInfo[] propertyInfos = new PropertyInfo[1];
propertyInfos[0] = new PropertyInfo();
propertyInfos[0].setName("id");
propertyInfos[0].setValue(id);
SoapObject imgSoapObject = (SoapObject) getObject(
methodName, propertyInfos);
ArrayList<ImageModel> models=new ArrayList<ImageModel>();
if (imgSoapObject != null) {
for (int i = 0; i < imgSoapObject.getPropertyCount(); i++) {
SoapObject imgObject = (SoapObject) imgSoapObject
.getProperty(i);
ImageModel imgModel = new ImageModel();
imgModel.Id = WebServiceParameter.getPropertyString(imgObject,
"Id");
imgModel.Name = WebServiceParameter.getPropertyString(
imgObject, "Name");
imgModel.Path = WebServiceParameter.fileUrl
+ WebServiceParameter.getPropertyString(imgObject,
"Path"); models.add(imgModel);
}
}
return models;
}
/**
* webservices命名空间
*/
public static final String NAMESPACE = "http://gl.ejiang.org/";
/**
* 页面名称
*/
public static String pageName = "BoilerService.asmx";
/**
* webservices地址
*/
public static String webserviceUrl = "http://888.88.88.888:9002/";
/**
* 用webservice返回远程数据库数据
*
* @param methodName
* 方法名
* @param propertyInfos
* 参数
* @return
*/
public static Object getObject(String methodName,
PropertyInfo[] propertyInfos) {
Object object = GetWebServiceData(
NAMESPACE, webserviceUrl + "/" + pageName,
NAMESPACE + methodName, methodName,
propertyInfos);
return object;
}
补充:移动开发 , Android ,