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;
}

更多相关文章

  1. 简单显示顶部通知的Demo
  2. Android练习之SmsManager发短信
  3. 使用异步任务下载--疯狂android讲义实例
  4. Android学习笔记(1)————Android四大组件之一(Activity)
  5. Android(安卓)动态设置布局文件的exception
  6. android 静默安装并自启
  7. Adb连接超时错误
  8. android、webService 天气预报demo
  9. Android(安卓)gallery详解

随机推荐

  1. Android之Button样式
  2. Could not find gradle wrapper within A
  3. Android(安卓)Property实现介绍
  4. android代码实现按钮自旋转
  5. android之Switch开关
  6. android后台上传数据demo
  7. android actionbar tab style
  8. Android(安卓)中常用 MimeType 及对应文
  9. Android(安卓)获取手机屏幕大小两种方法
  10. Android之Spinner用法