Android通过PHP服务器实现登录功能

作者:kang_ya_ping 时间:2023-07-02 07:08:58 

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

实现原理图:

Android通过PHP服务器实现登录功能

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()方法开启消息循环。

Android通过PHP服务器实现登录功能

图中可以清晰的看到整个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,PHP,登录
0
投稿

猜你喜欢

  • python实现超时退出的三种方式总结

    2023-07-22 17:56:34
  • 在Tensorflow中查看权重的实现

    2022-05-02 20:14:56
  • 对Python强大的可变参数传递机制详解

    2021-06-23 02:54:09
  • 从语义开始–概念、意义、实践

    2010-06-13 18:06:00
  • 用python发送微信消息

    2022-04-14 07:16:55
  • MySQL数据库表中的约束详解

    2024-01-28 16:39:17
  • 使用matplotlib画散点图的方法

    2022-07-30 20:49:54
  • golang中的空slice案例

    2023-09-02 12:26:36
  • 关于asp分页的新想法

    2008-09-06 12:53:00
  • python 对类的成员函数开启线程的方法

    2021-09-11 17:12:42
  • Python 如何解决稀疏矩阵运算

    2022-02-13 21:59:01
  • 用python打包exe应用程序及PyInstaller安装方式

    2023-09-20 03:55:21
  • Golang 内存管理简单技巧详解

    2023-06-24 22:38:18
  • python简单商城购物车实例代码

    2022-10-28 02:16:37
  • Python编程实现线性回归和批量梯度下降法代码实例

    2021-10-13 07:33:27
  • 浅谈SQL Server中统计对于查询的影响分析

    2024-01-24 10:54:21
  • 关于pytorch处理类别不平衡的问题

    2023-04-08 19:11:56
  • SQL Server中Table字典数据的查询SQL示例代码

    2024-01-25 13:47:49
  • 在JScript中使用RecordSet对象的GetRows方法

    2008-01-16 13:12:00
  • python编写计算器功能

    2022-10-29 14:07:33
  • asp之家 网络编程 m.aspxhome.com