Android数据存储之JSON数据解析(输出部分)

JSON是一种比Xml更简洁的数据格式,它免去了xml许多不必要的标签信息,使得数据储存更高效。在Android中已经集成了JSON包,可以直接使用。

Andriod的JSON解析需要掌握最主要的两个类:JSONObject 与 JSONArray

主Activity组件等准备,为了简单直观,就设置一个按钮:

View Code
public class MainActivity extends Activity {

    private Button saveJSONBtn = null;    
    private File file = null;
    
    // 准备好要输出的数据
    private String feature  = "smart";
    private String favorite = "moka";
    private String[] names = new String[] {"shuai1", "shuai2", "shuai3"};
    private int[] id = new int[] {1, 2, 3};
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        saveJSONBtn = (Button) findViewById(R.id.saveJSONBtn);
        saveJSONBtn.setOnClickListener(new SaveJSONListener());
        
    }

 

按钮的绑定事件:

View Code
    private class SaveJSONListener implements OnClickListener {

        @Override
        public void onClick(View v) {
             // 首先调用检测储存环境的方法
            if(!MainActivity.this.CheckEnvironment()) {
                return;
            } else {
                generateJSON();
                Toast.makeText(MainActivity.this, "成功输出JSON数据", Toast.LENGTH_SHORT);
            }
        }
        
    }

 

检测储存环境环境方法:

View Code
     /* 检测储存环境是否配置正常,并设置文件存放路径 */
    private boolean CheckEnvironment() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            file = new File(Environment.getExternalStorageDirectory().toString() + File.separator + "documents"
                    + File.separator + "JSON.txt");
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            return true;
        } else {
            return false;
        }
    }

 

生成JSON数据文件的方法:

View Code
    private void generateJSON() {
        FileOutputStream fos = null;
        PrintStream ps = null;
        try {
            // 准备输出流
            fos = new FileOutputStream(file);
            ps = new PrintStream(fos);
            
            // 实例化一个JSONObject, 放入单个数据
            JSONObject myJSONData = new JSONObject();
            myJSONData.put("feature", "smart");
            myJSONData.put("favorite", "moka");
            // 实例化一个myJSONArray,放入数组数据
            JSONArray myJSONArray = new JSONArray();
            for (int i = 0; i < names.length; i++) {
                JSONObject temp = new JSONObject();
                temp.put("name", names[i]);
                temp.put("id", id[i]);
                myJSONArray.put(temp);
            }
            myJSONData.put("info", myJSONArray);
            
            // 输出JSON格式数据
            ps.print(myJSONData.toString());
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ps != null || fos != null) {
                    ps.close();
                    ps = null;
                    fos.close();
                    fos = null;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
}

 

生成文件:

posted @ 2013-05-10 10:50  来杯冰镇魔卡  阅读(481)  评论(0编辑  收藏  举报