网络请求到的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 ;

    }

}

 

 

你可能感兴趣的:(base64)