Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [android,7]7.android在web下的應用-將客戶端信息提交到服務端

[android,7]7.android在web下的應用-將客戶端信息提交到服務端

編輯:關於Android編程

將客戶端提交到服務端:

一、用戶登錄將用戶名和密碼傳遞個服務器端:get方式提交

1、設置布局:layout/main,xml

 

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

 

android:id="@+id/et_username"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="請輸入用戶名" >

 

 

android:id="@+id/et_password"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="請輸入密碼" />

 

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="login"

android:text="get登陸" />

 

 

 

2、在Activity類中獲取登錄的用戶名和密碼:

public class LoginActivityextends Activity {

private EditText et_username;

private EditText et_password;

private EditText et_file_path;

 

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

et_password = (EditText)this.findViewById(R.id.et_password);

et_username = (EditText)this.findViewById(R.id.et_username);

et_file_path = (EditText)this.findViewById(R.id.et_file_path);

 

}

 

/**

* 以get的方式 提交數據到服務器

*

* @param view

*/

public void login(View view) {

String password =et_password.getText().toString().trim();

String username =et_username.getText().toString().trim();

if(TextUtils.isEmpty(password) || TextUtils.isEmpty(username)) {

Toast.makeText(this, "用戶名和密碼不能為空", 0).show();

return;

} else {

// 通過get方式提交數據到服務器

//獲取在res/values/string.xml文件中定義的服務端的請求路徑

String path = getResources().getString(R.string.serverurl);

//調用向服務端發送請求的方法:

String result = NetService.sendDataByHttpClientGet(path,username, password);

}

 

}

3、Get方式向服務器發送數據的請求的方法:

/*

* 1. 拼裝url 把參數進行 url的編碼 URLEncoder.encode();

2. 通過http的get請求發送數據到服務器

* (中文亂碼的問題)? 把數據按照tomcat的 iso-8859-1的方式進行轉碼. byte[] 在android下默認采用的編碼方式

* utf-8的編碼方式

*/

public static StringsendDataByGet(String path, String username,

String password) throwsException {

// ?name=zhangsan&password=123

// 解決姓名 或者 密碼裡面的空格或者非法字符串的問題

//拼接get方式的請求路徑

String urlstr = path + "?name=" +URLEncoder.encode(username)

+ "&password=" + URLEncoder.encode(password);

//連接服務端

URL url = new URL(urlstr);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(5000);

 

if (conn.getResponseCode() == 200) {

//獲取服務端的數據的流

InputStream is =conn.getInputStream();

//同工具類將流轉成字節

byte[] result =StreamTools.getBytes(is);

return newString(result);//創建string對象

}

return null;

}

4、設置連接網絡的權限

5、在服務端向向客戶端響應數據:要以流的形式:並設置utf-8的編碼形式

response.getOutputStream().write("登陸成功".getBytes("utf-8"));

 

二、亂碼的問題:

1、 在默認的情況下 android的字符編碼是UTF-8的編碼形式,所以服務端響應的數據要以utf- 8的編碼格式返回到客戶端。

2、在以get方式請求客戶端時,對url中的請求數據要進行url編碼,保證對空格和中文的傳輸。

String urlstr = path + "?name=" +URLEncoder.encode(username)

 

三、通過post請求將數據發送給服務器:

1、post請求

public static String sendDataByPost(String path, String username,

String password) throwsException {

URL url = new URL(path);

//連接服務器

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

//設置請求方式

conn.setRequestMethod("POST");

conn.setConnectTimeout(5000);

// 一定要指定dooutput 的參數 運行客戶端寫數據給服務器

conn.setDoOutput(true);//表示要以流的形式將數據寫給服務端

//拼接數據

String content = "name=" + URLEncoder.encode(username)+ "&password="

+ URLEncoder.encode(password);

byte[] buffer = content.getBytes();

//設置請求頭:content-Type

conn.setRequestProperty("Content-Type",

"application/x-www-form-urlencoded");

//設置請求頭Content-Length

conn.setRequestProperty("Content-Length",content.length() + "");

// 得到http的輸出流

OutputStream os = conn.getOutputStream();

// 把內容寫給了服務器

os.write(buffer);

// 注意的是: 在面向http協議編程 處理post請求的時候

 

//獲取響應碼

if (conn.getResponseCode() == 200) {

InputStream is =conn.getInputStream();

byte[] result =StreamTools.getBytes(is);

return newString(result);

}

return null;

}

2、post請求注意事項:

post 方式提交的數據 沒有大小的限制

指定post的請求的地址

指定http的請求方式 為post

指定請求頭中的Content-Type Content-Length

conn.setDoOutput(true);

利用conn.getoutputstream.write();

獲取服務器返回回來的相應

 

 

四、post請求方式與get請求方式的區別:

1、get方式是通過組拼url的方式提交數據到服務器,

2、Post的請求方式是通過組拼提交的數據鍵值對,以流的方式寫給了服務器,

Post請求方式提交數據到服務端請求頭中必須要有Content-Type和Content-Length。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved