1.将Json存储到Sdcard上面

 

   
   
   
   
  1. package com.demo.lc;  
  2.  
  3. import java.io.File;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.io.PrintStream;  
  7.  
  8. import org.json.JSONArray;  
  9. import org.json.JSONException;  
  10. import org.json.JSONObject;  
  11.  
  12. import android.content.Context;  
  13. import android.os.Environment;  
  14. import android.widget.Toast;  
  15.  
  16. public class WriteSdcard {  
  17.     /**存储数据的文件*/ 
  18.     private File file = null;  
  19.     /**文件输出流对象*/ 
  20.     private FileOutputStream fos = null;  
  21.     /**上下文对象*/ 
  22.     private Context context = null;  
  23.     /**文件的路径*/ 
  24.     private static final String PATH = "JSON";  
  25.     /**打印流对象*/ 
  26.     private PrintStream print = null;  
  27.     /**字符串用于存储员工信息*/ 
  28.     private String content = null;  
  29.     /**存储一条员工信息的JSONObject对象*/ 
  30.     private JSONObject data1 = null;  
  31.     /**存储一条员工信息的JSONObject对象*/ 
  32.     private JSONObject data2 = null;  
  33.     /**将所有员工信息存储起来的JSONArray对象*/ 
  34.     private JSONArray array = null;  
  35.     /**两条员工信息*/ 
  36.     private String[][] member1 = new String[][] { { "id""B09060236" },  
  37.             { "name""李超" }, { "age""21" }, { "company""Tecent" } };  
  38.     private String[][] member2 = new String[][] { { "id""B09060237" },  
  39.             { "name""郭俊峰" }, { "age""20" }, { "company""HuaWei" } };  
  40.     //构造方法  
  41.     public WriteSdcard(Context context) {  
  42.         super();  
  43.         this.context = context;  
  44.     }  
  45.  
  46.     //将员工信息以Json数据的形式写入到Sdcard中  
  47.     public void writerInfo() {  
  48.         //判读Sdcard是否存在  
  49.         if (!(Environment.getExternalStorageState()  
  50.                 .equals(Environment.MEDIA_MOUNTED))) {  
  51.             Toast.makeText(context, "SDcard不存在", Toast.LENGTH_SHORT);  
  52.         } else {  
  53.             this.file = new File(Environment.getExternalStorageDirectory()  
  54.                     + File.separator + WriteSdcard.PATH + File.separator  
  55.                     + "json.txt");  
  56.             //判读是否存在JSON目录  
  57.             if (!file.getParentFile().exists()) {  
  58.                 this.file.getParentFile().mkdirs();  
  59.             }  
  60.             //将员工信息写入到sdcard规定 的目录中:mnt/sdcard/JSON/json.txt  
  61.             try {  
  62.                 this.fos = new FileOutputStream(file);  
  63.                 this.print = new PrintStream(fos);  
  64.                 this.print.print(prepareContent());  
  65.             } catch (FileNotFoundException e) {  
  66.                 System.out.println("文件不存在");  
  67.             }  
  68.  
  69.         }  
  70.     }  
  71.       
  72.       
  73.     private String prepareContent() {  
  74.         //实例化JSONObject对象data1  
  75.         this.data1 = new JSONObject();  
  76.         //实例化JSONObject对象data2  
  77.         this.data2 = new JSONObject();  
  78.         //实例化JSONArray对象array  
  79.         this.array = new JSONArray();  
  80.         //将员工1的信息写入到data1中  
  81.         put(member1, data1);  
  82.         //将员工2的信息写入到data2中  
  83.         put(member2, data2);  
  84.         //将data1,data2写入到array中  
  85.         this.array.put(data1);  
  86.         this.array.put(data2);  
  87.         //将JSONArray对象转化为String对象  
  88.         this.content = this.array.toString();  
  89.         return content;  
  90.     }  
  91.  
  92.     private void put(String[][] member, JSONObject object) {  
  93.         //将员工信息的各个属性放入的JSONObect中  
  94.         for (int x = 0; x < member.length; x++) {  
  95.             try {  
  96.                 object.put(member[x][0], member[x][1]);  
  97.             } catch (JSONException e) {  
  98.                 e.printStackTrace();  
  99.             }  
  100.         }  
  101.     }  
  102. }  
   效果如下:
    

Json数据解析_第1张图片

2. 将sdcard上的数据显示以ListView的形式显示到手机上
 
   
   
   
   
  1. package com.demo.lc;  
  2.  
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.IOException;  
  7. import java.util.ArrayList;  
  8. import java.util.HashMap;  
  9. import java.util.List;  
  10. import java.util.Map;  
  11. import java.util.Scanner;  
  12.  
  13. import org.json.JSONArray;  
  14. import org.json.JSONException;  
  15.  
  16. import android.app.Activity;  
  17. import android.os.Bundle;  
  18. import android.os.Environment;  
  19. import android.view.View;  
  20. import android.view.View.OnClickListener;  
  21. import android.widget.Button;  
  22. import android.widget.ListView;  
  23. import android.widget.SimpleAdapter;  
  24.  
  25. public class JSONProjectActivity extends Activity implements OnClickListener {  
  26.     /**存储数据的适配器*/ 
  27.     private SimpleAdapter adapter = null;  
  28.     /**存储数据的list*/ 
  29.     private List> list = null;  
  30.     /**显示数据的ListView*/ 
  31.     private ListView lv = null;  
  32.     /**按钮*/ 
  33.     private Button btn_read = null;  
  34.     /**读取文件对象*/ 
  35.     private FileInputStream fis = null;  
  36.     /**文件扫描对象*/ 
  37.     private Scanner sc = null;  
  38.     /**将信息写入到Sdcard上面*/ 
  39.     private WriteSdcard ws = null;   
  40.     /**字符串缓冲对象*/ 
  41.     private StringBuffer sb = new StringBuffer();  
  42.  
  43.     @Override 
  44.     public void onCreate(Bundle savedInstanceState) {  
  45.         super.onCreate(savedInstanceState);  
  46.         super.setContentView(R.layout.main);  
  47.         //实例化组件Button,ListView  
  48.         this.btn_read = (Button) super.findViewById(R.id.btn_read);  
  49.         this.lv = (ListView) super.findViewById(R.id.lv_list);  
  50.         //实例化ws对象  
  51.         this.ws = new WriteSdcard(this);  
  52.         //为按钮注册事件监听对象  
  53.         this.btn_read.setOnClickListener(this);  
  54.  
  55.     }  
  56.  
  57.     public void onClick(View v) {  
  58.         //将数据写入到Sdcard上面  
  59.         this.ws.writerInfo();  
  60.         //将数据从Sdcard上面读出并以ListView的形式显示  
  61.         read();  
  62.     }  
  63.  
  64.     private void read() {  
  65.         //实例化list对象  
  66.         this.list = new ArrayList>();  
  67.         try {  
  68.             //实例化文件输入流对象  
  69.             fis = new FileInputStream(new File(  
  70.                     Environment.getExternalStorageDirectory() + File.separator  
  71.                             + "JSON" + File.separator + "json.txt"));  
  72.             //实例化sc对象,用于文件的读取  
  73.             sc = new Scanner(fis);  
  74.             //将文件信息读取到sb中  
  75.             while (sc.hasNext()) {  
  76.                 sb.append(sc.next());  
  77.             }  
  78.             //关闭文件输入流和扫描流  
  79.             fis.close();  
  80.             sc.close();  
  81.         } catch (FileNotFoundException e) {  
  82.  
  83.             e.printStackTrace();  
  84.  
  85.         } catch (IOException e) {  
  86.             // TODO Auto-generated catch block  
  87.             e.printStackTrace();  
  88.         }  
  89.         try {  
  90.             //将sb转化为JSONArray对象  
  91.             JSONArray jsa = new JSONArray(sb.toString());  
  92.             //对获得的JSON数据进行解析  
  93.             for (int x = 0; x < jsa.length(); x++) {  
  94.                 Map map = new HashMap();  
  95.                 map.put("id", jsa.getJSONObject(x).getString("id"));  
  96.                 map.put("age", jsa.getJSONObject(x).getString("age"));  
  97.                 map.put("name", jsa.getJSONObject(x).getString("name"));  
  98.                 map.put("company", jsa.getJSONObject(x).getString("company"));  
  99.                 this.list.add(map);  
  100.             }  
  101.         } catch (JSONException e) {  
  102.             e.printStackTrace();  
  103.         }  
  104.         //实例化SimpleAdapter适配器  
  105.         this.adapter = new SimpleAdapter(thisthis.list, R.layout.listinfo,  
  106.                 new String[] { "id""name""age""company" },  
  107.                 new int[] { R.id.tv_id, R.id.tv_name, R.id.tv_age,  
  108.                         R.id.tv_company });  
  109.         this.adapter  
  110.                 .setDropDownViewResource(android.R.layout.simple_list_item_checked);  
  111.         //为ListView设置设配器  
  112.         this.lv.setAdapter(adapter);  
  113.  
  114.     }  

 效果如下:

  

Json数据解析_第2张图片