您的位置:首页 > 理论基础 > 计算机网络

Android如何进行网络通信(与web交互)

2015-10-07 16:52 866 查看
今天开始写第一篇博客,其实写博客为了逼自己整理资料,同时分享一些我踩过的坑,其实我是菜鸟,如果有写得不好的地方请指出来,谢谢大家。还有我所有的例子都是在Android Studio编译,好吧!今天分享如何与服务器web进行交互。

一、 知识点:http,javaEE的servlet,Android的volley框架(网络集成框架),Gson(1.解析json数据生成对象)。这些知识点不清楚的请自行百度,我不详细讲解,最好深入了解。

一般web与Android进行数据交互是通过json或者xml,当然字节流也行。

二、 我在eclipse(java for EE)上编写web服务器的网页。

1.先选择File,new一个Dunamic Web project,填写相关信息即可。



2.然后选择建立一个包:cn.gdin.network;然后在里面new一个servlet,在这里我建立了一个register。如图生成



3.请注意你的tomcat配置好了吗?如果木有,可能会报错哦!怎么配置教你。自己下载个tomcat,然后就安装。

然后在eclipse for EE 那里找到window ,然后选择preference,最后找到server下的server Runtime Environments,选择add,把安装tomcat的路径添加进去即可。



4.还是报错,找不到相关类,请到tomcat的安装目录下找到lib,找到servlet-api.jar即可进行下一步。

对准你项目下的library右键选择build path 的configure
build path,然后选择add extend library,如下图所示找到servlet-api.jar的路径。一切ok



接下来在里面的register的doGet写上

response.getWriter().write(“hello world”);

然后右键,点击run as,run on server,选择刚刚配置的tomcat的版本,然后运行发现浏览器出现hello world了。好,恭喜你完成第一步了。

接下来导入Gson.jar,gson就是谷歌开发的一个快捷包,可以将json解析成一个对象。

接下来我们来做个简单的登录功能了!

服务端方面

第一步:建立一个User类,包括用户名与密码,代码如下。

package cn.gdin.domain;

public class User {

private String name;

private String pwd;

public User(String name, String pwd) {

super();

this.name = name;

this.pwd = pwd;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

}

第二步

弄个辅助类,将对象打包成json数据的字符串的工具类,代码如下

public class GsonHelp {

public static String createJsonString(Object value) {

Gson gson = new Gson();

String str = gson.toJson(value);

return str;

}

}

第三步:

服务端接收数据与处理在register这个类处理,分为post方法请求与get方法请求,两者的区别,自行谷歌or度娘。接受来自Android的用户名与密码,然后我把接收的用户名与密码打包成json的数据格式返回给客户端(Android),Json的格式是什么,自行度娘,代码如下。

package cn.gdin.network;

import java.io.IOException;

import java.util.HashMap;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import cn.gdin.domain.User;

import cn.gdin.service.GsonHelp;

/**

* Servlet implementation class register

*/

@WebServlet("/register")

public class register extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

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

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

System.out.println(request.getSession().toString());

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

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

//request.getParameter(arg0);

System.out.println(name+pwd);

User user = new User(name,pwd);

String aa = GsonHelp.createJsonString(user);

response.getWriter().write(aa);

}

/**

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

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

System.out.println(request.getSession().toString());

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

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

//request.getParameter(arg0);

System.out.println(name+pwd);

User user = new User(name,pwd);

String aa = GsonHelp.createJsonString(user);

response.getWriter().write(aa);

}

}

客户端的处理

第一步:

建立一个User类,包括用户名与密码(保持与服务端一致),代码省略。

第二步:

向服务端发送请求(get与post的方法请求)个人使用的是volley框架!服务端返回的数据还是用户名与密码直接用toast展示出来。

//post请求返回json数据
private void postJsonRequest(String name,String pwd)  {
HashMap<String,String> map = new HashMap<String,String>();
map.put("name", name);
map.put("pwd", pwd);
RequestQueue requestQueue = Volley.newRequestQueue(this);
CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST, "http://192.168.199.239:8080/network/register",
map,  new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
System.out.println(response);
/// hideProgressDialog();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// hideProgressDialog();
}
});
requestQueue.add(jsObjRequest);
}

//post请求,返回是gson解析的对象
private void postGsonRequest(String name,String pwd){
HashMap<String,String> map = new HashMap<String,String>();
map.put("name",name);
map.put("pwd",pwd);
GsonRequest gsonObjRequest = new GsonRequest<User>(Request.Method.POST, "http://192.168.199.239:8080/network/register",
map,User.class, new Response.Listener<User>() {
@Override
public void onResponse(User response) {
Toast.makeText(MainActivity.this,"用户名:"+response.getName()
+"密码:"+response.getPwd(),Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
}
});

//RequestQueue mVolleyQueue =  Volley.newRequestQueue(getApplicationContext());
mVolleyQueue.add(gsonObjRequest);

}

//get请求,返回的是gson解析的对象
private void getGsonRequest(String name,String pwd){
GsonRequest gsonObjRequest = new GsonRequest<User>(Request.Method.GET,
"http://192.168.199.239:8080/network/register?"+"name="+name+"&"+"pwd="+pwd,
User.class,null, new Response.Listener<User>() {
@Override
public void onResponse(User response) {
Toast.makeText(MainActivity.this,response.getName(),Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
if( error instanceof NetworkError) {
} else if( error instanceof ClientError) {
} else if( error instanceof ServerError) {
} else if( error instanceof AuthFailureError) {
} else if( error instanceof ParseError) {
} else if( error instanceof NoConnectionError) {
} else if( error instanceof TimeoutError) {
}

}
});

mVolleyQueue.add(gsonObjRequest);
}

//get请求,返回string类型
private void getStringRequest(String name,String pwd){
StringRequest stringRequest = new StringRequest(Request.Method.GET,
"http://192.168.199.239:8080/network/register?"+"name="+name+"&"+"pwd="+pwd,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
mVolleyQueue.add(stringRequest);
}

//post请求,返回是string类型
private void postStringRequest(String name,String pwd){
HashMap<String,String> map = new HashMap<String,String>();
map.put("name",name);
map.put("pwd",pwd);
StringExtendRequest stringRequest = new StringExtendRequest(Request.Method.POST,
"http://192.168.199.239:8080/network/register",map,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
mVolleyQueue.add(stringRequest);
}


好了,代码上传了,自行下载
http://pan.baidu.com/s/1i4VEdLV
觉得我的博客对你有用,可以到我公众号支持买衣服啊,有团购更好,萌萌哒!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android