Android通过PHP服务器实现登录
Android客户端和PHP、MySQL搭建的服务器之间的简单交互,实现登录功能 。
实现原理图:

Handler消息机制原理:
Handler机制主要包括4个关键对象,分别是Message、Handler、MessageQueue、Looper。
下面对这4个关键对象进行简单的介绍。
1.Message
Message是线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。Message的what字段可以用来携带一些整型数据,obj字段可以携带一个Object对象。
2.Handler
Handler就是处理者的意思,它主要用于发送消息和处理消息。一般使用Handler对象的sendMessage()方法发送消息,发出的消息经过一系列的辗转处理后,最终会传递到Handler对象的HandlerMessage()方法中。
3.MessageQueue
MessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。每个线程中只会有一个MessageQueue对象。
4.Looper
Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会进入一个无限循环中。然后,每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的HandlerMessage()方法中。此外,每个线程也只会有一个Looper对象。在主线程中创建Handler对象时,系统已经创建了Looper镀锌,所以不用手动创建Looper对象,而在子线程中的Handler对象,需要调用Looper.loop()方法开启消息循环。

图中可以清晰的看到整个Handler消息机制处理流程。Handler消息处理首先需要在UI线程创建一个Handler对象,然后在子线程中调用了sendMessage()方法,接着这个消息会存放在UI线程的MessageQueue中,通过Looper对象取出MessageQueue中的消息,最后分发回Handler的HandMessage()方法中。
下面是我写的代码以及本程序的logcat的运行结果。
本次任务中遇到的难题:
无法连接到PHP服务器。实现了把自己输入的用户名和密码封装成了JSON但是无法发送到PHP进行与数 据库的比对。
package com.itcast.test03; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity {
private EditText et_username;
private EditText et_userPsd;
private Button login;
private Button signUp;
private CheckBox save;
private String user,pass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_username = (EditText)findViewById(R.id.et_number);
et_userPsd = (EditText)findViewById(R.id.et_password);
login=(Button)findViewById(R.id.login);
signUp=(Button)findViewById(R.id.signUp);
save = (CheckBox)findViewById(R.id.save);
//登录按钮的点击事件
login.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub //将输入的用户名和密码转换成字符串
String name =et_username.getText().toString();
String pwd = et_userPsd.getText().toString();
//调用login方法
login(name, pwd);
}
});
} private void login(final String name, final String pwd){
//创建Handler对象
final Handler handler = new Handler() { public void handleMessage(Message msg) {
if(msg.what == 1){
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
//提示登陆成功
finish();
}else if(msg.what == 0){
Log.i(name, msg.toString());
}else if(msg.what == -1){
Log.i("==============",msg.toString());
}
}
};
new Thread(){
public void run() {
//创建Message对象
Message msg =new Message();
try {
Post po = new Post();
String infoo = po.logina(name, pwd);
if(infoo != null){
msg.what = 1;//成功
msg.obj = infoo;
}else{
msg.what = 0;//失败
msg.obj = "2";
}
} catch (Exception e) {
e.printStackTrace();
msg.what = -1;
msg.obj = e;
}
handler.sendMessage(msg);
}
}.start();
}
}
package com.itcast.test03; import java.io.IOException; import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject; import android.util.Log; public class Post { public String logina(String name, String pwd)throws ParseException, IOException, JSONException{
//获取到HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
String strurl = "http://10.6.78.213:2016/xampp/sse/index.php/home/Index/server_info";
HttpPost request = new HttpPost(strurl);
request.addHeader("Accept","application/json");
request.addHeader("Content-Type","application/json");//还可以自定义增加header
JSONObject param = new JSONObject();//定义json对象
param.put("sequenceId", "87620056570355357690");
param.put("accType", "0");
param.put("loginId", name);
param.put("password", pwd);
//param.put("thirdpartyAppId", "");
//param.put("thirdpartyAccessToken", "");
param.put("loginType", "1");
Log.i("===========", param.toString());
System.out.println("1+===========");
StringEntity se = new StringEntity(param.toString());
request.setEntity(se);//发送数据
HttpResponse httpResponse = httpClient.execute(request);//获得相应
System.out.println("2+===========");//进行一行一行的调试时无法打印此语句。原因就是无法成功连接到 网络
int code = httpResponse.getStatusLine().getStatusCode();
System.out.print(code);
String result = EntityUtils.toString(httpResponse.getEntity());
JSONObject result1 = new JSONObject(result);
String info = (String) result1.get("retInfo");
Log.i("=============", info);
return info;
} }

Android通过PHP服务器实现登录的更多相关文章
- Android 应用程序集成Google 登录及二次封装
谷歌登录API: https://developers.google.com/identity/sign-in/android/ 1.注册并且登录google网站 https://accounts. ...
- Android客户端与服务器
就是普通的服务器端编程,还不用写界面,其实还比服务器编程简单一些.跟J2EE一样的服务器,你android这一方面只要用json或者gson直接拿数据,后台的话用tomcat接受请求操作数据,功能不复 ...
- 【Android】与服务器实现JSON数据通信
一.前言 作为一名移动端开发人员,具备一定的服务端开发能力也是非常必要的,本篇博客讲述如何在Android和服务器之间实现JSON数据通信交互,博客内容基于另外一篇博客:[Web]Eclipse + ...
- Android和FTP服务器交互,上传下载文件(实例demo)
今天同学说他备份了联系人的数据放在一个文件里,想把它存到服务器上,以便之后可以进行下载恢复..于是帮他写了个上传,下载文件的demo 主要是 跟FTP服务器打交道-因为这个东东有免费的可以身亲哈 1. ...
- 再谈腾讯云centos服务器不能登录的解决过程
上篇文章谈到腾讯云centos服务器不能登录,通过查看监控信息,cpu使用过高,再腾讯云页面使用VNC方式直接登录,然后根据提示信息,关闭导致内存溢出的进程,从而解决问题. 1 问题再现 昨天刚解决了 ...
- 腾讯云centos服务器不能登录的解决过程
在腾讯云上申请了一个centos服务器,最基础的配置,1 核 1 GB 1 Mbps,50G硬盘,主要用来测试程序,练手用.在上面配置了一个mysql数据库,一直使用都没什么问题. 1 问题描述 过了 ...
- android客户端向服务器发送请求中文乱码的问
android客户端向服务器发送请求的时候,并将参数保存到数据库时遇到了中文乱码的问题: 解决方法: url = "http://xxxx.com/Orders/saveorder.html ...
- Android客户端与服务器交互方式-小结
最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json.要在Android手机客户端与pc服务器交互,需要 ...
- Android逆向破解表单登录程序
Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...
随机推荐
- 【数据压缩】LZ77算法原理及实现
1. 引言 LZ77算法是采用字典做数据压缩的算法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年发表的论文<A Universal Algorithm for ...
- 大话ASP.NET开发(第一章 html5+css3+解耦问题的探讨)
一.拉近我们的距离 我想,很多人会问,如今IE6还占据颇多份额的中国,html5.css3是否还很遥远?我会很直接告诉他们:其实就在你的眼前.我们来看两个图: ...
- C语言学习003:Hello 指针
在C中使用指针的原因 避免副本 在函数调用的时候,可以只传递数据的引用,而不用传递数据 数据共享 两段代码可以同时操作同一份数据,而不是两份独立的副本 使用指针读写数据 #include <st ...
- 倍数提高工作效率的 Android Studio 奇技
来源:JeremyHe 链接:http://zlv.me/posts/2015/07/13/14_android-studio-tips/ 这是从Philippe Breault的系列文章<An ...
- VS10x CodeMap 注册码 key VS插件CodeMap
VS10x CodeMap 注册码(key): #$aCN/L/ra73OaqCJENXc2JIDL61IMawNWBBX+PxhBzobE9w3QlcrwoXeB3DWBC2f56y9r0Hx2XP ...
- [教程]MongoDB 从入门到进阶 (User系统)
自从MongoDB升级到2.4之后,User系统,或者说是权限系统有了翻天覆地的变化. 在MongoDB2.4之前的User系统,除了用户名和密码之外,只有一个ReadOnly属性. 如果一个用户在a ...
- 登录校验(demo)
1. 登录流程分析图: 2. 登录demo:
- 点击div折叠
<!doctype html> <html> <head> <meta charset="utf-8"> <meta cont ...
- int和Integer的区别
int是一种数据类型,Integer是一个类,有各种方法,如Integer.parseInt(string)等.
- apache tiles 页面模板的使用
jar包maven <!-- Tiles 模板--> <dependency> <groupId>org.apache.tiles</groupId> ...