• spring-android的使用【转】


    android + Spring RESTful 简单登录 (spring3实现服务端 rest api)

     https://github.com/spring-projects/spring-android-samples/tree/master/spring-android-showcase
     
    注: 
    url?format=json 服务器端返回json数据 
    url?format=xml 服务器端返回xml数据 
    url 默认返回html数据 

    登录restful风格 部分源码 

    android客户端 导入spring for android开源jar 
    spring-android-rest-template-1.0.0.RC1.jar 
    spring-android-core-1.0.0.RC1.jar 
    spring-android-auth-1.0.0.RC1.jar 

    服务器端部分代码(spring3.1.1+hibernate4.1.2(jpa2)完全注解方式实现 ) 


    ======================================上代码===================================== 
    ======================================android客户端================================= 
    Java代码  收藏代码
    1. public class SpringHttpClient {  
    2.   
    3.         private static RestTemplate restTemplate;  
    4.   
    5.         private final static String url = "http://192.168.0.8:6060/contact";  
    6.   
    7.         private final static String login = url + "/user/userLogin/{loginname},{loginpassword}?format=json";  
    8.   
    9.         private final static String query = url + "/user/list?format=json";  
    10.   
    11.         private final static String add = url + "/user/add?format=json";  
    12.   
    13.         private final static String detail = url + "/user/{id}/detail?format=json";  
    14.   
    15.         private final static String update = url + "/user/{id}/updates?format=json";  
    16.   
    17.         private final static String delete = url + "/user/{id}/delete?format=json";  
    18.   
    19.         private final static String upload = url + "/user/upload?format=json";  
    20.   
    21.         static {  
    22.                 restTemplate = new RestTemplate();  
    23.         }  
    24.   
    25.         public SpringHttpClient(){  
    26.         }  
    27.         /** 
    28.          * 登录, 
    29.          * @param username 
    30.          * @param password 
    31.          * @return {"user":{"id":"1","loginname":"superman","loginpassword":"unicom","username":"超级管理员","useremail":"superman@163.com","usermobile":null,"userstate":null,"userlogintime":null}} 
    32.          */  
    33.         public static String OAuth(String username,String password){  
    34.                 Map<String, String> request = new HashMap<String, String>();   
    35.                 request.put("loginname", username);  
    36.                 request.put("loginpassword", password);  
    37.                 return getObject(login,request);  
    38.         }  
    39.         /** 
    40.          * 得到所有的用户, 
    41.          * @return ........ 
    42.          */  
    43.         public static String ListAll(){  
    44.                 return getObject(query, null);  
    45.         }  
    46.         /** 
    47.          * 根据id得到唯一用户 
    48.          * @param id 
    49.          * @return{"user":{"id":"4028809b376e28be01376e294b180000","loginname":"sdfsdf","loginpassword":"sdfsdf","username":"sdfsdf","useremail":"sdfsdf","usermobile":null,"userstate":null,"userlogintime":null}} 
    50.          */  
    51.         public static String Detail(String id){  
    52.                 Map<String, String> request = new HashMap<String, String>();  
    53.                 request.put("id", id);  
    54.                 return getObject(detail, request);  
    55.         }  
    56.         /** 
    57.          * 添加一个用户 
    58.          * @param user 
    59.          * @return 
    60.          */  
    61.         public static String Add(Users user){  
    62.                 Map<String, String> request = new HashMap<String, String>();  
    63.                 request.put("id""");  
    64.                 MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();  
    65.                 map.add("loginname", user.getLoginname());  
    66.                 map.add("loginpassword", user.getLoginpassword());  
    67.                 map.add("useremail", user.getUseremail());  
    68.                 map.add("usermobile", user.getUsermobile());  
    69.                 return postObject(add,map,request);  
    70.         }  
    71.         /** 
    72.          * 根据id更新用户 返回更新的实例和信息(restTemplate.put 也可以直接更新) 
    73.          * @param id 
    74.          * @param user 
    75.          * @return{"users":{"id":"4028809b376daa8901376dab59520001","loginname":"45345345","loginpassword":null,"username":"测试一下kankan","useremail":null,"usermobile":"ddddd","userstate":null,"userlogintime":null}} 
    76.          */  
    77.         public static String Update(String id,Users user){  
    78.                 Map<String, String> request = new HashMap<String, String>();  
    79.                 request.put("id", id);  
    80.                 MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();  
    81.                 map.add("loginname", user.getLoginname());  
    82.                 map.add("username", user.getUsername());  
    83.                 map.add("usermobile", user.getUsermobile());  
    84.                 return postObject(update,map, request);  
    85.         }  
    86.         /** 
    87.          * 更加id删除用户(也可以用restTemplate.delete 但是没有返回的信息) 
    88.          * @param id 
    89.          * @param user 
    90.          * @return {"ajax":{"success":true,"messages":"删除成功!"}} 
    91.          */  
    92.         public static String Delete(String id){  
    93.                 Map<String, String> request = new HashMap<String, String>();  
    94.                 request.put("id", id);  
    95.                 return getObject(delete, request);  
    96.         }  
    97.         /** 
    98.          * 上传文件 
    99.          * @param path 
    100.          * @return 
    101.          */  
    102.         public static String UploadFile(String path){  
    103.                 MultiValueMap<String, Object> formData = new LinkedMultiValueMap<String, Object>();  
    104.                 Resource resource;  
    105.                 try {  
    106.                         resource = new UrlResource("file://"+path);  
    107.                         formData.add("json", resource);  
    108.                 } catch (MalformedURLException e) {  
    109.                         e.printStackTrace();  
    110.                 }   
    111.                 HttpHeaders requestHeaders = new HttpHeaders();  
    112.         requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);  
    113.         HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(formData, requestHeaders);  
    114.                 ResponseEntity<String> response = restTemplate.exchange(upload, HttpMethod.POST, requestEntity, String.class);  
    115.                 return response.getBody();  
    116.         }  

    =============================服务器端部分代码============================== 
    Java代码  收藏代码
    1. /**注意下面的方法中请求的方法名称是一样的, 
    2.          * 只不过根据不同的RequestMethod.GET来找对应的方法 
    3.          * RequestMethod ( 
    4.          * GET=get提交,  
    5.          * HEAD,  
    6.          * POST=post提交,  
    7.          * PUT=put更新,  
    8.          * DELETE=delete删除,  
    9.          * OPTIONS, TRACE) 
    10.          * 对应 
    11.          * <form:form method="POST"> 
    12.          * <form:form method="PUT"> 
    13.          * <form:form method="DELETE"> 
    14.          */  
    15.   
    16.         /** 
    17.          * 用户列表例子(不带分页) 
    18.          * @return 
    19.          */  
    20.         @RequestMapping(value="/list",method=RequestMethod.GET)  
    21.         public ModelAndView UserList(){  
    22.                 List<Users> list = usersService.listAll();  
    23.                 return new ModelAndView("main""userslist", list);  
    24.         }  
    25.         /** 
    26.          * 用户列表例子(带分页) 
    27.          * @return 
    28.          */  
    29.         @RequestMapping(value="/query",method=RequestMethod.GET)  
    30.         public ModelAndView UserListPage(HttpServletRequest request,Model model, @ModelAttribute("command") Users command){  
    31.                 model.addAttribute(Constants.COMMAND, command);  
    32.                 int pn = ServletRequestUtils.getIntParameter(request, "pn"1);  
    33.                 Page<Users> list = usersService.listAllUsers(command, pn);  
    34.         model.addAttribute("page", list);  
    35.                 return new ModelAndView("query");  
    36.         }  
    37.         /** 
    38.          * 新增之前绑定PO到form表单跳转到新增页面例子 
    39.          * @param model 
    40.          * @return 
    41.          */  
    42.         @RequestMapping(value="/add",method=RequestMethod.GET)  
    43.         public ModelAndView before_UserAdd(Model model){  
    44.                 //相当于request.setattribute的意思  
    45.                 if(!model.containsAttribute(Constants.COMMAND))  
    46.                         model.addAttribute(Constants.COMMAND, new Users());  
    47.                 return new ModelAndView("add");  
    48.         }  
    49.         /** 
    50.          * 新增用户例子 
    51.          * @param users 
    52.          * @return 
    53.          */  
    54.         @RequestMapping(value="/add",method=RequestMethod.POST)  
    55.         public ModelAndView after_UserAdd(Users user){  
    56.                 usersService.save(user);  
    57.                 AjaxResponse ajax = new AjaxResponse();  
    58.                 ajax.setSuccess(true);  
    59.                 ajax.setMessages("注册成功!");  
    60.                 return new ModelAndView("ajax","ajax",ajax);  
    61.                 //也可以直接返回列表也行  
    62.                 //return new ModelAndView(new RedirectView("list"));  
    63.         }  
    64.         /** 
    65.          * 更新之前绑定PO到form表单跳转到更新页面 
    66.          * @param id 
    67.          * @param model 
    68.          * @return 
    69.          */  
    70.         @RequestMapping(value="/{id}/detail",method=RequestMethod.GET)  
    71.         public ModelAndView get_Users(@PathVariable String id,Model model){  
    72.                 Users users = usersService.get(id);  
    73.                 model.addAttribute("users", users);  
    74.                 return new ModelAndView("detail");  
    75.         }  
    76.         /** 
    77.          * 更新之前绑定PO到form表单跳转到更新页面 
    78.          * @param id 
    79.          * @param model 
    80.          * @return 
    81.          */  
    82.         @RequestMapping(value="/{id}/updates",method=RequestMethod.GET)  
    83.         public ModelAndView before_UsersUpdate(@PathVariable String id,Model model){  
    84.                 Users users = usersService.get(id);  
    85.                 if(!model.containsAttribute(Constants.COMMAND))  
    86.                         model.addAttribute(Constants.COMMAND, users);  
    87.                 return new ModelAndView("updates");  
    88.         }  
    89.         /** 
    90.          * 更新用户例子(put更新 一般用在web) 
    91.          * @param users 
    92.          * @return 
    93.          */  
    94.         @RequestMapping(value="/{id}/updates",method=RequestMethod.PUT)  
    95.         public ModelAndView after_put_UserUpdate(Users user){  
    96.                 usersService.update(user);  
    97.                 return new ModelAndView("redirect:../list");  
    98.         }  
    99.         /** 
    100.          * 更新用户例子(post更新 一般用在client) 
    101.          * @param users 
    102.          * @return 
    103.          */  
    104.         @RequestMapping(value="/{id}/updates",method=RequestMethod.POST)  
    105.         public ModelAndView after_post_UserUpdate(Users user){  
    106.                 usersService.update(user);  
    107.                 AjaxResponse ajax = new AjaxResponse();  
    108.                 ajax.setSuccess(true);  
    109.                 ajax.setMessages("更新成功!");  
    110.                 return new ModelAndView("ajax","ajax",ajax);  
    111.         }  
    112.         /** 
    113.          * 删除用户例子 
    114.          * @param id 
    115.          * @return 
    116.          */  
    117.         @RequestMapping(value="/{id}/delete",method=RequestMethod.GET)  
    118.         public ModelAndView UserDelete(@PathVariable String id){  
    119.                 usersService.delete(id);  
    120.                 AjaxResponse ajax = new AjaxResponse();  
    121.                 ajax.setSuccess(true);  
    122.                 ajax.setMessages("删除成功!");  
    123.                 return new ModelAndView("ajax","ajax",ajax);  
    124.         }  
    125.         /** 
    126.          * 上传文件 
    127.          * @param request 
    128.          * @return 
    129.          */  
    130.         @RequestMapping(value="/upload",method=RequestMethod.POST)  
    131.         public ModelAndView Upload(@RequestParam("json") MultipartFile multi){  
    132.                 try {  
    133.                         byte[] bytes =  multi.getBytes();  
    134.                         FileOutputStream out = new FileOutputStream("D:\"+multi.getOriginalFilename());  
    135.                         out.write(bytes);  
    136.                         out.close();  
    137.                 } catch (IOException e) {  
    138.                         // TODO Auto-generated catch block  
    139.                         e.printStackTrace();  
    140.                 }  
    141.   
    142.                 AjaxResponse ajax = new AjaxResponse();  
    143.                 ajax.setSuccess(true);  
    144.                 ajax.setMessages("文件上传成功!");  
    145.                 return new ModelAndView("ajax","ajax",ajax);  
    146.         }  

    //--------------------------------------------------------------

    使用Spring-Android获取和解析json数据


    项目中需要的LIB: 
    spring-android-core-1.0.0.M4.jar 
    spring-android-rest-template-1.0.0.M4.jar 
    gson-2.1.jar 使用google的这个json解析lib是因为这个lib较小 

    服务端返回数据如: 

    Js代码  收藏代码
    1. {"id":"109","word":"test","translation":"n. 试验;检验"}  

    客户端建立对应的Domain类,如: 


    Java代码  收藏代码
    1. public class Word {  
    2.     private int id;  
    3.     private String word;  
    4.     private String translation;  
    5. }  

    使用Spring-Android调用,并转换成Word类 

    Java代码  收藏代码
    1. String url = "http://localhost/api/word/detail.php?id=109";  
    2. RestTemplate restTemplate = new RestTemplate();  
    3. Word word = restTemplate.getForObject(url, Word.class);  

    另外Spirng Android的Lib库中还提供了解析XML,RSS,还有OAuth验证的实现。

    //--------------------------------------------------------------------------------------

    http://www.chenwg.com/android/spring-android%E7%9A%84%E4%BD%BF%E7%94%A8.html

    了解J2EE的人都会知道spring这个开源框架,不过哥对J2EE的开发没什么兴趣,太重量级了,不适合互联网的应用,还是喜欢php多点,不过sping在移动开发这块也推出了spring-android,spring-android可以做什么?有什么优势呢?

    spring-android主要提供了两个重要的功能:

    1.Rest模板,很多Android应用都要与服务器进行交互,而现在很多互联网应用的服务器端都会提供Rest服务,数据格式一般是json、xml、rss等,如果使用spring-android,这将大大方便你的Android应用与服务器端的交互,spring-android在解析json,xml都是非常方便的;

    2.Auth授权验证,现在很多互联网应用都提供了开放的API服务,而你的Android应用要接入到这些服务中去,往往要经过授权才行,现在很多应用都使用Auth授权认证,如twitter、facebook、新浪微博等,如果使用spring-android,在授权验证这块将会非常方便。

    如何使用spring-android呢?

    1.首先要去http://www.springsource.org/spring-android 下载spring-android,然后解压。

    2.新建一个Android项目,然后将解压后的spring-android里的spring-android-core-1.0.1.RELEASE.jar和spring-android-rest-template-1.0.1.RELEASE.jar放到Android项目的lib目录下,因为要访问在网络,所以要在AndroidManifest.xml文件下加入<uses-permission android:name=”android.permission.INTERNET”/>​

    3.acitivity_main.xml文件如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
     
        <TextView
            android:id="@+id/result_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            tools:context=".MainActivity"/>
     
    </RelativeLayout>

    4.MainActivity.java如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    package com.hxxy.springforandroidfirstdemo;
     
    import org.springframework.http.converter.StringHttpMessageConverter;
    import org.springframework.web.client.RestTemplate;
     
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.widget.TextView;
     
    public class MainActivity extends Activity {
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final TextView resultTextView = (TextView) findViewById(R.id.result_text);
     
            AsyncTask<String, Void, String> simpleGetTask =  new AsyncTask<String, Void, String>() {
                @Override
                protected String doInBackground(String... params) {
                    // executed by a background thread
     
                    // 创建一个RestTemplate实例
                    RestTemplate restTemplate = new RestTemplate();
     
                    // 添加字符串消息转换器
                    restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
     
                    return restTemplate.getForObject(params[0], String.class);
                }
     
                @Override
                protected void onPostExecute(String result) {
                    resultTextView.setText(result);
                }
     
            };
     
            String url = "http://www.chenwg.com";
            // 完成时更新resultTextView
            simpleGetTask.execute(url);
        }
    }
  • 相关阅读:
    mysql查询不同用户(操作记录)的最新一条记录
    Mysql复制一条或多条记录并插入表|mysql从某表复制一条记录到另一张表
    获取股票数据接口(腾讯)
    uni-app微信相关开发问题记录:微信分享报错"包名不对,请检查包名是否与开放平台填写一致"、Android微信支付只能调起一次的问题、App微信登录与公众号微信登录的unionid不一致
    如何生成Android签名证书、安卓签名获取工具获取APP签名报错:NameNotFoundException: Signs is null的问题
    uniapp微信APP支付踩坑指南:报错errMsg: "requestPayment:fail errors"
    浅析判断一个APP是原生的还是H5页面
    uniapp nvue开发注意事项
    浅析Redis(整合Springboot、订阅发布、集群、雪崩、穿透、击穿)
    uniapp引入iconfont图标及解决真机中iconfont不显示的问题
  • 原文地址:https://www.cnblogs.com/fx2008/p/3274227.html
Copyright © 2020-2023  润新知