最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android通過PHP服務器實現(xiàn)登錄功能

 更新時間:2017年01月20日 15:57:09   作者:kang_ya_ping  
這篇文章主要為大家詳細介紹了Android通過PHP服務器實現(xiàn)登錄功能的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

實現(xiàn)原理圖:

Handler消息機制原理:

Handler機制主要包括4個關鍵對象,分別是Message、Handler、MessageQueue、Looper。

下面對這4個關鍵對象進行簡單的介紹。

1.Message

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

2.Handler

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

3.MessageQueue

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

4.Looper

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

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

下面是我寫的代碼以及本程序的logcat的運行結果。

本次任務中遇到的難題:

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

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
    
     //將輸入的用戶名和密碼轉(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對象
    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對象
    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);//發(fā)送數(shù)據(jù)
   HttpResponse httpResponse = httpClient.execute(request);//獲得相應
   System.out.println("2+===========");//進行一行一行的調(diào)試時無法打印此語句。原因就是無法成功連接到                        網(wǎng)絡
   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;
   }

}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android banner詳解用法案例

    Android banner詳解用法案例

    android-banner實現(xiàn)了一般banner循環(huán)輪播的效果,一頁只顯示一張圖片,也可以一頁顯示一張圖和相鄰兩個圖片的一部分,此項目僅僅是banner展示圖片,沒有多余的諸如指示器、頁面切換動畫等效果代碼,詳見效果圖和案例代碼
    2021-11-11
  • 詳解Android獲取設備唯一ID的幾種方式

    詳解Android獲取設備唯一ID的幾種方式

    本篇文章主要介紹了詳解Android獲取設備唯一ID的幾種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Android動畫效果之自定義ViewGroup添加布局動畫(五)

    Android動畫效果之自定義ViewGroup添加布局動畫(五)

    這篇文章主要介紹了Android動畫效果之自定義ViewGroup添加布局動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android編程之短信竊聽器實現(xiàn)方法

    Android編程之短信竊聽器實現(xiàn)方法

    這篇文章主要介紹了Android編程之短信竊聽器實現(xiàn)方法,以實例形式較為詳細的分析了Android編程實現(xiàn)竊聽器的具體步驟與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • 深入分析Android加載so文件源碼

    深入分析Android加載so文件源碼

    這篇文章主要介紹了深入分析Android加載so文件源碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Android中EditText顯示明文與密碼的兩種方式

    Android中EditText顯示明文與密碼的兩種方式

    這篇文章主要介紹了Android中EditText顯示明文與密碼的兩種方式,非常不錯,具有參考借鑒價值,需要的盆友一起學習吧
    2016-08-08
  • Android開發(fā)之彈出軟鍵盤工具類簡單示例

    Android開發(fā)之彈出軟鍵盤工具類簡單示例

    這篇文章主要介紹了Android開發(fā)之彈出軟鍵盤工具類,結合實例形式分析了Android彈出軟鍵盤及獲取焦點的簡單操作技巧,需要的朋友可以參考下
    2018-01-01
  • Android實現(xiàn)注冊登錄界面的實例代碼

    Android實現(xiàn)注冊登錄界面的實例代碼

    這篇文章主要介紹了Android實現(xiàn)注冊登錄界面的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android編程實現(xiàn)仿易信精美彈出框效果【附demo源碼下載】

    Android編程實現(xiàn)仿易信精美彈出框效果【附demo源碼下載】

    這篇文章主要介紹了Android編程實現(xiàn)仿易信精美彈出框效果,涉及Android窗口及動畫操作相關技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2017-01-01
  • Android中Splash應用啟動白屏問題的解決方法

    Android中Splash應用啟動白屏問題的解決方法

    這篇文章主要為大家詳細介紹了Android中Splash應用啟動白屏問題的兩種解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論

大连市| 彭山县| 团风县| 灌云县| 德江县| 青阳县| 泸西县| 沿河| 得荣县| 莎车县| 抚宁县| 德格县| 盐源县| 湖北省| 东台市| 固阳县| 定南县| 韶关市| 湖口县| 灵川县| 星子县| 绍兴县| 濮阳县| 崇州市| 潮州市| 盖州市| 永宁县| 临澧县| 鄂托克旗| 晋城| 洛隆县| 梅州市| 扎赉特旗| 永善县| 沂源县| 岳西县| 乌拉特前旗| 萝北县| 麻阳| 福清市| 霸州市|