1:服务端代码如下

<?php
/**
*登录成功就返回 1,否则返回 0
*/
$REQUEST_METHOD=$_SERVER['REQUEST_METHOD']; if($REQUEST_METHOD=='GET'){
$name=$_GET['name'];
$pwd=$_GET['pwd'];
if($name=='yanshiying' && $pwd=='yanshiying'){
echo 1;
}else{
echo 0;
}
}else if($REQUEST_METHOD=='POST'){
$name=$_POST['name'];
$pwd=$_POST['pwd'];
if($name=='yanshiying' && $pwd=='yanshiying'){
echo 1;
}else{
echo 0;
}
}
?>

2:Android Client端。

(1):activity_main.xml

<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"> <ProgressBar
android:id="@+id/pb_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
style="?android:attr/progressBarStyleLarge"
android:visibility="gone"/> <EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"/> <EditText
android:id="@+id/et_pwd"
android:layout_below="@id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"/> <CheckBox
android:id="@+id/cb_remember"
android:layout_below="@id/et_pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Remember me"/> <Button
android:id="@+id/btn_login"
android:layout_below="@id/cb_remember"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Login"/>
</RelativeLayout>

(2):UIHelper.java

为了更方便使用Toast,所以在这里自定义了一个类,进行了简单的封装。

public class UIHelper {
private Context context=null; public UIHelper(Context context){
this.context=context;
} public void ShortToast(String text){
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
} public void LongToast(String text){
Toast.makeText(context, text, Toast.LENGTH_LONG).show();
}
}

(3):NetHelper.java

此类主要和服务端进行网络交互。

public class NetHelper {
public static String doLogin(String url) {
String result="";
HttpClient client=new DefaultHttpClient();
HttpGet get=new HttpGet(url);
try {
HttpResponse response=client.execute(get);
//服务端成功响应
if(response.getStatusLine().getStatusCode()==200){
//取得服务端返回的数据
result=EntityUtils.toString(response.getEntity());
}
} catch (Exception e) { }
return result;
}
}

(4):MainActivity.java   用户登录。

public class MainActivity extends Activity
implements OnClickListener, OnCheckedChangeListener {
//用于保存用户名
public static String USER_NAME=""; private SharedPreferences sp=null;
private EditText etName=null;
private EditText etPwd=null;
private CheckBox cbRemember=null;
private Button btnLogin=null;
private ProgressBar pbLogin=null; private boolean remember=false;
private String name="";
private String pwd=""; private UIHelper uiHelper=null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //实例化UI
initUI(); //读取用户登录信息
readSharedPreferences(); cbRemember.setOnCheckedChangeListener(this);
btnLogin.setOnClickListener(this);
} @Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
if(cbRemember.isChecked()){
remember=true;
}else{
remember=false;
}
} @Override
public void onClick(View arg0) {
name=etName.getText().toString();
pwd=etPwd.getText().toString();
if(doValidateForm()){
pbLogin.setVisibility(View.VISIBLE);
//开启线程进行用户登录处理
new Thread(new LoginThread()).start();
}
} private void initUI(){
sp=this.getSharedPreferences("account", MODE_PRIVATE); etName=(EditText)findViewById(R.id.et_name);
etPwd=(EditText)findViewById(R.id.et_pwd);
cbRemember=(CheckBox)findViewById(R.id.cb_remember);
btnLogin=(Button)findViewById(R.id.btn_login);
pbLogin=(ProgressBar)findViewById(R.id.pb_login); uiHelper=new UIHelper(this);
} private void readSharedPreferences(){
String name=sp.getString("u_name", "");
String pwd=sp.getString("u_pwd", "");
etName.setText(name);
etPwd.setText(pwd);
if(!(name.equals("") &&pwd.equals(""))){
remember=true;
cbRemember.setChecked(true);
}
} private void saveSharedPreferences(){
SharedPreferences.Editor editor=sp.edit();
if(remember){//记住用户登录信息
editor.putString("u_name", name);
editor.putString("u_pwd", pwd);
editor.commit();
}else{
editor.clear();
editor.commit();
}
} //校验用户字段
private boolean doValidateForm(){
if(name.length()<1){
uiHelper.ShortToast("用户名不能为空!");
return false;
}else if(pwd.length()<1){
uiHelper.ShortToast("密码不能为空!");
return false;
}
return true;
} private Handler loginHandler=new Handler(){
public void handleMessage(Message msg){
pbLogin.setVisibility(View.GONE);
//将登录结果提示给用户
if(msg.what==100){
String info="";
String flag=(String)msg.obj;
if(flag.equals("1")){
//info="登录成功!";
USER_NAME=name;
Intent intent=new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
finish();
return;
}else if(flag.equals("0")){
info="用户名或密码错误!";
}else{
info="登录失败请稍后重试!";
}
uiHelper.ShortToast(info);
}
}
};
class LoginThread implements Runnable{
public void run(){
String url="http://192.168.0.116/android/login.php?name="+name+"&pwd="+pwd;
String flag=NetHelper.doLogin(url);
if(flag.equals("1")){
//记住用户登录信息
saveSharedPreferences();
}
loginHandler.obtainMessage(100, flag).sendToTarget();
}
}
}

(5)OtherActivity.java 主要用于用户登录成功后信息的显示

public class OtherActivity extends Activity {
private TextView tvShow=null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
tvShow=(TextView)findViewById(R.id.tv_show); tvShow.setText(MainActivity.USER_NAME);
}
}

3:最后不要忘了在AndroidManifest.xml文件中添加:

<uses-permission android:name="android.permission.INTERNET" />

Android 用户登录的更多相关文章

  1. Android 用户登录界面

    本篇博客主要给大家演示怎样一步一步地创建一个类似于下图展示的这么一个UI界面: 一.准备图片资源 记住:因为Demo其中用到的图片资源都是直接从上面图片截取的,所以图片质量上面会差一些,只是.不影响我 ...

  2. Android用户登录机制安全性的一些思考

    1  client要做到安全存贮数据非常难,通过反编译和强攻.仅仅要有心,差点儿都能够破解. 2  服务端相对安全. 3  结合以上两点,推出能做的点是控制灾难规模.每次破解一个client仅仅能针对 ...

  3. android用户登录验证

    转自https://www.cnblogs.com/android-blogs/p/5912585.html

  4. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

  5. android loginDemo +WebService用户登录验证

        android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...

  6. Android 之 AlertDialog 用户登录

    1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  7. Android中利用httpclient进行网络通信的方法(以用户登录为例说明)

    http://www.android100.org/html/201406/09/22915.html 1.服务器端 服务器端和android没有太大关系,对J2EE比较熟悉的话写起来应该很容易,这里 ...

  8. Google用户登录界面 Android实现

    实验效果: 项目目录: Java代码(放在Src文件下) package com.bn.chap9.login; import java.io.BufferedReader; import java. ...

  9. Android studio 开发一个用户登录界面

    Android studio 开发一个用户登录界面 activity_main.xml <?xml version="1.0" encoding="utf-8&qu ...

随机推荐

  1. C++ Template Specialization (模板特化)

    个人理解这个东西说白了就是当模板类(或函数)的类型参数为某特定值时用对应的特化定义代之. 看个例子吧 #include <iostream> using namespace std; te ...

  2. MARCHdesign_王濤's 星云个人网站 | www.xingyun.cn/MARCHdesign

    MARCHdesign_王濤's 星云个人网站 | www.xingyun.cn/MARCHdesign MARCHdesign_王濤

  3. WKWebview点击图片查看大图

    大家都知道,WKWebview是没有查看大图的属性或者方法的,所以只能通过js与之交互来实现这一功能,原理:通过js获取页面的图片,把它存放到数组,给图片添加点击事件,通过index显示大图就行了 其 ...

  4. error in invoking target 'mkldflags ntcontab.o nnfgt.o' of makefile

    error in invoking target 'mkldflags ntcontab.o nnfgt.o' of makefile 今天是2013-08-04,在安装oracle11g r2 数据 ...

  5. 总结XX网app中webapp常见的前端错误。

    在2016年12月至2017年1月,这一个月的时间内,我参与了易政网app中webapp前端项目的工作,下面将我在此次项目中犯的错误总结起来,以防下次再犯.也终于知道之前看的文章中的一段话所代表的意义 ...

  6. 《网络编程》先进 I/O

    这部分是高级插座 I/O . 设置套接字超时报警,使用更方便的数据传输功能. 套接字 I/O 设置操作超时有三种方法: 转让 alarm 性能,制作时,它指定超时 SIGALRM 信号: 在 sele ...

  7. 第一篇!in和exists性能比较和使用

    首先,先看下in和exists的区别: in 是把外表和内表作hash 连接: exists是对外表作loop循环,每次loop循环再对内表进行查询. 普遍的观点是exists比in效率高的.但是这不 ...

  8. [转] PostgreSQL学习手册(函数和操作符)

    一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是PostgreSQL中提供的比较操作符列表: 操作符 描述 < ...

  9. Java基础知识强化23:Java中数据类型转换(面试题)

    1. 以下代码输出结果是( D ).                     public  class  Test   {                                       ...

  10. Java设计模式---组合模式

    一.组合模式定义 组合模式定义: Compose objects into tree structures to represent part-whole hierarchies. Composite ...