1. 程式人生 > >Android中使用http實現註冊登入

Android中使用http實現註冊登入

在專案中實現註冊登入有很多種方式,一般對於初學者來說,不使用框架,採用http的post和get請求後臺伺服器,是一種更好理解底層原始碼的方式。使用框架實現註冊登入雖然比自己封裝post和get請求後臺方便,但是不利於我們更好地理解其中的原理和機制。
實現的步驟大致分為以下幾點:
1. 建立HttpPost物件,並將伺服器介面地址url設定好。
2. 利用NameValuePair類設定相關引數,並將NameValuePair放入到list集合中。
3. 發起post請求獲取返回例項HttpResponse。
4. 使用EntityUtils對返回值的實體進行處理(可以取得返回的字串,也可以取得返回的byte陣列),一般在伺服器返回的都是json字串。

注意事項:

  1. 在主執行緒中不能直接訪問網路,要開闢子執行緒。
  2. 在子執行緒中不能直接更新ui。

MainActivity:

package wujie.com.myapplication11;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import
android.widget.TextView; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import
org.apache.http.message.BasicNameValuePair; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private String url="http://192.168.1.101:8080/SHproject/homepage/register";//伺服器介面地址 private EditText name,pwd;//使用者名稱和密碼 private Button submit;//提交按鈕 private TextView result;//伺服器返回結果 //Handler用於接收服務端返回的資料更新ui private Handler hanlder=new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case 0: String qq= (String) msg.obj; result.setText("伺服器返回: " + qq); break; } super.handleMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化資料 name= (EditText) findViewById(R.id.name); pwd= (EditText) findViewById(R.id.pwd); submit= (Button) findViewById(R.id.submit); result= (TextView) findViewById(R.id.result); submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /** * 開闢一個子執行緒訪問網路,否則會丟擲異常 */ new Thread() { @Override public void run() { String name1=name.getText().toString().trim(); String pwd1=pwd.getText().toString().trim(); NameValuePair pair1 = new BasicNameValuePair("name", name1); NameValuePair pair2 = new BasicNameValuePair("password", pwd1); List<NameValuePair> pairList = new ArrayList<NameValuePair>(); pairList.add(pair1); pairList.add(pair2); try { HttpEntity requestHttpEntity = new UrlEncodedFormEntity( pairList); // URl是介面地址 HttpPost httpPost = new HttpPost(url); // 將請求體內容加入請求中 httpPost.setEntity(requestHttpEntity); // 需要客戶端物件來發送請求 HttpClient httpClient = new DefaultHttpClient(); // 傳送請求 HttpResponse response = httpClient.execute(httpPost); // 顯示響應 showResponseResult(response); } catch (Exception e) { e.printStackTrace(); } } }.start(); } }); } /** * 顯示響應結果到命令列和TextView * @param response */ private void showResponseResult(HttpResponse response) { if (null == response) { return; } HttpEntity httpEntity = response.getEntity(); try { InputStream inputStream = httpEntity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); String result1 = ""; String line = ""; while (null != (line = reader.readLine())) { result1 += line; } System.out.println(result1); /** * 把伺服器返回的結果 傳送到hanlder中,在子執行緒中是不允許更新ui的 */ hanlder.obtainMessage(0,result1).sendToTarget(); } catch (Exception e) { e.printStackTrace(); } } }

佈局檔案:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="wujie.com.myapplication11.MainActivity"
    android:orientation="vertical">

    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="使用者名稱"
        />
    <EditText
        android:id="@+id/pwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="密碼"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/submit"
        android:text="提交"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/result"
        android:textColor="#ff0000"
        android:textSize="20sp"
        android:paddingTop="18dp"/>
</LinearLayout>

執行截圖:

這裡寫圖片描述

網路許可權:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>