您的位置:首页 > 理论基础 > 计算机网络

网络请求到的json对象base64保存

2013-04-19 09:43 85 查看
在开发中,发现 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 ;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: