日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

Android通过PHP服务器实现登录

發(fā)布時(shí)間:2025/3/20 php 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android通过PHP服务器实现登录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Android客戶端和PHP、MySQL搭建的服務(wù)器之間的簡(jiǎn)單交互,實(shí)現(xiàn)登錄功能 。


實(shí)現(xiàn)原理圖:

Handler消息機(jī)制原理:

Handler機(jī)制主要包括4個(gè)關(guān)鍵對(duì)象,分別是Message、Handler、MessageQueue、Looper。

下面對(duì)這4個(gè)關(guān)鍵對(duì)象進(jìn)行簡(jiǎn)單的介紹。

1.Message

Message是線程之間傳遞的消息,它可以在內(nèi)部攜帶少量的信息,用于在不同線程之間交換數(shù)據(jù)。Message的what字段可以用來攜帶一些整型數(shù)據(jù),obj字段可以攜帶一個(gè)Object對(duì)象。

2.Handler

Handler就是處理者的意思,它主要用于發(fā)送消息和處理消息。一般使用Handler對(duì)象的sendMessage()方法發(fā)送消息,發(fā)出的消息經(jīng)過一系列的輾轉(zhuǎn)處理后,最終會(huì)傳遞到Handler對(duì)象的HandlerMessage()方法中。

3.MessageQueue

MessageQueue是消息隊(duì)列的意思,它主要用來存放通過Handler發(fā)送的消息。通過Handler發(fā)送的消息會(huì)存在MessageQueue中等待處理。每個(gè)線程中只會(huì)有一個(gè)MessageQueue對(duì)象。

4.Looper

Looper是每個(gè)線程中的MessageQueue的管家。調(diào)用Looper的loop()方法后,就會(huì)進(jìn)入一個(gè)無限循環(huán)中。然后,每當(dāng)發(fā)現(xiàn)MessageQueue中存在一條消息,就會(huì)將它取出,并傳遞到Handler的HandlerMessage()方法中。此外,每個(gè)線程也只會(huì)有一個(gè)Looper對(duì)象。在主線程中創(chuàng)建Handler對(duì)象時(shí),系統(tǒng)已經(jīng)創(chuàng)建了Looper鍍鋅,所以不用手動(dòng)創(chuàng)建Looper對(duì)象,而在子線程中的Handler對(duì)象,需要調(diào)用Looper.loop()方法開啟消息循環(huán)。

圖中可以清晰的看到整個(gè)Handler消息機(jī)制處理流程。Handler消息處理首先需要在UI線程創(chuàng)建一個(gè)Handler對(duì)象,然后在子線程中調(diào)用了sendMessage()方法,接著這個(gè)消息會(huì)存放在UI線程的MessageQueue中,通過Looper對(duì)象取出MessageQueue中的消息,最后分發(fā)回Handler的HandMessage()方法中。

?下面是我寫的代碼以及本程序的logcat的運(yùn)行結(jié)果。

?本次任務(wù)中遇到的難題:

?無法連接到PHP服務(wù)器。實(shí)現(xiàn)了把自己輸入的用戶名和密碼封裝成了JSON但是無法發(fā)送到PHP進(jìn)行與數(shù) ?據(jù)庫(kù)的比對(duì)。

?

?

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); //登錄按鈕的點(diǎn)擊事件login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//將輸入的用戶名和密碼轉(zhuǎn)換成字符串String name =et_username.getText().toString();String pwd = et_userPsd.getText().toString();//調(diào)用login方法 login(name, pwd);}});}private void login(final String name, final String pwd){//創(chuàng)建Handler對(duì)象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() {//創(chuàng)建Message對(duì)象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對(duì)象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對(duì)象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);//發(fā)送數(shù)據(jù)HttpResponse httpResponse = httpClient.execute(request);//獲得相應(yīng) System.out.println("2+===========");//進(jìn)行一行一行的調(diào)試時(shí)無法打印此語(yǔ)句。原因就是無法成功連接到                        網(wǎng)絡(luò)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;}}

?

轉(zhuǎn)載于:https://www.cnblogs.com/kangyaping/p/5467863.html

總結(jié)

以上是生活随笔為你收集整理的Android通过PHP服务器实现登录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。