当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,