欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-20 19:45:46
android客户端和php、mysql搭建的服务器之间的简单交互,实现登录功能 。 实现原理图: handler消息机制原理: handler机制主要包括4个关...

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服务器实现登录功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。