今天要学的例子是通过android 手机客户端登陆到服务器。验证是否登陆成功。

首先:我们在myEclipse 中新建一个web项目提供手机客户端的登陆请求,并做出响应,我们使用struts2.1.8。做一个简单的示例。

这个web服务可以接收post |get 的请求。代码如下:

package com.hkrt.action;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
public class LoginCheckAction implements Action{  private String userName;  private String password;  public String execute() throws Exception {  HttpServletRequest request = ServletActionContext.getRequest();  InputStream is = request.getInputStream();byte [] result = readIS(is);if(result.length>0){Map<String,String> resuestMap = getRequestParams(new String(result));if(!resuestMap.isEmpty()){userName = resuestMap.get("userName");password = resuestMap.get("password");}    }else{userName = request.getParameter("userName");  password = request.getParameter("password");  }System.out.println("userName:"+userName+"\tpassword:"+password);HttpServletResponse response = ServletActionContext.getResponse();  OutputStream os = response.getOutputStream();    if(!"zs".equals(userName) || !"123".equals(password)){  os.write(new String("-1").getBytes());  } else {  os.write(new String("1").getBytes());  }  response.setStatus(HttpServletResponse.SC_OK);  System.out.println("数据访问");return null;  }  public static byte[] readIS(InputStream is) throws IOException {ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] buff = new byte[1024];int length = 0;while ((length = is.read(buff)) != -1) {bos.write(buff, 0, length);}return bos.toByteArray();}// 以Post 请求时,返回请求一个map的请求参数private Map<String,String> getRequestParams(String requestStr){Map<String,String> maps = new HashMap<String, String>();String [] strs = requestStr.split("&");List<String> list = new ArrayList<String>();for(String st:strs){list.add(st);}for(String lis:list){maps.put(lis.split("=")[0],lis.split("=")[1]);}return maps;}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;  }
}

配置strus.xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="default" namespace="/actions" extends="struts-default"><!-- 登陆 action --><action name="LoginCheckAction" class="com.hkrt.action.LoginCheckAction"/></package>
</struts>

现在服务器代码就写完了,没有与数据库进行交互。

以下。我们实现android 客户端登陆的代码:

页面如下:很难看...

代码实现的功能:记录用户名和密码,以get或post 方式请求服务。线程之间的数据交互,对UI进行绘制。

package com.hkrt.activity;import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;import com.hkrt.R;public class LoginUserActivity extends Activity {private static final String TAG_POST = "post 请求";private EditText userNameEdit,passwordEdit;private CheckBox checkPwd;//记录密码private ImageButton login;//登陆按钮private   SharedPreferences sharedPreferences ;//保存用户名和密码的文件private Editor editor;//编辑private ProgressDialog proDialog;  //进度条private Handler loginHandler;//信息处理机private String userName;private String password;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.login_user_activity);initView();remberMe();login.setOnClickListener(submitListener);loginHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {Bundle bundle = msg.getData();boolean loginResult = (Boolean)bundle.get("isNetError");//只获取登陆失败if(proDialog != null){  proDialog.dismiss();  }boolean isNet =  isNetWorkAvailable(LoginUserActivity.this);if(!isNet){Toast.makeText(LoginUserActivity.this, "当前网络不可用",  Toast.LENGTH_SHORT).show(); }if(!loginResult) {  Toast.makeText(LoginUserActivity.this, "错误的用户名或密码",  Toast.LENGTH_SHORT).show();  }  super.handleMessage(msg);}};}//查测网络是否连接 需要添加连网权限 返回true 表示联网 返回false 表示没有联网  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />public static boolean isNetWorkAvailable(Context context) {  ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  NetworkInfo info = cm.getActiveNetworkInfo();  return info != null && info.isConnected();  } //初始化UI组件private void initView(){userNameEdit = (EditText)this.findViewById(R.id.username_edit);passwordEdit = (EditText)this.findViewById(R.id.password_edit);checkPwd = (CheckBox)this.findViewById(R.id.checkPwd);login = (ImageButton)this.findViewById(R.id.login);}//记录密码private void remberMe(){sharedPreferences= getSharedPreferences("login",Context.MODE_PRIVATE);editor = sharedPreferences.edit();//获取编辑器  String userName =    sharedPreferences.getString("name","");String pwd =    sharedPreferences.getString("pwd","");userNameEdit.setText(userName);passwordEdit.setText(pwd);if(userName!=null && !userName.equals("")){checkPwd.setChecked(true);}}//登陆事件private OnClickListener submitListener = new OnClickListener() {  public void onClick(View v) {  userName = userNameEdit.getText().toString();password=passwordEdit.getText().toString();if(checkPwd.isChecked()){// 编辑配置  editor.putString("name",userName);  editor.putString("pwd",password);  editor.commit();//提交修改  }else{editor.putString("name",null);  editor.putString("pwd", null);  editor.commit();//提交修改  }proDialog = ProgressDialog.show(LoginUserActivity.this,"请稍候","正在登陆...", true, true); Thread loginThread = new Thread(new LoginFailureHandler());  loginThread.start();  }  };// 验证是否登陆成功private class LoginFailureHandler implements Runnable{@Overridepublic void run() {boolean loginState = loginActionMethodPost(userName,password);if(loginState){Intent intent = new Intent(LoginUserActivity.this,LoginUserSuccessActivity.class);Bundle bun = new Bundle();bun.putString("userName",userName);bun.putString("password",password);intent.putExtras(bun);startActivity(intent);proDialog.dismiss();  }else{Message message = new Message();Bundle bundle = new Bundle();  bundle.putBoolean("isNetError",loginState);  message.setData(bundle);  loginHandler.sendMessage(message);  }}}//请求登陆 get 方式 private boolean loginActionMethodGet(String name,String pwd){BufferedInputStream bufIn  = null;boolean login =false;String validateURL="http://10.0.2.2:8080/androidService/actions/LoginCheckAction?userName=" + name + "&password=" +pwd; try {URL url = new URL(validateURL);HttpURLConnection httpConn =  (HttpURLConnection)url.openConnection();httpConn.setConnectTimeout(5000);  httpConn.setRequestMethod("GET");     httpConn.connect();  bufIn = new BufferedInputStream(httpConn.getInputStream());if(httpConn.getResponseCode()==HttpURLConnection.HTTP_OK){byte [] body = new byte [1];bufIn.read(body);String loginState  = new String(body);if(loginState.equals("1")){ //返回1登陆成功 -1登陆失败login =true;}else{login =false;}}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if(bufIn!=null){try {bufIn.close();} catch (IOException e) {e.printStackTrace();}}}return login;}// 登陆的 post 方式private boolean loginActionMethodPost(String name, String pwd) {boolean login = false;// Post方式请求String validateURL = "http://10.0.2.2:8080/androidService/actions/LoginCheckAction";// 请求的参数转换为byte数组String params;try {params = "userName=" + URLEncoder.encode(name, "UTF-8") + "&password=" + URLEncoder.encode(pwd,"UTF-8");byte[] postData = params.getBytes();// 新建一个URL对象URL url = new URL(validateURL);// 打开一个HttpURLConnection连接HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();// 设置连接超时时间urlConn.setConnectTimeout(5 * 1000);// Post请求必须设置允许输出urlConn.setDoOutput(true);// Post请求不能使用缓存urlConn.setUseCaches(false);// 设置为Post请求urlConn.setRequestMethod("POST");urlConn.setInstanceFollowRedirects(true);// 配置请求Content-TypeurlConn.setRequestProperty("Content-Type","application/x-www-form-urlencode");// 开始连接urlConn.connect();// 发送请求参数DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());dos.write(postData);dos.flush();dos.close();// 判断请求是否成功if (urlConn.getResponseCode() == HttpURLConnection.HTTP_OK) {// 获取返回的数据byte[] data = readIS(urlConn.getInputStream());if(data.length>0){String loginState = new String(data);if (loginState.equals("1")) {login = true;}Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");Log.i(TAG_POST, new String(data, "UTF-8"));}} else {Log.i(TAG_POST, "Post方式请求失败");}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (ProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{}return login;}//读取服务器返回的记录  public static byte[] readIS(InputStream is) throws IOException {ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] buff = new byte[1024];int length = 0;while ((length = is.read(buff)) != -1) {bos.write(buff, 0, length);}bos.flush();bos.close();return bos.toByteArray();}}

注:服务器的请求路径,由127.0.01 改成10.0.2.2

以上android 客户端登陆代码可以使用apache 公司的HttpClient.代码格式如下:

// 使用Apache 提供的httpClient 发送get 请求private boolean loginActionMethodHttpGet(String name,String pwd){BufferedInputStream bufIn  = null;boolean login =false;String validateURL="http://10.0.2.2:8080/androidService/actions/LoginCheckAction?userName=" + name + "&password=" +pwd; HttpGet get = new HttpGet(validateURL);HttpClient httpClient = new DefaultHttpClient();try {HttpResponse httpResponse = httpClient.execute(get);HttpEntity entity = httpResponse.getEntity();if(entity!=null){bufIn = new BufferedInputStream(entity.getContent());byte [] body = new byte [1];bufIn.read(body);String loginState  = new String(body);if(loginState.equals("1")){ //返回1登陆成功 -1登陆失败login =true;}else{login =false;}}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return login;}// 使用Apache 提供的httpClient 发送 post 请求private boolean loginActionMethodHttpPost(String name,String pwd){boolean login =false;String validateURL = "http://10.0.2.2:8080/androidService/actions/LoginCheckAction";HttpPost httpPost = new HttpPost(validateURL);List<NameValuePair> params = new ArrayList<NameValuePair>();HttpClient httpClient = new DefaultHttpClient();try {params.add(new BasicNameValuePair("userName", name));params.add(new BasicNameValuePair("password", pwd));httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));HttpResponse httpResponse = httpClient.execute(httpPost);if(httpResponse.getStatusLine().getStatusCode()==200){String loginState = EntityUtils.toString(httpResponse.getEntity());System.out.println("apache post:"+loginState);if(loginState.equals("1")){ //返回1登陆成功 -1登陆失败login =true;}else{login =false;}}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return login;}

android 之手机客户端登陆相关推荐

  1. 模仿android新浪微博手机客户端项目

    这几天因为事情不多,所以模仿android新浪微博客户端也做了下,虽然后面还有很多功能没有实现(由于时间有限,平时还要上班),所以后面还有很多功能没有实现,不过以后有时间会慢慢做完. 下面发几张截图: ...

  2. android团购客户端,领团网团购导航Android手机客户端获机锋网力推

    近日,领团网(www.lingtuan.com)推出的Android团购导航手机客户端1.1版本登陆国内最具影响力的Android交流平台机锋网,作为国内团购导航权威,领团网手机客户端获机锋网力推,绚 ...

  3. 淘宝网手机客户端应用开发见解带android版源码下载

    淘宝网手机客户端是一个基于Android进行应用的项目,通过该客户端实现了注册功能 .登陆.分页展示商品列表.能够对商品按名称进行模糊查询.能够对商品进行管理 .能够对商品按价格排序.可以查看商品详细 ...

  4. 基于Android的淘宝网手机客户端开发见解(配完整视频教程讲解)

    淘宝网手机客户端是一个基于Android进行应用的项目,通过该客户端实现了注册功能.登陆.分页展示商品列表.能够对商品按名称进行模糊查询.能够对商品进行管理.能够对商品按价格排序.可以查看商品详细信息 ...

  5. 乐视android版本怎么升级,乐视网android手机客户端升级推出V2.0版

    乐视网 android手机客户端V2.0版--"乐视影视"正式发布,据乐视网运营副总裁高飞介绍,"V2.0版是早期发布的乐视网android手机客户端V1.5版的升级版本 ...

  6. 21cn企业邮箱服务器端口号,21cn企业邮箱手机客户端设置--Android

    Android用户可通过Android自带客户端,浏览器以及下载21CN手机邮三种方式访问21CN企业邮箱 客户端设置: 谷歌Android操作系统除了有GMail外还包含了一个强大的E-Mail电子 ...

  7. Android开发实例-Android平台手机新闻客户端

    Android开发实例<Android平台手机新闻客户端>是基于Android4.0及以上平台的一款新闻类手机应用,应用运行效果如下所示: Android开发实例课程主要介绍运行于Andr ...

  8. Android之使用HttpPost提交数据到服务器(Android手机客户端和后台服务器交互)

    这是一个小型的数据交互案例,即Android手机客户端和后台服务器交互(数据库mysql) 服务器端 首先服务器端数据库(用户名root密码123456),db_student.sql数据库表user ...

  9. 完美高仿精仿京东商城手机客户端android版源码

    转自http://blog.csdn.net/xiaocnblogs/article/details/45815445, 完美高仿精仿京东商城手机客户端android版源码,喜欢的朋友可以下载吧. 源 ...

最新文章

  1. flume java_Flume的安装及简单的使用(一)
  2. Linux IO路径图
  3. gerrit的使用和配置
  4. 在 xml 视图里指定 SAP UI5 VizType 实例
  5. linux如何挂载U盘
  6. 学术圈「超级内卷」:“青椒”难!
  7. Android 8.0 系统学习(6)---Linux内核接口要求
  8. ERP项目实施记录08
  9. 【LeetCode 剑指offer刷题】发散思维题2:43 n个骰子的点数
  10. 黑马程序员 Python学习笔记之 算数运算符
  11. accept - 指示打印系统接受发往指定目标打印机的打印 任务
  12. python多项式求导_OO博客作业1:多项式求导作业总结
  13. 东南大学计算机学院保研比例,江苏省高校保研率排行榜,南京大学第1,保研率超过1/3...
  14. 什么蓝牙耳机好?测评达人精选五款性价比高蓝牙耳机推荐
  15. 苹果微信换行怎么打_微信空白朋友圈怎么发?安卓苹果双平台教程
  16. python页面转图片_网页转图片_技术分享 - SegmentFault 思否
  17. 网站导航:如何在线生成自定义的二维码?(要美观不要俗气)
  18. 优秀自我简介200字_个人简历自我评价200字优秀范文.doc
  19. marlin的源码分析
  20. 计算机教室着火教师要赔偿多少钱,学校计算机教室进行整修,要铺设静电地板,教室长12、5米,宽7、2米,如果工本费是每平方米108元...

热门文章

  1. Mac微信多开与微信防撤回分享
  2. Python 利用多线程进行爬虫(一)
  3. linux cpu降频怎么设置,Android系统修改CPU降频温度阈值、修改CPU关内核温度阈值的方法...
  4. Android招聘心得分享
  5. Horizon Culling 地平线踢出法
  6. “似水无形” 的小程序化
  7. CAD/CASS依据等高线等距或随机加高程点插件(等高线等距加高程点、等高线随机加高程点、等高线手动加高程点)
  8. RDS电台 TA 与 AF解释
  9. 高德地图覆盖自定义瓦片图
  10. 安卓上通过pydorid 3来使用jupyter notebook(鸿蒙/华为/安卓手机/平板进行python编程学习)