在保证服务器是正常状态时,将从Android模拟器上发送请求给服务端并接收服务端返回来的响应。
保证HttpServlet配置正常。可以通过在浏览器输入配置的地址,若能正常响应,那么在Android中去请求的话也是能正常响应的。
这里列举的Demo是在activity中有两个按钮,分别执行get请求和post请求的同时传递参数到服务端,并将服务端返回的信息显示到textview上。
客户端
一、get请求:
第一步:建立请求,连接服务器。
<span style="white-space:pre"> </span>String name = URLEncoder.encode("小红", "utf-8"); //中文输入先指定编码,不然会出现乱码
//get请求带参数的URL地址 http://192.168.1.112:8080/app/myweb?username=小红&password=abcd
URL url = new URL(httpUrl+"?username="+name+"&password=abcd");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET"); //请求方式
conn.setConnectTimeout(15000); //设置连接超时
conn.setReadTimeout(10000); //设置读取超时
conn.connect(); //建立连接
这里已经将参数加进去了。由于get请求的参数是直接加在URL地址之后,形式如同 http://192.168.1.112:8080/app/myweb?username=小红&password=abcd 问号后面就是携带的参数,中文参数需要先指定编码集,防止乱码。若没有参数则构造URL时就只需要协议地址。
第二步:服务器请求连接成功后,服务器接到参数,并作出响应,客户端只需从连接中的流中读出响应即可。
<span style="white-space:pre"> </span>InputStream in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8")); //得到连接服务器的缓冲流
String line;
StringBuilder sb = new StringBuilder();
while((line=br.readLine()) != null){ //从服务中读取请求返回的数据
sb.append(line);
}
最后看看get请求的完整Demo:
<span style="white-space:pre"> </span>/*get请求方式连接服务器 get请求传递参数在url后面加参数*/
public String getHttpDoget(String httpUrl){
try {
String name = URLEncoder.encode("小红", "utf-8"); //中文输入先指定编码,不然会出现乱码
//get请求带参数的URL地址 http://192.168.1.112:8080/app/myweb?username=小红&password=abcd
URL url = new URL(httpUrl+"?username="+name+"&password=abcd");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET"); //请求方式
conn.setConnectTimeout(15000); //设置连接超时
conn.setReadTimeout(10000); //设置读取超时
conn.connect(); //建立连接
InputStream in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8")); //得到连接服务器的缓冲流
String line;
StringBuilder sb = new StringBuilder();
while((line=br.readLine()) != null){ //从服务中读取请求返回的数据
sb.append(line);
}
return sb.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
按钮监听中,由于请求服务器连接是耗时操作,需要放到子线程中,这里采用的是AsyncTask异步操作实现,若需要学习AsyncTask异步操作请参见:http://blog.csdn.net/tom_xiaoxie/article/details/49803413
<span style="white-space:pre"> </span>mConnecyBtn = (Button) findViewById(R.id.http_doget_btn);
mConnecyBtn.setOnClickListener(new OnClickListener() {
String httpUrl = "http://192.168.1.112:8080/app/myweb";
@Override
public void onClick(View v) {
new AsyncTask<String, Void, String>(){
@Override
protected String doInBackground(String... params) {