Android通過PHP伺服器實現登入

來源:互聯網
上載者:User

標籤:

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;         }}

 

Android通過PHP伺服器實現登入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.