Android+struts2+json方式模拟手机登录功能
涉及到的知识点:
1.Struts2框架的搭建(包括Struts2的jSON插件)
2.Android前台访问Web采用HttpClient方式。
3.Android采用JSON的解析。
服务端主要包含一个Action,通过struts的web配置配置struts.xml驱动业务逻辑的执行,然后对于符合条件的登录,返回给客户端通过jsonobject包装的数据。
服务端代码:
- package com.easyway.json.android;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import org.apache.struts2.interceptor.ServletResponseAware;
- import com.opensymphony.xwork2.ActionSupport;
- /** * 模拟登录,并返回json数据 @author xiangzhihong
- */
- public class LoginAction extends ActionSupport implements ServletRequestAware,
- ServletResponseAware {
- /** * */
- private static final long serialVersionUID = 1L;
- HttpServletRequest request;
- HttpServletResponse response;
- private String userName;
- private String password;
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
- }
- public void setServletResponse(HttpServletResponse response) {
- this.response = response;
- }
- /**
- * 模拟用户登录的业务
- */
- public void login() {
- try {
- this.response.setContentType("text/json;charset=utf-8");
- this.response.setCharacterEncoding("UTF-8");
- //JSONObject json=new JSONObject();
- Map<String,String> <span style="color: #ff0000;">json</span>=new HashMap<String,String>();
- if ("admin".equals(userName)&&"123456".equals(password)) {
- json.put("message", "欢迎管理员登陆");
- } else if ((!"admin".equals(userName))&&"123456".equals(password)) {
- json.put("message", "欢迎"+userName+"登陆!");
- } else {
- json.put("message", "非法登陆信息!");
- }
- byte[] jsonBytes = json.toString().getBytes("utf-8");
- response.setContentLength(jsonBytes.length);
- response.getOutputStream().write(jsonBytes);
- response.getOutputStream().flush();
- response.getOutputStream().close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
package xzh.com.listviewhover.ui;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import xzh.com.listviewhover.R;
import xzh.com.listviewhover.base.Constants;
/**
* Created by xiangzhihong on 2016/3/14 on 12:07.
* 测试服务端的登录json
*/
public class LoginActivity extends AppCompatActivity {
@InjectView(R.id.account)
EditText account;
@InjectView(R.id.pwd)
EditText pwd;
@InjectView(R.id.login)
Button login;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
initProxy();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.inject(this);
initView();
}
private void initProxy() {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog()
.build());
//设置虚拟机的策略
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
private void initView() {
}
@OnClick(R.id.login)
void loginClick(View v){
String userName=account.getText().toString();
String password=pwd.getText().toString();
doLogin(userName,password);
}
private void doLogin(String userName, String password) {
final String[] result = {null};
String reqUrl=null;
reqUrl= Constants.LOGIN_URL+"userName="+userName+"&password="+password;
try {
doHttp(result, reqUrl);
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("提示")
.setMessage(result[])
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(LoginActivity.this,MainActivity.class));
}
}).setNegativeButton("取消",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void doHttp(final String[] result, String reqUrl) {
// HttpClient httpclient = new DefaultHttpClient();
// HttpGet request=new HttpGet(reqUrl);
// request.addHeader("Accept","text/json");
// HttpResponse response =httpclient.execute(request);
// HttpEntity entity=response.getEntity();
// String json = EntityUtils.toString(entity,"UTF-8");
// if(json!=null&&json.contains("message")){
//// JSONObject jsonObject=new JSONObject(json);
//// result=jsonObject.get("message").toString();
// result="登录成功";
// }else {
// result="登录失败请重新登录";
// }
AsyncHttpClient client = new AsyncHttpClient();
client.get(this,reqUrl,new AsyncHttpResponseHandler(){
@Override
public void onSuccess(String content) {
super.onSuccess(content);
if (content!=null&&content.contains("message")){
] ="登录成功";
}else {
] ="登录失败";
}
}
});
}
}
好了,就到这,有需要的需要体验的请到我的git账号下载测试程序。
服务端代码:https://github.com/xiangzhihong/login
客户端代码:https://github.com/xiangzhihong/loginAndroid
Android+struts2+json方式模拟手机登录功能的更多相关文章
- Android+struts2+JSON方式的手机开发(Login)
在手机的后台服务无论是调用WebService还是Http请求,多数都是采用Android的HttpClient实现相关的调用实现.本文实现Android+Struts2+JSON方式实现为手机前台提 ...
- Struts2整合Hibernate3实现用户登录功能
所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...
- Struts2的一个入门实例----登录功能
一.搭建环境与测试 1.web.xml文件,配置核心Filter 1: <?xml version="1.0" encoding="UTF-8"?> ...
- chrome模拟手机功能
在搭建好web側环境之后.能够使用chrome来模拟手机的功能 直接上图吧: 图1是直接模拟一个通用的界面 图2里面能够选择不同的手机型号,还是比較全的! 选择一个查看一下,和手机是一样的效果,非常赞 ...
- 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...
- 设计基于HTML5的APP登录功能及安全调用接口的方式
转自:http://blog.csdn.net/linlzk/article/details/45536065 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而 ...
- 设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)
登录 保存密码 安全 加密 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而我前一段时间正好稍微研究了一下,所以把我知道的告诉大家,节约大家查找资料的时间. 你 ...
- 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能
现在网站基本都用手机注册,很少用邮箱注册,本篇内容比较多,代码我会尽量加备注,有些操作需要连续添加几个文件才不报错,如果VS显示错误,请继续后续步骤. 前面已经有一篇文章讲到集成短信发送模块:http ...
- android使用smack实现简单登录功能
android端采用xmpp协议实现即时通讯,在最开始的登录功能就遇到了不少障碍.首先在官网(https://www.igniterealtime.org/projects/openfire/)下载o ...
随机推荐
- x264源代码简单分析:编码器主干部分-1
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
Dynamics crm2016 on-premises版本已与12月14日开放下载,下载地址:https://www.microsoft.com/zh-cn/download/details.asp ...
- Android时遇到R.java was modified manually! Reverting to generated version!
欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 进入 eclipse后clipse Menu >Projects > clean 这么做就把R文件删了,但是别担心, ...
- GC垃圾回收算法
什么是GC垃圾回收呢.日常生活中我们去餐厅吃饭吃完饭,吃完饭走了餐具不用管,服务员在把餐具拿走,这是一种方式,服务员怎么知道他要来把餐具拿走呢,因为你走了,这个位置空了.服务员什么时候拿走餐具很重要, ...
- Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、
LineNumberReader 跟综行号的缓冲字符输入流,些类定义了setLineNumber(int)和getLineNumber(int),它们可分别用于设置和获取当前行号 import jav ...
- 开源项目——小Q聊天机器人V1.0
小Q聊天机器人V1.0 http://blog.csdn.net/baiyuliang2013/article/details/51386281 小Q聊天机器人V1.1 http://blog.csd ...
- Aandroid TV 基于Leanback支持最新MD设计的TV开发框架
原文地址:http://blog.csdn.net/sk719887916 作者:skay 基于6.0最新的API 支持TV的框架 Android 6.0已完美支持TV开发,之前的5.0后Recycl ...
- python 访问 zookeeper
python 访问 zookeeper zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同 ...
- ubuntu make menuconfig error
主机环境:ubuntu -------------------------------------------------------------- 在ubuntu系统中,要编译内核,还需要安装一系列 ...
- pyinstaller使用-python项目转换成exe可执行文件
http://blog.csdn.net/pipisorry/article/details/50620122 Python不是每个人的计算机里面都有安装,当您写了一个好用的工具,需要一个standa ...