国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android開發之HttpClient異步請求數據的方法詳解【附demo源碼下載】

2019-12-12 01:36:29
字體:
來源:轉載
供稿:網友

本文實例講述了Android開發之HttpClient異步請求數據的方法。分享給大家供大家參考,具體如下:

前面一篇Android開發筆記之:AsyncTask的應用較為詳細的講述了Asynctask的原理與應用,這里來結合使用一下HttpClient與Asynctask~

代碼編寫如下:

服務器代碼我就不寫出來了,就是一個用戶名和密碼~

1.寫一個類HttpClientUtil,來實現HttpClient對象的創建并且返回HttpResponse對象

public class HttpClientUtil {  private static HttpClient httpClient;  static{    //1.創建HttpClient對象    httpClient=new DefaultHttpClient();  }  //2.執行該方法返回一個HttpResponse  public static HttpResponse sendRequest(String url,List<NameValuePair>list){    HttpResponse response=null;    try {    if(list==null){      //Get方式      HttpGet get=new HttpGet(url);      response=httpClient.execute(get);    }else{      //Post方式      HttpPost post=new HttpPost(url);      //3.對于HttpPost對象而言,可調用setEntity(HttpEntity)方法設置請求參數。      //4.使用HttpEntity下的UrlEncodedFormEntitiy對象傳入一個放入BasicNameValuePair的集合中提交的數據。      post.setEntity(new UrlEncodedFormEntity(list));      response=httpClient.execute(post);    }    }catch (Exception e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    return response;  }}

get方式和post方式就是有點不一樣~它們請求數據的時候get方式沒有NameValuePair~

2.寫一個監聽接口ResponseListener,來實現監聽服務器返回的數據

public interface ResponseListener {  public void onResult(String msg);  public void onError(String msg);}

3.寫下MainActivity中的get方法提交和post方法提交

//get方式public void get(View view){  String nameTe=name.getText().toString();  String pwdTe=pwd.getText().toString();  HttpClientTask task=new HttpClientTask(this);  //要傳進去的參數  task.execute(BASIC+"?name="+nameTe+"&pwd="+pwdTe);}//post方式public void post(View view){  String nameTe=name.getText().toString();  String pwdTe=pwd.getText().toString();  List<NameValuePair>list=new ArrayList<NameValuePair>();  list.add(new BasicNameValuePair("name", nameTe));  list.add(new BasicNameValuePair("pwd", pwdTe));  HttpClientTask task=new HttpClientTask(list, this);  task.execute(BASIC);}
public static final String BASIC="http://192.168.207.1:8090/ConnectionServlet/LoginServlet";

看圖就知道,我又寫了一個類HttpClientTask~

4.編寫HttpClientTask,讓其繼承Asynctask~

/* * Params:輸入參數,如果不需要傳遞參數,則直接設為Void即可 --String * Progress:子線程執行的百分比 --Void * Result:返回的參數 --HttpResonse */public class HttpClientTask extends AsyncTask<String, Void, HttpResponse>{  private List<NameValuePair>list;  private ResponseListener listener;  //Get請求  public HttpClientTask(ResponseListener listener) {    super();    // TODO Auto-generated constructor stub    this.listener=listener;  }  //Post請求  public HttpClientTask(List<NameValuePair>list,ResponseListener listener) {    super();    // TODO Auto-generated constructor stub    this.list=list;    this.listener=listener;  }  //doInBackground有返回值,并且返回值是由result決定的,  //參數列表首先是一個可變長參數,是由Params決定的  //執行時機:在onPreExecute方法執行后馬上執行,該方法運行在后線程中  //作用:主要負責執行那些很耗時的后臺處理工作,可以調用publishProgress方法來更新實時的任務進度  @Override  protected HttpResponse doInBackground(String... params) {    // TODO Auto-generated method stub    HttpResponse response;    //這里會返回一個response    response=HttpClientUtil.sendRequest(params[0], list);    return response;  }  //參數是由result決定的  //作用:后臺的計算結果將顯示出來  //可以進行一些結束處理  @Override  protected void onPostExecute(HttpResponse result) {    // TODO Auto-generated method stub    String msg;    try {      //result是響應內容      //用EntityUtils.toString(HttpEntity,"編碼方式")      //將其轉成為字符串      msg=EntityUtils.toString(result.getEntity(), "UTF-8");      if(listener!=null){        listener.onResult(msg);      }    }catch (Exception e) {      // TODO Auto-generated catch block      e.printStackTrace();      listener.onResult("出錯了");    }    super.onPostExecute(result);  }}

代碼寫的很清楚,我就不一一解釋了~

最后在onPostExecute方法后面調用了接口中的倆個方法~

這倆個方法在MainActivity中被重寫了~

@Override  public void onResult(String msg) {    // TODO Auto-generated method stub    System.out.println(msg);  }  @Override  public void onError(String msg) {    // TODO Auto-generated method stub    System.out.println("出錯了");  }

說實話,服務器返回的數據就是成功或者失敗~
如果那個監聽器為空的話,就代表鏈接錯誤,后臺會打印出“出錯了”
否則會打印出“成功”或者“失敗”~

MainActivity完整代碼:

public class MainActivity extends Activity implements ResponseListener{  private EditText name,pwd;  public static final String BASIC="http://192.168.207.1:8090/ConnectionServlet/LoginServlet";  //get方式  public void get(View view){    String nameTe=name.getText().toString();    String pwdTe=pwd.getText().toString();    HttpClientTask task=new HttpClientTask(this);    //要傳進去的參數    task.execute(BASIC+"?name="+nameTe+"&pwd="+pwdTe);  }  //post方式  public void post(View view){    String nameTe=name.getText().toString();    String pwdTe=pwd.getText().toString();    List<NameValuePair>list=new ArrayList<NameValuePair>();    list.add(new BasicNameValuePair("name", nameTe));    list.add(new BasicNameValuePair("pwd", pwdTe));    HttpClientTask task=new HttpClientTask(list, this);    task.execute(BASIC);  }  @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);  }  @Override  public void onResult(String msg) {    // TODO Auto-generated method stub    System.out.println(msg);  }  @Override  public void onError(String msg) {    // TODO Auto-generated method stub    System.out.println("出錯了");  }}

附:完整實例代碼點擊此處本站下載。

更多關于Android相關內容感興趣的讀者可查看本站專題:《Android開發入門與進階教程》、《Android視圖View技巧總結》、《Android編程之activity操作技巧總結》、《Android文件操作技巧匯總》、《Android資源操作技巧匯總》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 申扎县| 雷山县| 花莲县| 健康| 黄石市| 电白县| 库尔勒市| 富顺县| 盘锦市| 贵溪市| 北流市| 房产| 三明市| 大丰市| 上栗县| 巴楚县| 元朗区| 康马县| 瑞金市| 青铜峡市| 龙泉市| 阿瓦提县| 永城市| 互助| 大关县| 鹰潭市| 武陟县| 水富县| 西乌珠穆沁旗| 秀山| 墨脱县| 珠海市| 江门市| 平湖市| 垫江县| 德钦县| 邮箱| 咸丰县| 富民县| 太湖县| 沐川县|