網絡請求到的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 ;
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM