Http通訊訪問網路資源(Get與Post請求)
阿新 • • 發佈:2018-12-31
新增網路訪問許可權
<uses-permission android:name="android.permission.INTERNET"/>
package com.zdsoft.httpget; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; public class MainActivity extends AppCompatActivity { private EditText et_username, et_password; private Button bt_login; private String result = "";//伺服器返回結果 private String URL_BASE = "http://192.168.12.187:8080/test/servlet/LoginServlet";//介面地址 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); bt_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { //更新UI if (msg.what == 1) { Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); et_username.setText(""); et_password.setText(""); } } }; new Thread() { @Override public void run() { //網路訪問,登入 //get方式 //loginGet(et_username.getText().toString(), et_password.getText().toString()); //post方式 loginPost(et_username.getText().toString(), et_password.getText().toString()); Message message = new Message(); message.what = 1; handler.sendMessage(message); } }.start(); } }); } private void initView() { et_username = (EditText) findViewById(R.id.et_username); et_password = (EditText) findViewById(R.id.et_password); bt_login = (Button) findViewById(R.id.bt_login); } /** * get方式提交 * 使用者登入 * * @param username * @param password */ private void loginGet(String username, String password) { try { //獲取URL物件 URL url = new URL(URL_BASE + "?username=" + URLEncoder.encode(username, "UTF-8") + "&password=" + URLEncoder.encode(password, "UTF-8") + ""); //獲取HttpURLConnection HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); //獲取輸入流 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); //讀取伺服器返回結果 StringBuffer sb = new StringBuffer(); String line = ""; while ((line = bufferedReader.readLine()) != null) { sb.append(line); } result = sb.toString(); //關閉流,斷開連結 bufferedReader.close(); connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } } /** * post方式提交 * 使用者登入 * * @param username * @param password */ private void loginPost(String username, String password) { try { //獲取URL物件 URL url = new URL(URL_BASE); //獲取HttpURLConnection HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); //設定允許輸入、輸出 conn.setDoInput(true); conn.setDoOutput(true); //設定請求的頭 conn.setRequestProperty("content-type", "application/x-www-form-urlencoded"); conn.setRequestProperty("charset", "utf-8"); //獲取輸出流 OutputStream os = conn.getOutputStream(); String date = "username=" + URLEncoder.encode(username, "UTF-8") + "&password=" + URLEncoder.encode(password, "UTF-8") + ""; os.write(date.getBytes()); os.flush(); //獲取BufferedReader,讀取伺服器返回資訊 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = ""; StringBuffer sb = new StringBuffer(); while ((line = br.readLine()) != null) { sb.append(line); } result = sb.toString(); //關閉流,斷開連結 os.close(); conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } } }