做android开发时你还在为gson,json而人肉序列化与反序列化吗,上传文件时你还在使用UrlConnection或者HttpClient吗?
下面提供了asp.net 服务端与 android 客户端通过hessdroid (hessian 的android版) 通信解决方案,从此你不用再为上面的问题发愁了
中小应用,使用.net 的EF(数据库优先)或linq,那是相当的方便,做个管理页面也只要拖拖控件就好了(不拖都对不起自己尤其是自己从头整到尾的项目), 当然你需要使用EmitMapper一类的东西将dto映射到EF实体类上。

服务端定义实体类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace cn.fstudio.hessian.dto
{
public class ResponseBase<T>
{
private int code;
private string msg;
private T model; public int Code
{
get { return code; }
set { code = value; }
}
public string Msg
{
get { return msg; }
set { msg = value; }
}
public T Model
{
get { return model; }
set { model = value; } }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using cn.fstudio.hessian.dto; namespace aa.model
{ public class UserListResponse:ResponseBase<List<UserInfo>>
{
private DateTime? addTime; public DateTime? AddTime
{
get { return addTime; }
set { addTime = value; }
}
private byte[] fileDate; public byte[] FileDate
{
get { return fileDate; }
set { fileDate = value; }
}
private bool? isAdmin; public bool? IsAdmin
{
get { return isAdmin; }
set { isAdmin = value; }
} }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace aa.model
{
public class UserInfo
{
private string userNo ;
public String UserNo
{
get
{
return userNo;
}
set
{
userNo = value;
}
}
private string username; public string Username
{
get { return username; }
set { username = value; }
}
private string password; public string Password
{
get { return password; }
set { password = value; }
}
private string mobile; public string Mobile
{
get { return mobile; }
set { mobile = value; }
}
private string userType; public string UserType
{
get { return userType; }
set { userType = value; }
}
private int recId; public int RecId
{
get { return recId; }
set { recId = value; }
}
private int userLevel; public int UserLevel
{
get { return userLevel; }
set { userLevel = value; }
} }
}

实体类定义不要写成public String Field{get;set;} //因为只动生成的字段名称可能是FieldName_<>K,hessian反射时会出错

服务端接口定义与实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using aa.model;
namespace aa.service
{
public interface UserService
{
UserListResponse getUserlist(UserListResponse res);
string hello(string name);
List<UserInfo> getUsers();
AInfo getAInfo();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using aa.service;
using aa.model;
using hessiancsharp.server;
namespace AA.ServiceImpl
{
public class UserServiceImpl:CHessianHandler, UserService
{
#region UserService 成员 public UserListResponse getUserlist(UserListResponse res)
{
var response = res; UserInfo u = new UserInfo();
u.Username = "张三";
u.UserLevel = ;
response.AddTime = DateTime.Now; response.Model.Add(u); response.Code = ;
response.Msg = "终于可以了吗吗吗吗?"; return response;
} #endregion #region UserService 成员 public string hello(string name)
{
return DateTime.Now + "->" + name;
}
public List<UserInfo> getUsers()
{
UserInfo u = new UserInfo();
u.Username = "张三";
u.UserLevel = ;
return new List<UserInfo>() { u, u, u, u, u, u, u };
} #endregion #region UserService 成员 public AInfo getAInfo()
{
return new AInfo() { id = ,name="还是中文" };
} #endregion
}
}

注意:mvc项目需要在routeConfig中加上 routes.IgnoreRoute("{hessian}.hessian/{*pathInfo}");
web.config中添加
   <httpHandlers>
      <add verb="*" path="UserService.hessian" type="AA.ServiceImpl.UserServiceImpl, AA.ServiceImpl" />
    </httpHandlers>

 客户端实体类:

package cn.fstudio.hessian.dto;

import java.io.Serializable;

public class ResponseBase<T> implements Serializable{

    private static final long serialVersionUID = 1L;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getModel() {
return model;
}
public void setModel(T model) {
this.model = model;
}
private int code;
private String msg;
private T model;
}
package aa.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List; import aa.model.UserInfo; import cn.fstudio.hessian.dto.ResponseBase; public class UserListResponse extends ResponseBase<List<UserInfo>> implements Serializable { /**
*
*/
private static final long serialVersionUID = 1L;
private Date addTime;
private byte[] fileDate;
private Boolean isAdmin; public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
public byte[] getFileDate() {
return fileDate;
}
public void setFileDate(byte[] fileDate) {
this.fileDate = fileDate;
}
public Boolean getIsAdmin() {
return isAdmin;
}
public void setIsAdmin(Boolean isAdmin) {
this.isAdmin = isAdmin; } }
package aa.model;

import java.io.Serializable;

public class UserInfo implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public String getUserNo() {
return userNo;
}
public void setUserNo(String userNo) {
this.userNo = userNo;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
public int getRecId() {
return recId;
}
public void setRecId(int recId) {
this.recId = recId;
}
public int getUserLevel() {
return userLevel;
}
public void setUserLevel(int userLevel) {
this.userLevel = userLevel;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
private String userNo;
private String username;
private String password;
private String mobile;
private String userType;
private int recId;
private int userLevel; }

客户端接口定义

package aa.service;

import java.util.List;

import aa.model.AInfo;
import aa.model.UserInfo;
import aa.model.UserListResponse; public interface UserService {
public UserListResponse getUserlist(UserListResponse req);
public String hello(String name);
List<UserInfo> getUsers();
AInfo getAInfo();
}
        String url = "http://122.xxx.xxx.x:7086/UserService.hessian";
HessianProxyFactory factory = new HessianProxyFactory();
try { UserListResponse req=new UserListResponse();
req.setAddTime(new Date());
req.setCode();
req.setFileDate(new byte[]{,,});
req.setIsAdmin(true);
req.setMsg("这里我传了一些中文上去"); UserInfo u=new UserInfo(); u.setUsername("一个鸟人");
u.setMobile("");
u.setUserLevel(); List<UserInfo> list=new ArrayList<UserInfo>();
for(int i=;i<;i++)
{
list.add(u);
} req.setModel(list); factory.setDebug(true);
factory.setReadTimeout( * );
UserService basic = (UserService)factory.create(UserService.class, url,getClassLoader());
String response=basic.hello("xxx");
UserListResponse response2=basic.getUserlist(req);
//Toast.makeText(FullscreenActivity.this, "调用结果:"+ response2.getCode(), Toast.LENGTH_LONG).show();
String msg=response2.getModel().get(response2.getModel().size() -).getUsername() + "," + response2.getModel().size();
new AlertDialog.Builder(FullscreenActivity.this).setTitle(response2.getFileDate().length + "").setMessage(msg).show();
} catch (Exception e) {
new AlertDialog.Builder(FullscreenActivity.this).setTitle("Error").setMessage(e.getMessage()).show();
}

程序参考华位网盘[软件任务与测试]

asp.net hessian + android hessdroid的更多相关文章

  1. asp.net Hessian 服务的注册

    Hessian服务端实现了IHttpHandle, 默认情况下是在Web.Config中的handles接点中注册,这样当有 很多实现时比较麻烦 这个时候可以实现IHttpHandleFactory注 ...

  2. Android ScrollView嵌套ScrollView滚动的问题解决办法

    引用:http://mengsina.iteye.com/blog/1707464 http://fenglog.com/article.asp?id=449 Android ScrollView嵌套 ...

  3. Cheatsheet: 2013 11.12 ~ 11.30

    Mobile Xcode 5 Essentials Android vs. iOS Development: Fight! Using MVC to Understand ASP.NET, iOS, ...

  4. visual studio 2017安装教程以及各类问题解决方案

    文章的关键词和所含教程: VS2017安装/visual studio 2017安装/Xamarin/Android for visual studio 2017/VS2017找不到网站/VS2017 ...

  5. 安卓Webview缓存网页数据(无网络正常显示)

    热度 1已有 52 次阅读2016-8-26 17:53 |个人分类:常见问题|系统分类:移动开发 一.需求经历 最近的项目是一个原生 +webview 显示的 APP,一开始的时候,网站那边要求我们 ...

  6. 在线学编程!十大IT在线教育网站推荐

    在线学编程!十大IT在线教育网站推荐 1.CSDN学院(http://edu.csdn.net/) CSDN学院是CSDN推出的一个面向中国软件开发者和IT专业人员的技术教育服务平台.主要提供IT领域 ...

  7. [转]Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)

    前言 结合之前所用的ormlite和hessian,再加上SAE已经支持JAVA,把服务端切换到JAVA,也就有了本文.使用hessian来做数据传输,ormlite来实现客户端与服务端的数据存储,极 ...

  8. 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

    大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...

  9. phongap+ jquery + asp.net +android,我把我遇到的问题和处理方法的连接总结一下

    这些都是最基本的问题,在实际的运用中都会用到 第1章.搭建Android的开发环境-跟我学编程 Win7旗舰版中的IIS配置asp.net的运行环境 - 追夢 - 博客园 vs2012下asp.net ...

随机推荐

  1. Brackets编辑器使用

    常用快捷操作 Ctrl + b 当选中一个文本时,离该文本最近的相同的文本会被高亮显示,这样,相同的2个文本就全部获得了焦点,可以同时更改高亮文本.(对,只会找寻最近的且只找到一个就不找了!惰性查找. ...

  2. Haroopad安装与配置: Linux系统下最好用的Markdown编辑器

    1. Haroopad概述 Haroopad is a markdown enabled document processor for creating web-friendly documents. ...

  3. java编码-多重(正常)

    String ISO = "ISO-8859-1"; String UTF = "UTF-8"; String GBK = "GBK"; S ...

  4. MariaDB Galera Cluster的配置测试

    参考的https://fykuan.hsnuer.net/blog/2015/01/23/debian-%E4%B8%8A%E5%AE%89%E8%A3%9D-mariadb-galera-clust ...

  5. 【ZZ】Web开发的入门指导 | 菜鸟教程

    Web开发的入门指导 http://www.runoob.com/w3cnote/a-beginners-guide-to-web-development.html

  6. migrating-vcenter-database-express-to-sql-2008-r2

    migrating-vcenter-database-express-to-sql-2008-r2 一.      准备环境. ESXi5.0主机      IP:192.168.1.158      ...

  7. java的方法传参,最容易混淆的问题!!!

    参数传递 参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了.这种传递方式,我们称为参数传递. 在这里 ...

  8. 云计算与虚拟化KVM深度实践

    徐亮伟, 江湖人称标杆徐.多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作.擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作. 个人博客"徐亮伟架构师之路&quo ...

  9. linux性能调优

    1-1.0  关于ulimit linux对每个用户,系统限制其最大进程数.为提高性能,可根据设备资源情况,设置各linux用户最大进程数. [Qrui@root ~]#ulimit -a 用来显示当 ...

  10. RAD C++Builder xe7 std::map xtree BUG

    c++Builder 6 下的std::map还能用,有代码提示. 换到xe7,代码提示出来就一个tt.operator [](),代码没法往下写了. 最后把Target Platforms切换到64 ...