zoukankan      html  css  js  c++  java
  • Android 客户端和服务器 json交互

    http://www.cnblogs.com/jyan/articles/2544974.html

    1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

    JSON具有以下这些形式:

    对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

    2.需要的类包:

      org.json.package,JSONObject

      org.apache.http.package,DefaultHttpClient

     

    3.服务器端,我们使用grails提供数据服务,数据库使用mysql,以其中一张表Person(name,gender,title)为例,在Controller中提供person列表服务,其格式为JSON

    复制代码
      def index() {
            def parg=params
            if(params.data){
              //如果存在data参数,将该参数转换为JSONObject
              JSONObject json=new JSONObject(params.data) def sqlinsert=new Sql(dataSource)
               //从JSONObject中获取数据并插入数据库 sqlinsert.executeInsert(" INSERT INTO person (name,gender,title) values (?,?,?)", [json.getString("name"),json.getString("gender"),json.getString("title")]) } def sql= new Sql(dataSource)
           //获取Person列表,以JSON方式返回 def rows=sql.rows("select name,gender,title from person") sql.close() render rows as JSON }
    复制代码

    4 Android端

    4.1从服务器端获取数据并显示

    复制代码
        public void doHttpGetJSON(View view) throws IOException, JSONException {
            
            DefaultHttpClient httpClient = new DefaultHttpClient();
            //指定服务器端URL
            HttpGet get = new HttpGet("http://10.4.30.228:8080/PersonForAndroid/person");
            HttpResponse rsp = httpClient.execute(get);
            //获取响应的实体
            HttpEntity httpEntity = rsp.getEntity();
            //将响应的实体转换为字符串
            String jsonString = EntityUtils.toString(httpEntity);
            //服务器端返回的数据格式为:[{"name":"Johnny","gender":"Male","title":"Programmer"},{"name":"Kevin","gender":"Male","title":"Manager"}]
            //是一个JSON数组,因此使用JSONArray将字符串转换为JSONArray
            //如果服务器端返回的是JSON字符串:{"name":"Johnny","gender":"Male","title":"Programmer"},则使用JSONObject jsonObject=new JSONObject(jsonString);
            JSONArray jsonArray=new JSONArray(jsonString);
            String resultsString="";
            //遍历JSONArray,将结果输出
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObj = jsonArray.getJSONObject(i);
                String name = jsonObj.getString("name");
                String gender = jsonObj.getString("gender");
                String title = jsonObj.getString("title");
                resultsString += title + " " + name + " is " + gender+"
    ";
            }
            TextView getTextView = (TextView) findViewById(R.id.jsonGetTextView);
            getTextView.setText(resultsString);
        }
    复制代码

    4.2向服务器提交JSON格式数据

    复制代码
        public void doHttpPostJSON(View view) throws IOException, JSONException {
            //定义一个JSON,用于向服务器提交数据
            JSONObject jsonObj = new JSONObject();
            jsonObj.put("name", getTextFromView(R.id.name))
                    .put("gender", getTextFromView(R.id.gender))
                    .put("title", getTextFromView(R.id.title));
            String jsonString = jsonObj.toString();
            //指定Post参数
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
            nameValuePairs.add(new BasicNameValuePair("data", jsonString));
            
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost post = new HttpPost("http://10.4.30.228:8080/PersonForAndroid/person");
            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse rsp = httpClient.execute(post);
            
            HttpEntity httpEntity = rsp.getEntity();
            String displayString = EntityUtils.toString(httpEntity);
            
            TextView getTextView = (TextView) findViewById(R.id.jsonPostTextView);
            getTextView.setText(displayString);
        }
  • 相关阅读:
    Android6.0权限组申请
    Win10安装程序出现error code 2502 2503
    StartUML2.8破解
    Batchsize与learning rate
    Tensorflow 多gpu训练
    centos7系统时间修复
    服务器安装小结
    caffe与tensorflow中的pooling
    MixConv
    blazeFace
  • 原文地址:https://www.cnblogs.com/antis/p/5509180.html
Copyright © 2011-2022 走看看