네트워크에서 요청한 json 대상base64 저장

15965 단어 base64
개발에서 1을 발견하면 네트워크에 요청을 보내고 json 문자열-->2를 얻어 요청한 json 문자열을 해석한다(일반적으로 List> 대상으로 해석할 수 있다)-->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>>();



}

2. 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;

        

    }

}

3. 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();



        }



    }

}

4. 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 ;

    }

}

 

좋은 웹페이지 즐겨찾기