android 中客户端和服务器端的数据传输,可以使用java中的网络连接,也可以使用android自带的网络连接进行通讯。我也是刚接触android不久的小白,将使用android自带的网络传输做记录。在android中已经不推荐使用android自带的网络通讯。建议使用java.net包下的httpURLConnection进行网络的连接。但基本原理都一样。所有代码测试通过。
下边将一步步的做出org.apache.http通讯get请求和post请求
一.服务器端分为三个步骤
1.创建一个Dynamic Web project 项目。
2.创建一个类继承自HttpServlet
3.配置web.xml文件
Servlet的代码如下在这不做数据库的操作
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置返回的格式,不设置的话收到的在客户端会是乱码
resp.setCharacterEncoding("UTF-8");
//根据请求参数拿到userName和usePassW的值
String userName = req.getParameter("userName");
String usePassW = req.getParameter("usePassW");
//打印输出,此处可以做数据库的操作出
System.out.println("userName"+userName+"usePassW"+usePassW);
PrintWriter write = resp.getWriter();
write.println("登陆成功");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
配置web.xml文件,注意在 <servlet-class>com.fs.MyServlet</servlet-class>代码中添加的是servet的包名和类名。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>MyServlet</display-name>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.fs.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet.action</url-pattern>
</servlet-mapping>
</web-app>
服务器端的get请求,
1.用户界面设计(本次的只是简单的测试,只需两个EditText和一个Button按钮,故不在记录)
1.配置网络权限
2.在Button按钮的监听中开启新的线程对网络的请求和接收返回的操作
一:添加网络请求
二:
具体实现代码如下,做了具体的注释,注意路径的配置问题
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements Button.OnClickListener {
private Button btn_httpGet_main;
private EditText et_useName_main;
private EditText et_usePassW_main;
private String userName;
private String usePassW;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
btn_httpGet_main = (Button) findViewById(R.id.btn_httpGet_main);
et_useName_main = (EditText) findViewById(R.id.et_useName_main);
et_usePassW_main = (EditText) findViewById(R.id.et_usePassW_main);
//Button按钮的监听
btn_httpGet_main.setOnClickListener(MainActivity.this);
}
@Override
public void onClick(View v) {
// 获得EditText中输入的serName和usePassW
userName = et_useName_main.getText().toString();
usePassW = et_usePassW_main.getText().toString();
//开启子线程,耗时操作要在子线程中操作。不要阻塞ui线程
new Thread() {
public void run() {
//1.httpClient对象
HttpClient client = new DefaultHttpClient();
InputStream input = null;
// 2.拼接字符串,注意IP地址
String URlGet = "http://192.168.2.124:8080/MyServlet/MyServlet.action";
String url="?userName="+userName+"&usePassW="+usePassW;
// 3.表示本次使用的是get请求
HttpGet get = new HttpGet(URlGet+url);
HttpResponse response;
try {
//4.发送请求
response = client.execute(get);
//5.获得响应实体
HttpEntity entity = response.getEntity();
//6.读取数据
input = entity.getContent();
byte[] buff = new byte[1024];
int len = 0;
while((len =input.read(buff)) != -1){
//打印从服务器得到的响应数据d
System.out.println(new String(buff,0,len));
}
} catch (Exception e) {
}finally {
//关闭资源
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
2.org.apache.http的post请求
1添加网络权限
2.HttpClient对象
3.HttpPost请求
4.添加参数到结合中
5.将结合设置到post请求上
6.发送请求
7.接收并处理服务器的响应
package com.quhsi.clientpost;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
/**
* org.apache.http中的post请求
* 1.添加网络权限
* 2.HttpClient对象
* 3.HttpPost请求
* 4.添加参数到结合中
* 5.将结合设置到post请求上
* 6.发送请求
* 7.接收并处理服务器的响应
*/
public class MainActivity extends Activity implements Button.OnClickListener {
private Button btn_httpPost_main;
private EditText et_usePassW_main;
private EditText et_useName_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
btn_httpPost_main = (Button) findViewById(R.id.btn_httpPost_main);
et_useName_main = (EditText) findViewById(R.id.et_useName_main);
et_usePassW_main = (EditText) findViewById(R.id.et_usePassW_main);
// 设置按钮的监听
btn_httpPost_main.setOnClickListener(MainActivity.this);
}
// Button按钮监听实现Post请求n
@Override
public void onClick(View v) {
// 新建线程对网络的请求,网络请求url
final String url = "http://192.168.2.124:8080/MyServlet/MyServlet.action";
// 获得EditText输入的值
final String userName = et_useName_main.getText().toString();
final String userPass = et_usePassW_main.getText().toString();
System.out.println("username" + userName + "userPassWorld" + userPass);
new Thread() {
@Override
public void run() {
// 1.HttpClient对象P
HttpClient client = new DefaultHttpClient();
// 2.post请求,传入url入
HttpPost post = new HttpPost(url);
// 3.添加需要上传到服务器的参数,创建集合存放需要上传的参数
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
// 将参数添加到集合中
BasicNameValuePair pair = new BasicNameValuePair("userName", userName);
BasicNameValuePair pair1 = new BasicNameValuePair("usePassW", userPass);
list.add(pair);
list.add(pair1);
HttpResponse response = null;
try {
// 4.将参数添加到response中
post.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
// 5.发送请求
response = client.execute(post);
// 6.接收服务器的响应
HttpEntity it = response.getEntity();
InputStream read = it.getContent();
byte[] buff = new byte[1024 * 4];
// 读取流返回的实际长度len
int len = 0;
while ((len = read.read(buff)) != -1) {
// 7.输出服务器响应
System.out.print(new String(buff, 0, len));
}
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
}