Android

    技术2022-05-19  17

    1.HttpConnectApi.java package TestNO01.httpconnect; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.protocol.HTTP; import android.util.Log; public class HttpConnectApi {     public static String SERVER_URL = "http://***.***.***.***:83/phone/servlet/LoginServlet";     HttpClient httpclient;     private static HttpConnectApi httpConnect;     private String LOG = "day";     public int maxTime = 15000;     public HttpConnectApi() {     }     public static HttpConnectApi getInstance() {         if (httpConnect == null) {             httpConnect = new HttpConnectApi();         }         return httpConnect;     }     public HttpResponse executeHttpRequest(HttpRequestBase httpRequest) {         HttpResponse response = null;         try {             HttpParams httpParams = new BasicHttpParams();             HttpConnectionParams.setConnectionTimeout(httpParams, maxTime);             HttpConnectionParams.setSoTimeout(httpParams, maxTime);             // 新建HttpClient对象             httpclient = new DefaultHttpClient(httpParams);             response = httpclient.execute(httpRequest);         } catch (Exception e) {         }         return response;     }     public HttpGet createHttpGet(String url, NameValuePair... nameValuePairs) {         String query = URLEncodedUtils.format(stripNulls(nameValuePairs),                 HTTP.UTF_8);         HttpGet httpGet = new HttpGet(url + "?" + query);         return httpGet;     }     public HttpPost createHttpPost(String url, NameValuePair... nameValuePairs) {         HttpPost httpPost = new HttpPost(url);         try {             httpPost.setEntity(new UrlEncodedFormEntity(                     stripNulls(nameValuePairs)));         } catch (Exception e) {             // Log.d(LOG, "createHttpPost: "+e.toString());         }         return httpPost;     }     private List<NameValuePair> stripNulls(NameValuePair... nameValuePairs) {         List<NameValuePair> params = new ArrayList<NameValuePair>();         for (int i = 0; i < nameValuePairs.length; i++) {             NameValuePair param = nameValuePairs[i];             if (param.getValue() != null) {                 params.add(param);             }         }         return params;     }     public HttpResponse loginHttp(String account, String passwd) {         HttpPost httpPost = null;         try {             String op = "login";             HttpPost httppost = new HttpPost(SERVER_URL);             List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();             nameValuePairs.add(new BasicNameValuePair("op", op));             nameValuePairs.add(new BasicNameValuePair("account", account));             nameValuePairs.add(new BasicNameValuePair("passwd", passwd));             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));             return executeHttpRequest(httppost);         } catch (Exception e) {             Log.d(LOG, "test post: " + e.toString());         }         return null;     } } 2.定义成员变量: public Task task;    //后台执行任务 private HttpConnectApi httpConnect;    //网络交互 private String value;    //网络交互成功后的内容 3.前台事件处理 // 前台事件处理 private final Handler handler = new Handler(Looper.getMainLooper()) {     public void handleMessage(Message msg) {         super.handleMessage(msg);         switch (msg.what) {         case RESULT_LOGIN_FAIL:    //登陆失败             myDialog.hide();             String str = "用户名密码错误";             // 登录失败             new AlertDialog.Builder(Login.this).setTitle("登录失败!")                     .setMessage(str).setPositiveButton("确定", null).show();             break;         case RESULT_LOGIN_SUCCESS:    //登陆成功             myDialog.hide();             // 显示接到的数据             new AlertDialog.Builder(Login.this).setTitle("登录成功!")                     .setMessage(value).setPositiveButton("确定", null).show();             break;         case RESULT_SCROLLBAR_OPEN:    //由onPreExecute()调用打开滚动框             String sTitle = "提示";             String sMsg = "正在请求数据...";             myDialog = ProgressDialog.show(Login.this, sTitle, sMsg, true);             break;         }     } }; 4.Task类,用于在后台处理数据。 // AsyncTask<>的参数类型由用户设定,这里设为三个String // 第一个String代表输入到任务的参数类型,也即是doInBackground()的参数类型 // 第二个String代表处理过程中的参数类型,也就是doInBackground()执行过程中的产出参数类型,通过 // publishProgress()发消息 // 传递给onProgressUpdate()一般用来更新界面 // 第三个String代表任务结束的产出类型,也就是doInBackground()的返回值类型,和onPostExecute()的参数类型 private class Task extends AsyncTask<String, String, String> {     // 后台执行的耗时任务,接收参数并返回结果     // 当onPostExecute()执行完,在后台线程中被系统调用     @Override     protected String doInBackground(String... params) {         if (params[0].equals(TASK_LOGIN)) {             return funLogin();         }         return "";     }     // 任务执行结束后,在UI线程中被系统调用     // 一般用来显示任务已经执行结束     @Override     protected void onPostExecute(String result) {         super.onPostExecute(result);         if (result.equals("login_fail")) {             Message msg = Message.obtain();             msg.what = RESULT_LOGIN_FAIL;             handler.sendMessage(msg);         } else if (result.equals("login_success")) {             Message msg = Message.obtain();             msg.what = RESULT_LOGIN_SUCCESS;             handler.sendMessage(msg);         }     }     // 最先执行,在UI线程中被系统调用     // 一般用来在UI中产生一个进度条     @Override     protected void onPreExecute() {         super.onPreExecute();         Message msg = Message.obtain();         msg.what = RESULT_SCROLLBAR_OPEN;         handler.sendMessage(msg);     }     // 更新界面操作,在收到更新消息后,在UI线程中被系统调用     @Override     protected void onProgressUpdate(String... values) {         super.onProgressUpdate(values);     } } 5.Task函数中用到的登陆函数。 public String funLogin() {     String result = "login_fail";     httpConnect = HttpConnectApi.getInstance();     try {         String account = mAccount.getText().toString();         String passwd = mPasswd.getText().toString();         HttpResponse response = httpConnect.loginHttp(account, passwd);         if (response.getStatusLine().getStatusCode() == 200) {             result = "login_success";             value = EntityUtils.toString(response.getEntity());         }     } catch (Exception e) {     }     return result; }


    最新回复(0)