• Android Gson 操作


    JSON序列化后的数据不带类名与名命空间,所以这两个服务端跟客户端可以不对应,需要保证字段对应即可

    Asp.net MVC端

    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; }
    
            }
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using cn.fstudio.hessian.dto;
    using cn.fstudio.update.model;
    using AA.DAO;
    using System.Text;
    using EmitMapper;
    namespace AA.Web.Controllers
    {
        public class SoftController : Controller
        {
            //
            // GET: /Soft/
            /// <summary>
            /// 获取列表
            /// </summary>
            /// <returns></returns>
            public ActionResult Index()
            {
                var response = new ResponseBase<List<SoftInfo>>();
                try
                {
                    using (var ctx = DBCtx.GetCtx())
                    {
                       response.Model= ObjectMapperManager.DefaultInstance.GetMapper<List<Base_Soft>,List<SoftInfo>>().Map(ctx.Base_Soft.ToList());
                    }
                    response.Code = 0;
    
                }
                catch (Exception ex)
                {
                    response.Code = -1;
                    response.Msg = ex.Message;
                }
                return Json(response,"text/json",Encoding.UTF8,JsonRequestBehavior.AllowGet );
            }
    
            public ActionResult GetApp(String id,String v)
            {
                using (var ctx = DBCtx.GetCtx())
                {
                    int softId=int.Parse(id);
                    var q = ctx.Base_SoftVersion.Where(ent => ent.SoftId == softId);
                    if (!String.IsNullOrWhiteSpace(v))
                    {
                        q = q.Where(ent => ent.VersionCode == v);
                    }
    
                    q = q.OrderByDescending(ent => ent.VersionCode).Take(1);
                   
                    var it= q.FirstOrDefault();
    
                    if (it == null)
                    {
                        throw new Exception("未找到该软件!");
                    }
                    var soft= ctx.Base_Soft.FirstOrDefault(ent => ent.SoftId == softId);
    
                    return File(Server.MapPath(it.Path), "application/vnd.android", Url.Encode(string.Format("{0}_{1}.apk",soft.FileName,it.VersionCode)));
    
                }
    
            }
            public ActionResult AppVers(String id)
            {
                var response = new ResponseBase<List<SoftVersionInfo>>();
                try
                {
                    using (var ctx = DBCtx.GetCtx())
                    {
                        var list= ctx.ExecuteStoreQuery<SoftVersionInfo>("Select SoftId,RecId,VersionName,VersionCode,AddTime From Base_SoftVersion Where SoftId={0} order by versionCode desc",id).ToList();
                        response.Model = list;
                    }
                    response.Code = 0;
    
                }
                catch (Exception ex)
                {
                    response.Code = -1;
                    response.Msg = ex.Message;
                }
                return Json(response, "text/json", Encoding.UTF8, JsonRequestBehavior.AllowGet);
            }
            public ActionResult AppLastVer(String id)
            {
                var response = new ResponseBase<SoftVersionInfo>();
                try
                {
                    using (var ctx = DBCtx.GetCtx())
                    {
                        var it = ctx.ExecuteStoreQuery<SoftVersionInfo>("Select Top 1 SoftId,RecId,VersionName,VersionCode,AddTime From Base_SoftVersion Where SoftId={0} order by versionCode desc,RecId desc", id).FirstOrDefault();
                        response.Model = it;
                    }
                    response.Code = 0;
    
                }
                catch (Exception ex)
                {
                    response.Code = -1;
                    response.Msg = ex.Message;
                }
                return Json(response, "text/json", Encoding.UTF8, JsonRequestBehavior.AllowGet);
            }
    
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace cn.fstudio.update.model
    {
        public class SoftInfo
        {
            private int softId;
            private string softName;
            private string versionName;
            private string versionCode;
            private DateTime addTime;
            private DateTime lastTime;
            private string memo;
            private int recId;
            private String fileName;
    
            public String FileName
            {
                get { return fileName; }
                set { fileName = value; }
            }
    
            /// <summary>
            /// SoftId
            /// </summary>        
            public int SoftId
            {
                get { return softId; }
                set { softId = value; }
            }
            /// <summary>
            /// SoftName
            /// </summary>        
            public string SoftName
            {
                get { return softName; }
                set { softName = value; }
            }
            /// <summary>
            /// VersionName
            /// </summary>        
            public string VersionName
            {
                get { return versionName; }
                set { versionName = value; }
            }
            /// <summary>
            /// VersionCode
            /// </summary>        
            public string VersionCode
            {
                get { return versionCode; }
                set { versionCode = value; }
            }
            /// <summary>
            /// AddTime
            /// </summary>        
            public DateTime AddTime
            {
                get { return addTime; }
                set { addTime = value; }
            }
            /// <summary>
            /// LastTime
            /// </summary>        
            public DateTime LastTime
            {
                get { return lastTime; }
                set { lastTime = value; }
            }
            /// <summary>
            /// Memo
            /// </summary>        
            public string Memo
            {
                get { return memo; }
                set { memo = value; }
            }
            /// <summary>
            /// RecId
            /// </summary>        
            public int RecId
            {
                get { return recId; }
                set { recId = value; }
            }        
        }
    }
    View Code

    android端

    package cn.fstudio.update;
    
    import java.lang.reflect.Type;
    import java.util.Date;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import com.google.gson.FieldNamingPolicy;
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.gson.JsonDeserializationContext;
    import com.google.gson.JsonDeserializer;
    import com.google.gson.JsonElement;
    import com.google.gson.JsonParseException;
    
    public class GsonUtil {
    
    
        public static class DateDeserializer implements JsonDeserializer<Date> {
    
            @Override
            public Date deserialize(JsonElement json, Type typeOfT,
                    JsonDeserializationContext context) throws JsonParseException {
                String JSONDateToMilliseconds = "/Date\((.*?)\)/";
                Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
                String value = json.getAsJsonPrimitive().getAsString();
                Matcher matcher = pattern.matcher(value);
                String result = matcher.replaceAll("$1");
    
                return new Date(new Long(result));
            }
        }
        
        
        public static Gson getGson() {
            GsonBuilder gsonb = new GsonBuilder();
            DateDeserializer ds = new DateDeserializer();
            gsonb.registerTypeAdapter(Date.class, ds);
            gsonb.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);
            Gson gson = gsonb.create();
            return gson;
    
        }
    }
    View Code
    package cn.fstudio.util;
    
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.CookieStore;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.protocol.ClientContext;
    import org.apache.http.client.utils.URIUtils;
    import org.apache.http.client.utils.URLEncodedUtils;
    import org.apache.http.impl.client.BasicCookieStore;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.protocol.BasicHttpContext;
    import org.apache.http.protocol.HttpContext;
    import org.apache.http.util.EntityUtils;
    
    import android.R.string;
    import android.util.Log;
    
    public class HttpClientUtil {
    
        private  static  HttpContext httpContext;
        static {
            // 创建一个本地Cookie存储的实例
            CookieStore cookieStore = new BasicCookieStore();
            // 创建一个本地上下文信息
            httpContext = new BasicHttpContext();
            // 在本地上下问中绑定一个本地存储
            httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    
        }
        public static String get(String baseUrl,String path,List<NameValuePair> qparams){
            
            try {
                URI uri=new URI(baseUrl);
                return get(uri.getScheme(), uri.getHost(), uri.getPort(), path, qparams);
            } catch (URISyntaxException e) {
                // TODO Auto-generated catch block
                throw new RuntimeException(e);
            }
            
        }
        public static String get(String scheme,String host,int port,String path, List<NameValuePair> qparams){
            URI uri=null;
            try {
                
                if(qparams==null)qparams=new ArrayList<NameValuePair>();
                uri = URIUtils.createURI(scheme, host, port, path, URLEncodedUtils.format(qparams, "UTF-8"), null);
                Log.d("Test", uri.toString());
                return get(uri.toString());
            } catch (URISyntaxException e) {
                throw new RuntimeException(e);
            }
            
        }
        public static String get(String url){
    
            try {
    
                // HttpGet连接对象
                HttpGet httpRequest = new HttpGet(url);
                // 取得HttpClient对象
                HttpClient httpClient = new DefaultHttpClient();
                // 请求HttpClient,取得HttpResponse
                HttpResponse httpResponse = httpClient.execute(httpRequest,httpContext);
    //            for (org.apache.http.Header h : httpResponse.getAllHeaders()) {
    //                Log.d("Test",h.getName());
    //            }
                
                // 请求成功
                int statusCode=httpResponse.getStatusLine().getStatusCode();
                if ( statusCode == HttpStatus.SC_OK) {
                    HttpEntity entity=httpResponse.getEntity();
                    // 取得返回的字符串
                    String strResult = EntityUtils.toString(entity);
                    entity.consumeContent();
                    ////httpClient.getConnectionManager().shutdown();
                    return strResult;
                } 
                throw new RuntimeException("网络请求执行错误,响应码:" +statusCode);
                
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    View Code
    package cn.fstudio.update;
    
    import java.io.Serializable;
    import java.util.Date;
    
    public class SoftInfo implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private int softId;
        private String softName;
        private String versionName;
        private String versionCode;
        private Date addTime;
        private Date lastTime;
        private String memo;
        private int recId;
        private String fileName;
        public int getSoftId() {
            return softId;
        }
        public void setSoftId(int softId) {
            this.softId = softId;
        }
        public String getSoftName() {
            return softName;
        }
        public void setSoftName(String softName) {
            this.softName = softName;
        }
        public String getVersionName() {
            return versionName;
        }
        public void setVersionName(String versionName) {
            this.versionName = versionName;
        }
        public String getVersionCode() {
            return versionCode;
        }
        public void setVersionCode(String versionCode) {
            this.versionCode = versionCode;
        }
        public Date getAddTime() {
            return addTime;
        }
        public void setAddTime(Date addTime) {
            this.addTime = addTime;
        }
        public Date getLastTime() {
            return lastTime;
        }
        public void setLastTime(Date lastTime) {
            this.lastTime = lastTime;
        }
        public String getMemo() {
            return memo;
        }
        public void setMemo(String memo) {
            this.memo = memo;
        }
        public int getRecId() {
            return recId;
        }
        public void setRecId(int recId) {
            this.recId = recId;
        }
        public String getFileName() {
            return fileName;
        }
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
        public static long getSerialversionuid() {
            return serialVersionUID;
        }
    }
    View Code
    package cn.fstudio.update;
    
    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;
    }
    View Code
    package cn.fstudio.test;
    
    import java.lang.reflect.Type;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    
    import android.util.Log;
    import cn.fstudio.update.GsonUtil;
    import cn.fstudio.update.ResponseBase;
    import cn.fstudio.update.SoftInfo;
    
    import cn.fstudio.update.SoftVersionInfo;
    import cn.fstudio.util.HttpClientUtil;
    import junit.framework.TestCase;
    
    public class UpdateTest extends TestCase {
        final String TAG = "Test";
    
        public void testHttpClient() {
            List<NameValuePair> qparams = new ArrayList<NameValuePair>();
            qparams.add(new BasicNameValuePair("id", "8"));
            String json = HttpClientUtil.get("http", "122.226.151.4", 7086,
                    "/soft/AppLastVer", qparams);
            
        Type type =  new TypeToken<ResponseBase<SoftVersionInfo>>(){}.getType();
        Gson gson=GsonUtil.getGson();
        ResponseBase<SoftVersionInfo> response=    gson.fromJson(json, type);
            
            Log.d(TAG, json);
        }
    
        public void testSoft() {
    
            String json = HttpClientUtil.get("http", "122.226.151.4", 7086,
                    "/soft/", null);
            Gson gson=GsonUtil.getGson();
            
            Type type =  new TypeToken<ResponseBase<List<SoftInfo>>>(){}.getType();
            
            ResponseBase<List<SoftInfo>> response=    gson.fromJson(json, type);
            Log.d(TAG, json);
        }
        public void testAppVers() {
            List<NameValuePair> qparams = new ArrayList<NameValuePair>();
            qparams.add(new BasicNameValuePair("id", "22a"));
            String json = HttpClientUtil.get("http", "122.226.151.4", 7086,
                    "/soft/appVers", qparams);
            Gson gson=GsonUtil.getGson();
            
            Type type =  new TypeToken<ResponseBase<List<SoftVersionInfo>>>(){}.getType();
            
            ResponseBase<List<SoftVersionInfo>> response=    gson.fromJson(json, type);
            Log.d(TAG, json);
        }
        public void testAppLastVer() {
            List<NameValuePair> qparams = new ArrayList<NameValuePair>();
            qparams.add(new BasicNameValuePair("id", "8"));
            String json = HttpClientUtil.get("http://122.226.151.4:7086/",
                    "/soft/appLastVer", qparams);
            Gson gson=GsonUtil.getGson();
            
            Type type =  new TypeToken<ResponseBase<SoftVersionInfo>>(){}.getType();
            
            ResponseBase<SoftVersionInfo> response=    gson.fromJson(json, type);
            Log.d(TAG, json);
        }
    }
    View Code
  • 相关阅读:
    Java面向对象——属性赋值的过程
    Java面向对象——类的成员之三:构造器(构造方法)constructor
    课后作业—5
    缓冲类的使用示例
    缓冲技术
    流的基类
    流的分类
    什么是流?
    关于开发中异常处理的建议
    阅读笔记-3
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3328375.html
Copyright © 2020-2023  润新知