Android客户端与服务器交互方式(1)

来源:互联网 发布:构造函数 java 编辑:程序博客网 时间:2024/05/19 15:24

Android客户端与服务器交互方式(1)

Android客户端与服务器端的数据交互有多种,最常见的就是webservice和json。

为了与服务器端交互主要通过通信协议,常用的就是Http和TCP。Http基于TCP,TCP协议对应传输层,Http协议对应应用层。当客户端需要从服务器获取数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开。

而xmlrpc,ssh的json就是这两种协议扩展来的。
使用webservices传输XML文件比较简单及通用,如果对数据大小及传输速度有要求的话就用json更合适。

此次讲的就是通过json进行数据交互。

所谓的通过json进行数据交互其实就是在客户端将数据转换为json字符串发送给服务器,服务器接送到后将json转换会原数据进行处理。那么客户端怎么发送json呢,即通过Http协议的Post或Get方法。

废话不多说上代码
1. android端
2.

package com.example.helloworld;public class MainActivity extends ActionBarActivity {    private String responseMsg = "";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button button1 = (Button)findViewById(R.id.button1);        button1.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View arg0) {                // TODO Auto-generated method stub                //Intent intent = new Intent(MainActivity.this, InfoActivity.class);                //startActivity(intent);                Thread loginThread = new Thread(new LoginThread());                loginThread.start();            }        });    }    public HttpClient getHttpClient(){        BasicHttpParams httpParams = new BasicHttpParams();        HttpConnectionParams.setConnectionTimeout(httpParams, 5*1000);        HttpConnectionParams.setSoTimeout(httpParams, 10*1000);        HttpClient client = new DefaultHttpClient(httpParams);        return client;    }    private void sendJson(){        //boolean loginValidate = false;        String urlStr = "http://192.168.1.24:8080/servletTest/test";        HttpPost post = new HttpPost(urlStr);        try{            //向服务器写json            JSONObject json1 = new JSONObject();            //Object email = null;            Object email = "hlelo";            json1.put("email", email);            //Object pwd = null;            Object pwd = "wodls";            json1.put("password", pwd);            System.out.println("=============="+json.toString());            //保证json数据不是乱码            StringEntity se = new StringEntity(json.toString());            se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));            post.setEntity(se);            //发送json给服务器            HttpClient httpClient = getHttpClient();            HttpResponse httpResponse = httpClient.execute(post);            /*int httpCode = httpResponse.getStatusLine().getStatusCode();            if(httpCode == HttpURLConnection.HTTP_OK && httpResponse != null){                //org.apache.http.Header[] headers = httpResponse.getAllHeaders();                HttpEntity entity = httpResponse.getEntity();                //org.apache.http.Header header = httpResponse.getFirstHeader("content-type");                //读取服务器返回的json                InputStream inputStream = entity.getContent();                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);                BufferedReader reader = new BufferedReader(inputStreamReader);                String s;                while((s= reader.readLine())!= null){                    result.append(s);                }                reader.close();                JSONObject jsonObject = new JSONObject(result.toString());                String nameString = jsonObject.getString("email");                String passString = jsonObject.getString("password");                System.out.println("===============email is: "+nameString+", password is: "+passString);*/        }catch(Exception exception){            exception.printStackTrace();        }    }    class LoginThread implements Runnable{        public void run(){                       sendJson();        }    }     }

2.servlet端

package cn.dragon.servlet;public class ServletDemoFirst extends HttpServlet{    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{        doPost(request, response);    }    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{        //处理json内容        response.setCharacterEncoding("UTF-8");        response.setContentType("text/json");        String acceptjson = "";        try {            BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream(), "utf-8"));            StringBuffer sb = new StringBuffer("");            String temp;            while((temp = br.readLine()) != null){                sb.append(temp);            }            br.close();                             //以上的过程都从request中读取json,并将json转换成string,这样可以显示出来。最终String类型的json就是acceptjson              acceptjson = sb.toString();            System.out.println("=======json is==========="+acceptjson);            if(acceptjson != ""){                //System.out.println("get the json successfully");                JSONObject jo = JSONObject.fromObject(acceptjson);          //email即是android端发送过来的json当中的一个key,我们使用get方法读取对应的value                System.out.println(jo.get("email"));            }            else{                System.out.println("get the json failed");            }        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }    }}

参考出处:1.http://blog.csdn.net/panfb227
2.http://www.cnblogs.com/zhawj159753/p/3949956.html

作者:陈帅:原文地址

阅读全文
0 0
原创粉丝点击