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;@Overrideprotected 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() {@Overridepublic 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");//还可以自定义增加headerJSONObject 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;}}

转载于:https://www.cnblogs.com/kangyaping/p/5467863.html

Android通过PHP服务器实现登录相关推荐

  1. 定位系统服务器,android系统定位服务器地址

    android系统定位服务器地址 内容精选 换一换 将NFS文件系统挂载到Windows IIS服务器时,报错路径格式不支持,挂载失败.IIS Web服务器的物理路径错误.根据可能原因进行故障排查.如 ...

  2. 华为开启位置服务器,android 开启位置服务器

    android 开启位置服务器 内容精选 换一换 请先在服务器所在区域购买充足的配额,具体操作请参见购买主机安全配额.购买配额后,请切换到配额所在区域对服务器开启防护.若您购买的是基础版/企业版/旗舰 ...

  3. Android webview实现QQ一键登录授权

    Android webview实现QQ一键登录授权 最近公司要求的新需求,要实现webview中的的QQ登录,大脑没经过就习惯的百度,奈何找了两天的资料也没发现个完整的demo,只能自己写,好吧,还要 ...

  4. Android 集成ShareSDK实现三方登录

    ** 前言 ** 三方登录在如今差不多已经成为每一款App必备的功能了.每次集成都会遇到各种各样的问题,今天总结一下三方登录的流程,以免忘记.现在好像还没有专门的三方登录SDK,ShareSDK和友盟 ...

  5. 消息被服务器拒绝访问,服务器上登录的Firebase访问被拒绝消息在哪里?

    Firebase数据库规则Firebase服务器上记录的"访问被拒绝"消息在哪里?服务器上登录的Firebase访问被拒绝消息在哪里? 我们正在使用Firebase客户端库的Jav ...

  6. 服务器telnet服务修改密码,如何修改云服务器的登录密码怎么办

    如何修改云服务器的登录密码怎么办 内容精选 换一换 只有运行中的云服务器才允许用户登录.Windows操作系统用户名"Administrator".忘记密码,请先通过"重 ...

  7. 服务器系统登录每次要输入密码,远程登录云服务器总是要输入密码

    远程登录云服务器总是要输入密码 内容精选 换一换 如果普通远程连接软件(如PuTTY)无法使用,您可以通过管理控制台的"远程登录"连接裸金属服务器实例,查看服务器操作界面.仅Lin ...

  8. Android客户端与服务器连接

    一.实验名称 Android客户端与服务器连接. 二.实验背景 2.1需求分析 1.服务端使用JSON解析客户端的请求数据 2.客户端通过HttpClient对象访问服务器,向服务器发送http请求. ...

  9. android servlet 登陆,Android Studio+Servlet+MySql实现登录注册

    一.Android 项目当中设置明文传输 1.设置明文传输的xml 2.引入上述创建的xml android:networkSecurityConfig="@xml/network_secu ...

最新文章

  1. 在线作图丨绘制一个含饼图的组内网络分析图(Network Analysis)
  2. MPB:甘肃省科学院祝英等-药用植物地下茎内生真菌的分离纯化及鉴定
  3. 大到31x31的超大卷积核,涨点又高效,一作解读RepLKNet
  4. 工业互联网 — 5G TSN
  5. Java程序员考什么证可以镀金?
  6. 计算机原理 英文版,计算机原理介绍英文版.doc
  7. 生产路由跳转报错找不到js路径问题
  8. Winform中使用FastReport实现自定义PDF打印预览
  9. what to do preparing for phd
  10. oracle的to_char中的fm
  11. 手撕python_Pytorch手撕经典网络之LeNet5
  12. 【工作感悟】java编程规范pdf下载
  13. Airflow 中文文档:插件
  14. 解决tomcat控制台以及localhost Log和Catalina Log乱码问题
  15. 值不值得入手_北龙湖—值不值得入手?
  16. C++ 从入门到入土(English Version) Section 2:Computer Memory and Number Systems
  17. React-Native使用Nanohttpd实现跨平台互传文件
  18. 暴走欧洲之在德国的反思
  19. oracle数据投毒,Oracle Database Server TNS Listener远程数据投毒漏洞(CVE-2012-1675)的完美解决方法...
  20. 区块链中的“双花”问题

热门文章

  1. a站手机访问电脑版_公司电脑一键变网盘,支持手机、家里电脑远程访问
  2. mysql5.7数据恢复_mysql 5.7.21 解压版通过历史data目录恢复数据的教程图解
  3. 【教程】超详细的虚拟无线控制器安装教程
  4. 异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题
  5. 在 Kubernetes 上弹性深度学习训练利器 -- Elastic Training Operator
  6. Knative Serving 进阶: Knative Serving SDK
  7. 计算机系中学生的自我鉴定,中学生毕业自我鉴定
  8. Rich featurehierarchies for accurate object detection and semantic segmentation
  9. 【视频课】StyleGAN人脸生成与年龄表情编辑:原理与实践
  10. 【CV夏季划】告别入门,提升眼界,从掌握最有价值的那些CV方向开始