Android网络编程get方式传递数据给服务器


Get方式向服务器发送数据主要用于数据量小于2kb,并且安全性要求不是很高的情况。

在完成一个向服务器发送数据的业务需要如下流程:

web服务器端

创建一个动态web 工程,并在web.xml 中配置Sverlet。 

创建一个Servlet类并重写其doGet()方法代码如下:

public class ServerlateGetMethod extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public ServerlateGetMethod() {

        super();

        // TODO Auto-generated constructor stub

    }

/**

 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

 */

protected void doGet(HttpServletRequest request, HttpServletResponse responsethrows ServletException, IOException {

String name = request.getParameter("name");    

    String age = request.getParameter("age");

     System.out.println("name:"+names);

     System.out.println("ages:"+age);

     PrintWriter out = response.getWriter();

     out.println("name:"+names);

     out.println("age:"+age);

}

 

/**

 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

 */

protected void doPost(HttpServletRequest request, HttpServletResponse responsethrows ServletException, IOException {

// TODO Auto-generated method stub

}

 

}

 

web.xml代码如下:

<?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_3_0.xsd"

id="WebApp_ID" version="3.0"

>

<display-name>ServiceForPicture</display-name>

<servlet>

<display-name>ServerlateGetMethod</display-name>

<servlet-name>ServerlateGetMethod</servlet-name>

<servlet-class>com.xiyou.dongqu.ServerlateGetMethod</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ServerlateGetMethod</servlet-name>

<url-pattern>ServerlateGetMethod</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

</web-app>

创建Android端:

创建Android项目的业务逻辑层:

public class sendDataToServer {

private static String url = "http://192.168.1.128:8080/ServiceForPicture/ServerlateGetMethod";

 

public boolean SenddataToServer(String name, String age) throws Exception {

final Map<String, String> map = new HashMap<String, String>();

map.put("name", name);

map.put("age", age);

return sendGetRequest(map, url"utf-8"); // 请求的具体业务

}

 

protected boolean sendGetRequest(Map<String, String> map, String path,

String encoding) throws MalformedURLException, IOException {

// http://localhost:8080/ServiceForPicture/ServerlateGetMethod?name=1234&age=3

StringBuilder sb = new StringBuilder(path);

if (map != null && !map.isEmpty()) {

sb.append("?"); // 追加?

System.out.println("---->" + sb);

/*

 * Map 的entrySet()方法返回一个 实现Map.Entry接口的对象集合,结合中每个对象

 * 都是一个底层Map中一个特定的健/值对,通过这个集合迭代器,可以获取每一个条目 的键值对并对值进行更改。

 */

for (Map.Entry<String, String> entry : map.entrySet()) { // 遍历map

sb.append(entry.getKey()).append("="); // 对每一组键值对进行修改

sb.append(URLEncoder.encode(entry.getValue(), encoding));// 对每一组键值对进行修改添加指定的编码格式

sb.append("&");

System.out.println(sb);

}

// 在上面对键值队的修改中会在最后一个属性后多加一个& 这样就会造成错误,因此要删除最后一个多余的字符

sb.deleteCharAt(sb.length() - 1);// 删除字符串中最后一个字符

}

HttpURLConnection conn = (HttpURLConnection) new URL(sb.toString())

.openConnection();

conn.setConnectTimeout(5 * 1000);

conn.setRequestMethod("GET");

if (conn.getResponseCode() == 200) {

return true;

}

return false;

}

}

2:创建MainActivity :

public class MainActivity extends Activity {

private Button button;

private EditText txtname;

private EditText txtage = null;

String path = "http://192.168.1.128:8080/ServiceForPicture/ServerlateGetMethod";

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button = (Button) findViewById(R.id.button);

txtname = (EditText) findViewById(R.id.edname);

txtage = (EditText) findViewById(R.id.age);

button.setOnClickListener(new OnClickListener() {

 

@Override

public void onClick(View v) {

String name = txtname.getText().toString();

String age = txtage.getText().toString();

if (name.equals("") || age.equals("")) {

Toast.makeText(MainActivity.this"用户名或密码不正确", 2000).show();

else {

try {

new sendDataToServer().SenddataToServer(name, age);

catch (Exception e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

}

}

});

}

}

最后在清单文件中开启网络权限,然后将项目运行在模拟器上测试,第一次运行时出现乱码,这是由于在Android端使用的是utf-8进行编码,而对于Tomcat而言,默认使用的是ISO8859-1,编码不同因此出现乱码, 下面给出解决方法:

使用ISO8859-1解码Servlet得到的汉字,然后在用utf-8编码。如下:

tring names = new String (request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");

此时再次运行则编码正常如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值