zoukankan      html  css  js  c++  java
  • 网络请求到的json对象base64保存

    在开发中,发现 1,向网络发送请求,获得json字符串——>2,将请求到的json字符串进行解析(一般可以解析为List<Map<String,Object>>对象)——>3,将解析到的对象通过base64编码后存储到文件中。在自己的项目中是SendRequst,jsonHelper,FileManager三个类的配合使用。

    其实,也可以采用不同的策略,建立对应的实体对象,在保存的时候,仅仅用sp文件的一个键值对保存整个json字符串,在使用的时候才进行解析。

    一、首先准备一个ArrayMap类,该类实现序列化接口,便于存储

    package com.bobo.util;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    public class ArrayMap implements Serializable{
        public List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
    
    }


    二、sendRequest类,向网络发送请求,并且调用底层类进行相关解析和存储

    package com.bobo.web;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    
    import com.bobo.util.ArrayMap;
    import com.bobo.util.Constant;
    import com.bobo.util.JsonHelper;
    
    import android.content.SharedPreferences;
    
    /**
     * 这个类主要用于发送网络请求
     * @author lixueyi
     *
     */
    public class SendRequest {
        //向网络发送get请求,并且将请求到的数据进行解析,保存在sp文件中
        //这里使用一个数字进行标识,不同的表示代表调用不同的json解析方法
        public List<Map<String,Object>> sendGetRequest(String url,SharedPreferences sp,String key,int type){
            ArrayMap arrayMap=new ArrayMap();
            HttpGet get=new HttpGet(url);
            try {
                HttpResponse response=new DefaultHttpClient().execute(get);
                if(response.getStatusLine().getStatusCode()==200){
                    String result=EntityUtils.toString(response.getEntity());
                    if(result!=null&&!result.equals("")){
                         new JsonHelper().parse(arrayMap,result,sp,key,type);
                        
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                
            } 
             return arrayMap.list;
            
        }
    }

    三、JSONHelper类,主要实现json字符串的解析

    package com.bobo.util;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    import com.bobo.util.Constant;
    
    import android.content.SharedPreferences;
    
    public class JsonHelper {
    
        public void parse(ArrayMap arrayMap, String result, SharedPreferences sp,
                String key, int type) {
            switch (type) {
            case Constant.GET_LEVEL_INFO:
                // 获取信息
                getLevelInfo(arrayMap, result, sp, key);
                break;
            }
        }
        
    
        // 这个是用来解析level信息的
        private void getLevelInfo(ArrayMap arrayMap, String result,
                SharedPreferences sp, String key) {
            // 这里进行leveljson文件的解析
            JSONObject jsonObject = null;
            JSONArray jsonArray = null;
    
            try {
    
                jsonObject = new JSONObject(result);
    
                jsonArray = jsonObject.getJSONArray("datalist");
                for (int i = 0; i < jsonArray.length(); i++) {
                    Map<String, Object> map2 = new HashMap<String, Object>();
                    JSONObject jsonOb = (JSONObject) jsonArray.opt(i);
                    map2.put("level", jsonOb.getString("level"));
                    map2.put("time", jsonOb.getString("time"));
                    if (i == jsonArray.length() - 1) {
                        map2.put("aqi", jsonOb.getString("aqi"));
                        map2.put("major", jsonOb.getString("major"));
                        map2.put("no2", jsonOb.getString("no2"));
                        map2.put("pm10", jsonOb.getString("pm10"));
                        map2.put("pm25", jsonOb.getString("pm25"));
                        map2.put("so2", jsonOb.getString("so2"));
    
                    }
                    arrayMap.list.add(map2);
                }
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("cnname", jsonObject.getString("cnname"));
                map.put("date", jsonObject.getString("date"));
                arrayMap.list.add(map);
                FileManager.saveInfo(arrayMap, sp, key);
    
            } catch (Exception e) {
                e.printStackTrace();
    
            }
    
        }
    }


    四、FileManager类,完成对象的存储和读取,使用到了BASE64编解码的技术

    package com.bobo.util;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.StreamCorruptedException;
    import java.util.List;
    import java.util.Map;
    
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.util.Base64;
    
    public class FileManager {
        /**
         * 将对象进行base64编码之后保存
         * 
         * @param arrayMap
         * @param sp
         * @param key
         */
        public static void saveInfo(ArrayMap arrayMap, SharedPreferences sp,
                String key) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            try {
                ObjectOutputStream os = new ObjectOutputStream(baos);
                os.writeObject(arrayMap);
                // 之后进行base64编码
                String base64String = Base64.encodeToString(baos.toByteArray(),
                        Base64.DEFAULT);
                System.out.println(base64String);
                // 将这个字符串保存到sp文件中
                Editor editor = sp.edit();
                editor.putString(key, base64String);
                editor.commit();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public static List<Map<String, Object>> readInfo(SharedPreferences sp,
                String key) {
            ArrayMap arrayMap=null;
            String base64String = sp.getString(key, null);
            // 进行base64解码
            String result = new String(Base64.decode(base64String, Base64.DEFAULT));
            // ByteArrayInputStream is=new
            // ByteArrayInputStream(base64String.getBytes());
            // 将解码之后的字符串转换为对象
            ByteArrayInputStream is = new ByteArrayInputStream(Base64.decode(
                    base64String, Base64.DEFAULT));
            try {
                ObjectInputStream ois = new ObjectInputStream(is);
                arrayMap = (ArrayMap) ois.readObject();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            return arrayMap.list ;
        }
    }
  • 相关阅读:
    xml技术基础
    apue第七章学习总结
    自然连接,外部连接,内连接,左右连接的区别与介绍(转)
    apue第六章学习总结
    《深入PHP与jQuery开发》读书笔记——Chapter2
    apue第四章学习总结
    《深入PHP与jQuery开发》读书笔记——Chapter1
    我所使用的一个通用的Makefile模板
    PHP的输出缓冲区(转)
    Nginx 日志按月分割
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3030016.html
Copyright © 2011-2022 走看看