今天开始写第一篇博客,其实写博客为了逼自己整理资料,同时分享一些我踩过的坑,其实我是菜鸟,如果有写得不好的地方请指出来,谢谢大家。还有我所有的例子都是在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
觉得我的博客对你有用,可以到我公众号支持买衣服啊,有团购更好,萌萌哒!!