標籤:
依據08_android入門_android-async-http開源項目介紹及用法的介紹,我們通過最常見的登陸案例進行介紹android-async-http開源項目中有關類的使用.希望對你學習android-async-http開源項目有所協助.
1.繼續採用03_android入門_採用RelativeLayout實現登陸介面為該案例的布局檔案
2.server端的代碼採用04_android入門_採用HttpURLConnection的GET方式實現登陸案例中的server程式碼片段(5.關於server中我僅寫一個Servlet進行處理對應的請求處理)
3.在應用中引用android-async-http開源項目
方法一:找到下載檔案的原始碼library\src\main\java的com包黏貼到項目中的src檔案夾下
方法二:把android-async-http-master\releases以下最新的jar包放到應用到libs下
4.LoginActivity的代碼(代碼中具體加了凝視,請細緻閱讀)
package com.example.lesson03;import org.apache.http.Header;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import com.loopj.android.http.RequestParams;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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 擷取控制項對象et_name = (EditText) findViewById(R.id.et_name);et_pass = (EditText) findViewById(R.id.et_pass);tv_result = (TextView) findViewById(R.id.tv_result);}/** * 點擊button控制項觸發的事件 * @param v */public void login(View v) {//擷取控制項的idint id = v.getId();//依據id推斷進行對應的處理switch (id) {case R.id.btn_login:// 擷取控制項的常值內容String userName = et_name.getText().toString();// usernameString userPass = et_pass.getText().toString();// 使用者password//推斷username和password是否為空白if (TextUtils.isEmpty(userName.trim())|| TextUtils.isEmpty(userPass.trim())) {Toast.makeText(this, "username或者password不可為空", Toast.LENGTH_LONG).show();} else {// 發送請求給server//調用:loginByAsyncHttpClientPost(userName, userPass);loginByAsyncHttpClientGet(userName, userPass);}break;}}/** * 採用AsyncHttpClient的Post方式進行實現 * @param userName * @param userPass */public void loginByAsyncHttpClientPost(String userName, String userPass) {AsyncHttpClient client = new AsyncHttpClient(); // 建立非同步請求的用戶端對象String url = "http://172.16.237.200:8080/video/login.do"; // 定義請求的地址// 建立請求參數的封裝的對象RequestParams params = new RequestParams();params.put("username", userName); // 佈建要求的參數名和參數值params.put("userpass", userPass);// 佈建要求的參數名和參數// 運行post方法client.post(url, params, new AsyncHttpResponseHandler() {/** * 成功處理的方法 * statusCode:響應的狀態代碼; headers:對應的頭資訊 比方 響應的時間,響應的server ; * responseBody:響應內容的位元組 */@Overridepublic void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {if (statusCode == 200) {tv_result.setText(new String(responseBody)); // 設定顯示的文本}}/** * 失敗處理的方法 * error:響應失敗的錯誤資訊封裝到這個異常對象中 */@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {error.printStackTrace();// 把錯誤列印資訊出軌跡來}});}/** * 採用AsyncHttpClient的Get方式進行實現 * @param userName * @param userPass */public void loginByAsyncHttpClientGet(String userName, String userPass) {// 建立非同步用戶端對象AsyncHttpClient client = new AsyncHttpClient();// 請求的地址String url = "http://172.16.237.200:8080/video/login.do";// 建立請求參數的封裝的對象RequestParams params = new RequestParams();params.put("username", userName); // 佈建要求的參數名和參數值params.put("userpass", userPass);// 佈建要求的參數名和參數// 發送get請求的時候 url地址 對應參數,匿名回調對象client.get(url, params,new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {// 成功處理的方法System.out.println("statusCode-------------------" + statusCode);// 遍曆頭資訊for (int i = 0; i < headers.length; i++) {Header header = headers[i];System.out.println("header------------Name:"+ header.getName() + ",--Value:"+ header.getValue());}// 設定控制項內容tv_result.setText(new String(responseBody));}@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {// 失敗處理的方法error.printStackTrace();}});}}
5.程式執行結果例如以:
09_android入門_採用android-async-http開源項目的GET方式或POST方式實現登陸案例