欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中post和get的提交方式【三種】

 更新時(shí)間:2016年12月20日 10:08:30   作者:huang502  
本文主要對Android中三種POST和GET的提交方式進(jìn)行詳細(xì)介紹。通過任何一種方式可以實(shí)現(xiàn)的功能是,從安卓手機(jī)端提交數(shù)據(jù)到服務(wù)器端,服務(wù)器端進(jìn)行判斷,并返回相應(yīng)的結(jié)果。三種方式各有利弊,實(shí)現(xiàn)效果相同,在實(shí)際的使用過程中可以根據(jù)本身的需要進(jìn)行選擇。

向服務(wù)器提交數(shù)據(jù)有兩種方式,post和get。兩者的區(qū)別主要有三點(diǎn),安全性、長度限制、數(shù)據(jù)結(jié)構(gòu)。其中g(shù)et請求安全性相比較而言較差,數(shù)據(jù)長度受瀏覽器地址欄限制,沒有方法體。兩種都是較為重要的數(shù)據(jù)提交方式?,F(xiàn)簡單介紹一下三種post和get的提交方式。無論是哪種方法實(shí)現(xiàn)post和get,get 的訪問路徑都要攜帶數(shù)據(jù),而post提交是把數(shù)據(jù)放在方法體中。

普通方法實(shí)現(xiàn)get/post提交:   

嚴(yán)格遵照Http協(xié)議進(jìn)行數(shù)據(jù)傳輸。在安卓開發(fā)環(huán)境下,由于主線程不能進(jìn)行網(wǎng)絡(luò)訪問,因此需要在開啟一個(gè)子線程向服務(wù)器提交數(shù)據(jù)。為了更加直觀的觀察數(shù)據(jù),可以在程序屏幕上顯示服務(wù)器反饋信息。又由于子線程無法更改UI界面,因此需要引入Hnndler代理器。實(shí)現(xiàn)get/post提交基本步驟就是,獲取URL路徑,根據(jù)路徑得到Http連接,用HttpURLConnection對象設(shè)置相關(guān)的http配置信息、提交方式以及獲取反饋碼。當(dāng)響應(yīng)碼為200時(shí)表示提交成功,可以通過HttpURLConnection以流的形式獲取反饋信息。

普通GRT提交方式:

public void load(View view){
 final String qq = et_qq.getText().toString().trim();
 final String pwd = et_pwd.getText().toString().trim();
 if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
  Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
  return;
 }
 final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
  + "&pwd=" + pwd;
 new Thread() {
  public void run() {
  try {
   URL url = new URL(path);
   HttpURLConnection conn = (HttpURLConnection) url
    .openConnection();
   conn.setRequestMethod("GET");
   conn.setReadTimeout(5000);
   int code = conn.getResponseCode();
   if (code == 200) {
   InputStream is = conn.getInputStream();
   String result = StreamTools.ReadStream(is);
   Message msg = Message.obtain();
   msg.what = SUCCESS;
   msg.obj = result;
   handler.sendMessage(msg);
   } else {
   Message msg = Message.obtain();
   msg.what = ERROR1;
   handler.sendMessage(msg);
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   Message msg = Message.obtain();
   msg.what = ERROR2;
   handler.sendMessage(msg);
  }
  }
 }.start();
 }

普通POST提交方式:

public void load(View view){
 final String qq = et_qq.getText().toString().trim();
 final String pwd = et_pwd.getText().toString().trim();
 if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
  Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
  return;
 }
 final String path = "http://192.168.1.114:8080/qqload/qqload";
 new Thread() {
  public void run() {
  try {
   URL url = new URL(path);
   HttpURLConnection conn = (HttpURLConnection) url
    .openConnection();
   conn.setRequestMethod("POST");
   conn.setReadTimeout(5000);
   conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
   String data = "qq="+URLEncoder.encode(qq,"utf-8")+"&pwd=" + URLEncoder.encode(pwd,"utf-8"); 
   conn.setRequestProperty("Content-Length",String.valueOf(data.length()));
   conn.setDoOutput(true);
   conn.getOutputStream().write(data.getBytes());
   int code = conn.getResponseCode();
   if (code == 200) {
   InputStream is = conn.getInputStream();
   String result = StreamTools.ReadStream(is);
   Message msg = Message.obtain();
   msg.what = SUCCESS;
   msg.obj = result;
   handler.sendMessage(msg);
   } else {
   Message msg = Message.obtain();
   msg.what = ERROR1;
   handler.sendMessage(msg);
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   Message msg = Message.obtain();
   msg.what = ERROR2;
   handler.sendMessage(msg);
  }
  }
 }.start();
 }

用httpclien實(shí)現(xiàn)get/post提交的只需要一下幾個(gè)步驟:

1.創(chuàng)建HttpClient對象,實(shí)現(xiàn)打開瀏覽器的功能

 HttpClient client = new DefaultHttpClient();

2.輸入地址或者數(shù)據(jù) ,用到HttpGet()或HttpPost(),傳入要訪問的路徑,得到HttpGet或HttpPost對象。

 HttpGet  httpGet = new HttpGet(path);

3.把獲得的HttpGet或HttpPost對象發(fā)送到服務(wù)器,實(shí)現(xiàn)敲回車的功能,得到HttpResponse對象。

 HttpResponse response = client.execute(httpGet);

4.得到HttpResponse對象獲取狀態(tài)行中的狀態(tài)碼,判斷狀態(tài)碼狀態(tài)碼。

 int code = response.getStatusLine().getStatusCode();

5.同樣用HttpResponse對象獲取相應(yīng)內(nèi)容,存入流對象。最后將得到的流對象轉(zhuǎn)為字符串進(jìn)行顯示。

 InputStream is = response.getEntity().getContent();

其中要注意的一點(diǎn)是用post請求時(shí)要傳遞值所以要多出一個(gè)步驟。具體而言,先創(chuàng)建一個(gè)list集合,集合的泛型用NameValuePair表示,類似于鍵值對的形式存儲要傳遞的數(shù)據(jù)。接著向集合中添加要提交數(shù)據(jù)。最后用HttpPost對象把集合存入請求體中。

用HttpClient實(shí)現(xiàn)GET提交:

public void load(View view){
 final String qq = et_qq.getText().toString().trim();
 final String pwd = et_pwd.getText().toString().trim();
 if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
  Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
  return;
 }
 final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
  + "&pwd=" + pwd;
 new Thread() {
  public void run() {
  try {
   HttpClient client = new DefaultHttpClient();
   HttpGet httpget = new HttpGet(path);
   HttpResponse response = client.execute(httpget);
   int code = response.getStatusLine().getStatusCode();
   if (code == 200) {
   InputStream is = response.getEntity().getContent();
   String result = StreamTools.ReadStream(is);
   Message msg = Message.obtain();
   msg.what = SUCCESS;
   msg.obj = result;
   handler.sendMessage(msg);
   } else {
   Message msg = Message.obtain();
   msg.what = ERROR1;
   handler.sendMessage(msg);
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   Message msg = Message.obtain();
   msg.what = ERROR2;
   handler.sendMessage(msg);
  }
  }
 }.start();
 }

用HttpClient實(shí)現(xiàn)POST提交:   

 public void load(View view){
 final String qq = et_qq.getText().toString().trim();
 final String pwd = et_pwd.getText().toString().trim();
 if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
  Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
  return;
 }
 final String path = "http://192.168.1.114:8080/qqload/qqload";
 new Thread() {
  public void run() {
  try {
   HttpClient client = new DefaultHttpClient();
   HttpPost httppost = new HttpPost(path);
   List<NameValuePair> parameter = new ArrayList();
   parameter.add(new BasicNameValuePair("qq", qq));
   parameter.add(new BasicNameValuePair("pwd", pwd));
   httppost.setEntity(new UrlEncodedFormEntity(parameter,"utf-8"));
   HttpResponse response = client.execute(httppost);
   int code = response.getStatusLine().getStatusCode();
   if (code == 200) {
   InputStream is = response.getEntity().getContent();
   String result = StreamTools.ReadStream(is);
   Message msg = Message.obtain();
   msg.what = SUCCESS;
   msg.obj = result;
   handler.sendMessage(msg);
   } else {
   Message msg = Message.obtain();
   msg.what = ERROR1;
   handler.sendMessage(msg);
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   Message msg = Message.obtain();
   msg.what = ERROR2;
   handler.sendMessage(msg);
  }
  }
 }.start();
 }

使用開源框架實(shí)現(xiàn)get/post提交:

利用框架實(shí)現(xiàn)get/post提交不需要再開啟子線程。直接在主線程進(jìn)行g(shù)et/post的提交,大大的減少了工作量。但操作前需要導(dǎo)包。然后直接創(chuàng)建一個(gè)AsyncHttpClient對象,用AsyncHttpClient對象的post方法和get方法,發(fā)送請求,并在AsyncHttpResponseHandler()對象中獲得相應(yīng)信息。同樣若是post請求,仍舊需要傳遞值。這里可以用RequestParams對象添加要傳遞的值。

在文件下添加jar包:

用開源框架實(shí)現(xiàn)GET提交:

 public void load(View view){
 final String qq = et_qq.getText().toString().trim();
 final String pwd = et_pwd.getText().toString().trim();
 if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
  Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
  return;
 }
 final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
  + "&pwd=" + pwd;
 AsyncHttpClient client = new AsyncHttpClient();
 client.get(path, new AsyncHttpResponseHandler() {
  
  @Override
  public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
  // TODO Auto-generated method stub
  tv_result.setText(new String(responseBody));
  }
  
  @Override
  public void onFailure(int statusCode, Header[] headers,
   byte[] responseBody, Throwable error) {
  // TODO Auto-generated method stub
  tv_result.setText("錯(cuò)誤原因:" + new String(responseBody));
  }
 });
 }

用開源框架實(shí)現(xiàn)POST請求:

public void load(View view){
 final String qq = et_qq.getText().toString().trim();
 final String pwd = et_pwd.getText().toString().trim();
 if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
  Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
  return;
 }
 final String path = "http://192.168.1.114:8080/qqload/qqload";
 AsyncHttpClient client = new AsyncHttpClient();
 RequestParams params = new RequestParams();
 params.add("qq", qq);
 params.add("pwd", pwd);
 client.post(path,params,new AsyncHttpResponseHandler() {
  
  @Override
  public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
  // TODO Auto-generated method stub
  tv_result.setText(new String(responseBody));
  }
  
  @Override
  public void onFailure(int statusCode, Header[] headers,
   byte[] responseBody, Throwable error) {
  // TODO Auto-generated method stub
  tv_result.setText(new String(responseBody));
  }
 });
 }

通過以上任何一種方式可以實(shí)現(xiàn)的功能是,從安卓手機(jī)端提交數(shù)據(jù)到服務(wù)器端,服務(wù)器端進(jìn)行判斷,并返回相應(yīng)的結(jié)果。三種方式各有利弊,實(shí)現(xiàn)效果相同,在實(shí)際的使用過程中可以根據(jù)本身的需要進(jìn)行選擇。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • Android 軟鍵盤狀態(tài)并隱藏輸入法的實(shí)例

    Android 軟鍵盤狀態(tài)并隱藏輸入法的實(shí)例

    這篇文章主要介紹了Android 軟鍵盤狀態(tài)并隱藏輸入法的實(shí)例的相關(guān)資料,這里提供實(shí)例實(shí)現(xiàn)軟鍵盤切換并隱藏輸入法的鍵盤,需要的朋友可以參考下
    2017-09-09
  • Android自定義View實(shí)現(xiàn)課程表表格

    Android自定義View實(shí)現(xiàn)課程表表格

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)課程表表格,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Android使用setCustomTitle()方法自定義對話框標(biāo)題

    Android使用setCustomTitle()方法自定義對話框標(biāo)題

    Android有自帶的對話框標(biāo)題,但是不太美觀,如果要給彈出的對話框設(shè)置一個(gè)自定義的標(biāo)題,使用AlertDialog.Builder的setCustomTitle()方法非常方便,接下來通過本文給大家介紹Android使用setCustomTitle()方法自定義對話框標(biāo)題,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • Android實(shí)現(xiàn)多線程斷點(diǎn)下載的方法

    Android實(shí)現(xiàn)多線程斷點(diǎn)下載的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)多線程斷點(diǎn)下載的方法,可實(shí)現(xiàn)開始、暫停下載及百分比進(jìn)度條等功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • Android RecyclerView點(diǎn)擊事件

    Android RecyclerView點(diǎn)擊事件

    這篇文章主要為大家詳細(xì)介紹了Android RecyclerView點(diǎn)擊事件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android實(shí)現(xiàn)壓縮字符串的方法示例

    Android實(shí)現(xiàn)壓縮字符串的方法示例

    最近在做Android開發(fā),遇到了需要壓縮字符串的功能,下面這篇文章主要給大家介紹了Android實(shí)現(xiàn)壓縮字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • python只需30行代碼就能記錄鍵盤的一舉一動

    python只需30行代碼就能記錄鍵盤的一舉一動

    這篇文章主要介紹了如何用python只寫30行代碼就能記錄鍵盤的一舉一動,感興趣的同學(xué)快來看看吧,新手小白也能掌握
    2021-08-08
  • 詳解Android Handler機(jī)制和Looper Handler Message關(guān)系

    詳解Android Handler機(jī)制和Looper Handler Message關(guān)系

    Handler是Android線程之間的消息機(jī)制,主要的作用是將一個(gè)任務(wù)切換到指定的線程中去執(zhí)行,準(zhǔn)確的說是切換到構(gòu)成Handler的looper所在的線程中去出處理。本文將詳細(xì)介紹Android Handler機(jī)制和Looper Handler Message關(guān)系。
    2021-06-06
  • Android控件FlowLikeView實(shí)現(xiàn)點(diǎn)贊動畫

    Android控件FlowLikeView實(shí)現(xiàn)點(diǎn)贊動畫

    這篇文章主要為大家詳細(xì)介紹了一個(gè)點(diǎn)贊動畫的優(yōu)雅控件FlowLikeView,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android實(shí)現(xiàn)短信加密功能(發(fā)送加密短信、解密本地短信)

    Android實(shí)現(xiàn)短信加密功能(發(fā)送加密短信、解密本地短信)

    這篇文章主要介紹了android實(shí)現(xiàn)短信加密功能的相關(guān)資料,功能包括發(fā)送加密短信、解密本地短信,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評論