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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 详解MySQL中的分组查询与连接查询语句
下一篇: Android登录时密码保护功能