前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android+struts2+json方式模拟手机登录功能

Android+struts2+json方式模拟手机登录功能

作者头像
xiangzhihong
发布2018-02-01 15:12:15
7030
发布2018-02-01 15:12:15
举报
文章被收录于专栏:向治洪

涉及到的知识点: 

1.Struts2框架的搭建(包括Struts2的jSON插件)

  2.Android前台访问Web采用HttpClient方式。

  3.Android采用JSON的解析。

服务端主要包含一个Action,通过struts的web配置配置struts.xml驱动业务逻辑的执行,然后对于符合条件的登录,返回给客户端通过jsonobject包装的数据。

服务端代码:

代码语言:java
复制
 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();  
         }  
     }  
 }  

   接下来是客户端代码,用AsyncHttpClient进行网络的请求,如果包含我返回的json字符串的标志,我认为访问成功

 客户端代码:

代码语言:javascript
复制
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[0])
                    .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")){
                    result[0] ="登录成功";
                }else {
                    result[0] ="登录失败";
                }
            }
        });
    }
}

好了,就到这,有需要的需要体验的请到我的git账号下载测试程序。

服务端代码:https://github.com/xiangzhihong/login

客户端代码:https://github.com/xiangzhihong/loginAndroid

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-03-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
测试服务
测试服务 WeTest 包括标准兼容测试、专家兼容测试、手游安全测试、远程调试等多款产品,服务于海量腾讯精品游戏,涵盖兼容测试、压力测试、性能测试、安全测试、远程调试等多个方向,立体化安全防护体系,保卫您的信息安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档