1.添加梁王权限:
<uses-permissionandroid:name="android.permission.INTERNET" />
代码 :
2.MainActivity :
package zz.itcast.myhttpclient;
import java.io.InputStream;
import zz.itcast.http.MyHttpClient;
import zz.itcast.http.MyHttpClient.INetResponseListener;
import zz.itcast.http.RequestParameter;
import zz.itcast.http.StreamTool;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void get(View view) {
MyHttpClient client = new MyHttpClient();
client.setConnectionTimeOut(5000);
String url = "http://192.168.0.99:8080/server/LoginServlet?username=zhangsan&password=123";
client.get(url, new INetResponseListener() {
@Override
public void onSuccess(int code, InputStream is) {
final String str = StreamTool.getStringByStream(is);
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, str, 0).show();
}
@Override
public void onFail(int code, final String msg) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, msg, 0).show();
}
});
}
public void post(View view) {
MyHttpClient client = new MyHttpClient();
String url = "http://192.168.0.99:8080/server/LoginServlet";
RequestParameter rp = new RequestParameter();
rp.put("username", "zhangsan");
rp.put("password", "123");
client.post(url, rp, new INetResponseListener() {
@Override
public void onSuccess(int code, InputStream is) {
final String str = StreamTool.getStringByStream(is);
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, str, 0).show();
}
@Override
public void onFail(int code, String msg) {
Toast.makeText(MainActivity.this, msg, 0).show();
}
});
}
}
http 包:
MyHttpClient :
package zz.itcast.http;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Handler;
import android.os.Message;
public class MyHttpClient {
private int connTime = 10000;
private final static int CONN_OK = 0;
private final static int CONN_NO_OK = 1;
//将子线程的拿到的数据在主线程回调出去
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
int what = msg.what;
switch (what) {
case CONN_OK:
//消息发送过来的数据,包含了监听者,网络状态相应吗,网络返回的数据
Object[] objs = (Object[]) msg.obj;
INetResponseListener listener = (INetResponseListener) objs[0];
int code = (Integer) objs[1];
InputStream is = (InputStream) objs[2];
//最精妙之处,通过接口回调给调用者
listener.onSuccess(code, is);
break;
case CONN_NO_OK:
//消息发送过来的数据,包含了监听者,网络状态相应吗
Object[] objs2 = (Object[]) msg.obj;
INetResponseListener listener2 = (INetResponseListener) objs2[0];
int code2 = (Integer) objs2[1];
//最精妙之处,通过接口回调给调用者
listener2.onFail(code2, "服务器忙");
break;
default:
break;
}
}
};
//对外提供一个改变连接超时的方法,如果不调用,默认10秒
public void setConnectionTimeOut(int time) {
connTime = time;
}
/**
*
* @param url 要传送的URL
* @param listener 网络相应的回调 包含onSuccess和onFail方法
*/
public void get(final String url, final INetResponseListener listener) {
new Thread() {
public void run() {
int code = 0;
try {
//网络的连接
URL u = new URL(url);
HttpURLConnection conn = (HttpURLConnection) u
.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(connTime);
code = conn.getResponseCode();
if (code == 200) {
// 联网成功
InputStream is = conn.getInputStream();
if (listener != null) {
//联网成功发送消息出去
Message msg = Message.obtain();
Object[] objs = new Object[] { listener, code, is };
msg.obj = objs;
msg.what = CONN_OK;
handler.sendMessage(msg);
}
} else {
// 联网失败
if (listener != null) {
// 联网失败 发送消息出去
Message msg = Message.obtain();
Object[] objs = new Object[] {listener, code};
msg.obj = objs;
msg.what = CONN_NO_OK;
handler.sendMessage(msg);
}
}
} catch (Exception e) {
if (listener != null) {
listener.onFail(code, "服务器忙");
}
e.printStackTrace();
}
};
}.start();
}
/**
*
* @param url 要传输的URL
* @param rp 要传输的参数,内部封装的是HashMap 直接put键值对即可
* @param listener 网络相应的回调 包含onSuccess和onFail方法
*/
public void post(final String url, final RequestParameter rp,
final INetResponseListener listener) {
new Thread() {
public void run() {
int code = 0;
try {
URL u = new URL(url);
HttpURLConnection conn = (HttpURLConnection) u
.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(connTime);
conn.addRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
String content = rp.toString();
conn.addRequestProperty("Content-Length", content.length()
+ "");
conn.setDoOutput(true);
conn.getOutputStream().write(content.getBytes());
code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
if (listener != null) {
Message msg = Message.obtain();
Object[] objs = new Object[] { listener, code, is };
msg.obj = objs;
msg.what = CONN_OK;
handler.sendMessage(msg);
}
} else {
if (listener != null) {
Message msg = Message.obtain();
Object[] objs = new Object[] {listener, code};
msg.obj = objs;
msg.what = CONN_NO_OK;
handler.sendMessage(msg);
}
}
} catch (Exception e) {
if (listener != null) {
Message msg = Message.obtain();
Object[] objs = new Object[] {listener, code};
msg.obj = objs;
msg.what = CONN_NO_OK;
handler.sendMessage(msg);
}
e.printStackTrace();
}
}
}.start();
}
//核心指出,框架一般都会有接口,核心之处
public interface INetResponseListener {
//网络成功的回调
void onSuccess(int code, InputStream is);
//网络失败的回调
void onFail(int code, String msg);
}
}
RequestParameter:
package zz.itcast.http;
import java.util.HashMap;
import java.util.Set;
public class RequestParameter {
private HashMap<String,String> map;
public RequestParameter(){
map = new HashMap<String, String>();
}
public void put(String key,String value){
map.put(key, value);
}
public String toString(){
/*
* username=xxx&password=xxx
*
*
*/
String content = null;
StringBuffer sb = new StringBuffer();
Set<String> keys = map.keySet();
for(String key:keys){
sb.append(key);
sb.append("=");
sb.append(map.get(key));
sb.append("&");
}
sb.deleteCharAt(sb.length()-1);
content = sb.toString();
return content;
}
}
StreamTool:
package zz.itcast.http;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class StreamTool {
public static String getStringByStream(InputStream is) {
String content = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = -1;
byte[] buf = new byte[1024];
while ((len = is.read(buf)) != -1) {
baos.write(buf, 0, len);
}
content = baos.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return content;
}
}