06_android入門_採用HttpURLConnection的POST方式實現登陸案例
阿新 • • 發佈:2019-01-06
3.具體的Activity的實現程式碼如下:
package www.csdn.net.lesson03; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class LoginActivity extends Activity { // 宣告控制元件物件 private EditText et_name, et_pass; // 宣告顯示返回資料庫的控制元件物件 private TextView tv_result; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 設定顯示的檢視 setContentView(R.layout.activity_login); // 通過 findViewById(id)方法獲取使用者名稱的控制元件物件 et_name = (EditText) findViewById(R.id.et_name); // 通過 findViewById(id)方法獲取使用者密碼的控制元件物件 et_pass = (EditText) findViewById(R.id.et_pass); // 通過 findViewById(id)方法獲取顯示返回資料的控制元件物件 tv_result = (TextView) findViewById(R.id.tv_result); } /** * 通過android:onClick="login"指定的方法 , 要求這個方法中接受你點選控制元件物件的引數v * * @param v */ public void login(View v) { // 獲取點選控制元件的id int id = v.getId(); // 根據id進行判斷進行怎麼樣的處理 switch (id) { // 登陸事件的處理 case R.id.btn_login: // 獲取使用者名稱 final String userName = et_name.getText().toString(); // 獲取使用者密碼 final String userPass = et_pass.getText().toString(); if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(userPass)) { Toast.makeText(this, "使用者名稱或者密碼不能為空", Toast.LENGTH_LONG).show(); } else { // 開啟子執行緒 new Thread() { public void run() { loginByPost(userName, userPass); // 呼叫loginByPost方法 }; }.start(); } break; } } /** * POST請求操作 * * @param userName * @param userPass */ public void loginByPost(String userName, String userPass) { try { // 請求的地址 String spec = "http://172.16.237.200:8080/video/login.do"; // 根據地址建立URL物件 URL url = new URL(spec); // 根據URL物件開啟連結 HttpURLConnection urlConnection = (HttpURLConnection) url .openConnection(); // 設定請求的方式 urlConnection.setRequestMethod("POST"); // 設定請求的超時時間 urlConnection.setReadTimeout(5000); urlConnection.setConnectTimeout(5000); // 傳遞的資料 String data = "username=" + URLEncoder.encode(userName, "UTF-8") + "&userpass=" + URLEncoder.encode(userPass, "UTF-8"); // 設定請求的頭 urlConnection.setRequestProperty("Connection", "keep-alive"); // 設定請求的頭 urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 設定請求的頭 urlConnection.setRequestProperty("Content-Length", String.valueOf(data.getBytes().length)); // 設定請求的頭 urlConnection .setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"); urlConnection.setDoOutput(true); // 傳送POST請求必須設定允許輸出 urlConnection.setDoInput(true); // 傳送POST請求必須設定允許輸入 //setDoInput的預設值就是true //獲取輸出流 OutputStream os = urlConnection.getOutputStream(); os.write(data.getBytes()); os.flush(); if (urlConnection.getResponseCode() == 200) { // 獲取響應的輸入流物件 InputStream is = urlConnection.getInputStream(); // 建立位元組輸出流物件 ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 定義讀取的長度 int len = 0; // 定義緩衝區 byte buffer[] = new byte[1024]; // 按照緩衝區的大小,迴圈讀取 while ((len = is.read(buffer)) != -1) { // 根據讀取的長度寫入到os物件中 baos.write(buffer, 0, len); } // 釋放資源 is.close(); baos.close(); // 返回字串 final String result = new String(baos.toByteArray()); // 通過runOnUiThread方法進行修改主執行緒的控制元件內容 LoginActivity.this.runOnUiThread(new Runnable() { @Override public void run() { // 在這裡把返回的資料寫在控制元件上 會出現什麼情況尼 tv_result.setText(result); } }); } else { System.out.println("連結失敗........."); } } catch (Exception e) { e.printStackTrace(); } } }
實現的效果圖如下: