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

         今天开始写第一篇博客,其实写博客为了逼自己整理资料,同时分享一些我踩过的坑,其实我是菜鸟,如果有写得不好的地方请指出来,谢谢大家。还有我所有的例子都是在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


觉得我的博客对你有用,可以到我公众号支持买衣服啊,有团购更好,萌萌哒!!



  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值