zoukankan      html  css  js  c++  java
  • 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;
             }
    
    }

  • 相关阅读:
    python学习之旅-02
    python学习之旅-01
    wps2016热点永久关闭
    一个游戏制作的全过程
    游戏是怎么赚钱的
    游戏数值策划入门教程
    成长系统的设计方法:如何“挖坑”,又不让玩家反感
    游戏数值策划经验篇:从多角度解读游戏经验值设计
    暴雪战斗公式——除法公式的精髓
    游戏数值策划属性篇(二):属性价值评估
  • 原文地址:https://www.cnblogs.com/kangyaping/p/5467863.html
Copyright © 2011-2022 走看看