16_Android的数据存储_ SharedPreference、XML和JSON

1. Android读写首选项

1.1 SharedPreferences

  SharedPreferences 是一种轻型的数据存储方式,它的本质是基于XML文件存储Key-Value键值对数据,通常用来存储一些简单的配置信息,其存储位置在/data/data/<包名>/shared_prefs目录下。

  SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。本例程讲解 SharedPreference 数据的读写操作。

 1 package com.example.sharedpreference;
 2
 3 import android.app.Activity;
 4 import android.content.SharedPreferences;
 5 import android.content.SharedPreferences.Editor;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.widget.EditText;
 9 import android.widget.Toast;
10
11 public class MainActivity extends Activity {
12
13     static final String KEY = "MyValue";
14     private EditText et;
15     SharedPreferences preferences;
16     Editor editor;
17
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22
23         et = (EditText) findViewById(R.id.et);
24         preferences = getPreferences(Activity.MODE_PRIVATE);
25         editor = preferences.edit();
26
27         findViewById(R.id.btnRead).setOnClickListener(new View.OnClickListener() {
28
29             @Override
30             public void onClick(View v) {
31                 //如果键值对不存在,就会将其改为第二个参数。
32                 String in = preferences.getString(KEY, "当前数值不存在");
33                 Toast.makeText(getApplicationContext(), in, Toast.LENGTH_SHORT).show();
34             }
35         });
36
37         findViewById(R.id.btnWrite).setOnClickListener(new View.OnClickListener() {
38
39             @Override
40             public void onClick(View v) {
41                 editor.putString(KEY, et.getText().toString());
42                 if (editor.commit()) {
43                     Toast.makeText(getApplicationContext(), "写入成功", Toast.LENGTH_SHORT).show();
44                 }
45             }
46         });
47     }
48
49 }

MainActivity

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/container"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     tools:context="com.example.sharedpreference.MainActivity"
 8     tools:ignore="MergeRootFrame" >
 9
10     <EditText
11         android:id="@+id/et"
12         android:layout_width="fill_parent"
13         android:layout_height="wrap_content"
14         android:ems="10" >
15
16         <requestFocus />
17     </EditText>
18
19     <Button
20         android:id="@+id/btnRead"
21         android:layout_width="fill_parent"
22         android:layout_height="wrap_content"
23         android:text="读取数据" />
24
25     <Button
26         android:id="@+id/btnWrite"
27         android:layout_width="fill_parent"
28         android:layout_height="wrap_content"
29         android:text="写入数据" />
30
31 </LinearLayout>

activity_main.xml

1.2 SharedPreference

  SharedPreference是纯操作,如果需要配合界面的话,则需要额外的开发,PreferenceActivity提供了一种快速创建配置首选项界面的方法,并且自动在后台存储首选项数据。

 1 package com.example.preferenceactivity;
 2
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7
 8 public class MainActivity extends Activity {
 9
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_main);
14
15         findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
16
17             @Override
18             public void onClick(View v) {
19                 startActivity(new Intent(getApplicationContext(),
20                         MyPreferenceActivity.class));
21             }
22         });
23     }
24
25 }

MainActivity

 1 package com.example.preferenceactivity;
 2
 3 import android.os.Bundle;
 4 import android.preference.CheckBoxPreference;
 5 import android.preference.EditTextPreference;
 6 import android.preference.ListPreference;
 7 import android.preference.PreferenceActivity;
 8 import android.preference.PreferenceManager;
 9 import android.widget.Toast;
10
11 public class MyPreferenceActivity extends PreferenceActivity{
12
13     //checkboxPreference
14     //listPreference
15     //edittextPreference
16
17     PreferenceManager manager;
18     CheckBoxPreference checkBoxPreference;
19     ListPreference listPreference;
20     EditTextPreference editTextPreference;
21
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         addPreferencesFromResource(R.xml.myprefrence);
26
27         manager = getPreferenceManager();
28         checkBoxPreference = (CheckBoxPreference) manager.findPreference("checkbox");
29         Toast.makeText(getApplicationContext(), "当前的状态为:" + checkBoxPreference.isChecked(), Toast.LENGTH_SHORT).show();
30
31         listPreference = (ListPreference) manager.findPreference("list");
32         Toast.makeText(getApplicationContext(), "当前的状态为:" + listPreference.getValue() + "\n开发环境为:" + listPreference.getEntry(), Toast.LENGTH_SHORT).show();
33
34         editTextPreference = (EditTextPreference) manager.findPreference("text");
35         Toast.makeText(getApplicationContext(), "你输入的内容为:" + editTextPreference.getText(), Toast.LENGTH_SHORT).show();
36     }
37 }

MyPreferenceActivity

 1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/container"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     tools:context="com.example.preferenceactivity.MainActivity"
 7     tools:ignore="MergeRootFrame" >
 8
 9     <Button
10         android:id="@+id/btn"
11         android:layout_width="fill_parent"
12         android:layout_height="wrap_content"
13         android:text="修改首选项" />
14
15 </FrameLayout>

activity_main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3
 4     <string-array name="entries">
 5         <item>Java</item>
 6         <item>Swift</item>
 7         <item>C#</item>
 8     </string-array>
 9     <string-array name="values">
10         <item>Eclips</item>
11         <item>Xcode</item>
12         <item>Visual Studio</item>
13     </string-array>
14
15 </resources>

mylistpreference.xml(values文件中)

2. SQLite数据库的数据读取和写入

  1 package com.example.usingsqlite;
  2
  3 import android.app.ListActivity;
  4 import android.content.ContentValues;
  5 import android.database.Cursor;
  6 import android.database.sqlite.SQLiteDatabase;
  7 import android.os.Bundle;
  8 import android.support.v4.widget.SimpleCursorAdapter;
  9 import android.view.View;
 10 import android.widget.Button;
 11 import android.widget.EditText;
 12
 13 public class MainActivity extends ListActivity {
 14
 15     private SimpleCursorAdapter adapter;
 16     private EditText etName, etSex;
 17     private Button btnAdd;
 18     private Db db;
 19     private SQLiteDatabase dbRead, dbWrite;
 20
 21     @Override
 22     protected void onCreate(Bundle savedInstanceState) {
 23         super.onCreate(savedInstanceState);
 24         setContentView(R.layout.activity_main);
 25
 26         etName = (EditText) findViewById(R.id.etName);
 27         etSex = (EditText) findViewById(R.id.etSex);
 28         btnAdd = (Button) findViewById(R.id.btnAdd);
 29
 30         btnAdd.setOnClickListener(new View.OnClickListener() {
 31
 32             @Override
 33             public void onClick(View v) {
 34                 ContentValues cv = new ContentValues();
 35                 cv.put("name", etName.getText().toString());
 36                 cv.put("sex", etSex.getText().toString());
 37
 38                 dbWrite.insert("user", null, cv);
 39                 refreshListView();
 40             }
 41         });
 42
 43         // getListView().setOnItemLongClickListener(new
 44         // OnItemLongClickListener() {
 45         //
 46         // @Override
 47         // public boolean onItemLongClick(AdapterView<?> parent, View view,
 48         // final int position, long id) {
 49         //
 50         // Cursor c = adapter.getCursor();
 51         // c.moveToPosition(position);
 52         //
 53         // //在数据库中的ID
 54         // int itemId = c.getInt(c.getColumnIndex("_id"));
 55         // dbWrite.delete("user", "_id=?", new String[]{itemId+""});
 56         // refreshListView();
 57         //
 58         //
 59         // // new
 60         // AlertDialog.Builder(MainActivity.this).setTitle("提醒").setMessage("您确定要删除该项吗?").setNegativeButton("取消",
 61         // null).setPositiveButton("确定", new DialogInterface.OnClickListener() {
 62         // //
 63         // // @Override
 64         // // public void onClick(DialogInterface dialog, int which) {
 65         // //
 66         // // }
 67         // // }).show();
 68         //
 69         //
 70         // return true;
 71         // }
 72         // });
 73
 74         Db db = new Db(this);
 75         dbRead = db.getReadableDatabase();
 76         dbWrite = db.getWritableDatabase();
 77
 78         adapter = new SimpleCursorAdapter(this, R.layout.user_list_cell, null,
 79                 new String[] { "name", "sex" }, new int[] { R.id.tvName,
 80                         R.id.tvSex });
 81         setListAdapter(adapter);
 82
 83         refreshListView();
 84
 85         // Db db = new Db(this);
 86         // //写入几条元素
 87         // SQLiteDatabase dbWrite = db.getWritableDatabase();
 88         // ContentValues cv = new ContentValues();
 89         // cv.put("name", "小张");
 90         // cv.put("sex", "男");
 91         // dbWrite.insert("user", null, cv);
 92         //
 93         // cv = new ContentValues();
 94         // cv.put("name", "小红");
 95         // cv.put("sex", "女");
 96         // dbWrite.insert("user", null, cv);
 97         // dbWrite.close();
 98         //
 99         // SQLiteDatabase dbRead = db.getReadableDatabase();
100         // Cursor c = dbRead.query("user", null, null, null, null,null, null);
101         //
102         // while (c.moveToNext()) {
103         // String name = c.getString(c.getColumnIndex("name"));
104         // String sex = c.getString(c.getColumnIndex("sex"));
105         // System.out.println(String.format("name = %s  sex = %s", name, sex));
106         // }
107     }
108
109     private void refreshListView() {
110         Cursor c = dbRead.query("user", null, null, null, null, null, null);
111         adapter.changeCursor(c);
112     }
113
114 }

MainActivity

 1 package com.example.usingsqlite;
 2
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteOpenHelper;
 6
 7 public class Db extends SQLiteOpenHelper {
 8
 9     public Db(Context context) {
10         // 第四个变量是版本,onUpgrade
11         super(context, "db", null, 1);
12
13     }
14
15     @Override
16     public void onCreate(SQLiteDatabase db) {
17         // 创建了一个用户表
18         db.execSQL("CREAT TABLE user("
19                 + "_id INTEGER PRIMARY KEY AUTOINCREMENT,"
20                 + "name TEXT DEFAULT \"\"," + "sex TEXT DEFAULT \"\")");
21     }
22
23     @Override
24     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
25         // TODO Auto-generated method stub
26
27     }
28
29 }

Db

3. 操作XML数据

  XML,即可扩展标记语言(Extensible Markup Language),标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

3.1 读取与解析XML数据

  使用Android平台自带的API加载XML数据,并且按照XML的结构将所有数据解析出来。

 1 package com.example.textxml;
 2
 3 import java.io.IOException;
 4 import javax.xml.parsers.DocumentBuilder;
 5 import javax.xml.parsers.DocumentBuilderFactory;
 6 import javax.xml.parsers.ParserConfigurationException;
 7 import org.w3c.dom.Document;
 8 import org.w3c.dom.Element;
 9 import org.w3c.dom.NodeList;
10 import org.xml.sax.SAXException;
11
12 import android.app.Activity;
13 import android.os.Bundle;
14 import android.widget.TextView;
15
16 public class MainActivity extends Activity {
17
18     TextView text;
19
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_main);
24         text = (TextView) findViewById(R.id.text);
25
26         try {
27
28             DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
29             DocumentBuilder builder = builderFactory.newDocumentBuilder();
30             Document document = builder.parse(getAssets().open("languages.xml"));
31             //获取根元素
32             Element element = document.getDocumentElement();
33             NodeList list = element.getElementsByTagName("lan");
34             for (int i = 0; i < list.getLength(); i++) {
35                 Element lan = (Element) list.item(i);
36                 text.append(lan.getAttribute("id") + "\n");
37                 text.append(lan.getElementsByTagName("name").item(0).getTextContent() + "\n");
38                 text.append(lan.getElementsByTagName("ide").item(0).getTextContent() + "\n");
39             }
40
41         } catch (ParserConfigurationException e) {
42             e.printStackTrace();
43         } catch (SAXException e) {
44             // TODO Auto-generated catch block
45             e.printStackTrace();
46         } catch (IOException e) {
47             // TODO Auto-generated catch block
48             e.printStackTrace();
49         }
50     }
51 }

MainActivity

 1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/container"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     tools:context="com.example.textxml.MainActivity"
 7     tools:ignore="MergeRootFrame" >
 8
 9     <TextView
10         android:id="@+id/text"
11         android:layout_width="fill_parent"
12         android:layout_height="fill_parent"
13         android:text="ready" />
14
15 </FrameLayout>

activity_main.xml

  assets文件夹中的languages.xml文件的内容:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <Languages cat="it">
 3     <lan id="1">
 4         <name>Java</name>
 5         <ide>Eclipse</ide>
 6     </lan>
 7     <lan id="2">
 8         <name>Swift</name>
 9         <ide>Xcode</ide>
10     </lan>
11     <lan id="3">
12         <name>C#</name>
13         <ide>Visual Studio</ide>
14     </lan>
15 </Languages>

language.xml

3.2 生成与输出XML数据

  使用Android平台自带的API创建符合XML规范的数据,并且将XML数据输出。

 1 package com.example.textxml;
 2
 3 import java.io.StringWriter;
 4
 5 import javax.xml.parsers.DocumentBuilder;
 6 import javax.xml.parsers.DocumentBuilderFactory;
 7 import javax.xml.parsers.ParserConfigurationException;
 8 import javax.xml.transform.Transformer;
 9 import javax.xml.transform.TransformerConfigurationException;
10 import javax.xml.transform.TransformerException;
11 import javax.xml.transform.TransformerFactory;
12 import javax.xml.transform.dom.DOMSource;
13 import javax.xml.transform.stream.StreamResult;
14
15 import org.w3c.dom.Document;
16 import org.w3c.dom.Element;
17 import android.app.Activity;
18 import android.os.Bundle;
19 import android.widget.TextView;
20
21 public class MainActivity extends Activity {
22
23     TextView text;
24
25     @Override
26     protected void onCreate(Bundle savedInstanceState) {
27         super.onCreate(savedInstanceState);
28         setContentView(R.layout.activity_main);
29         text = (TextView) findViewById(R.id.text);
30
31         try {
32
33             DocumentBuilderFactory builderFactory = DocumentBuilderFactory
34                     .newInstance();
35             DocumentBuilder builder = builderFactory.newDocumentBuilder();
36             // Document document =
37             // builder.parse(getAssets().open("languages.xml"));
38             // //获取根元素
39             // Element element = document.getDocumentElement();
40             // NodeList list = element.getElementsByTagName("lan");
41             // for (int i = 0; i < list.getLength(); i++) {
42             // Element lan = (Element) list.item(i);
43             // text.append(lan.getAttribute("id") + "\n");
44             // text.append(lan.getElementsByTagName("name").item(0).getTextContent() + "\n");
45             // text.append(lan.getElementsByTagName("ide").item(0).getTextContent() + "\n");
46             // }
47
48             Document newxml = builder.newDocument();
49             Element languages = newxml.createElement("Languages");
50             languages.setAttribute("cat", "it");
51
52             Element lan1 = newxml.createElement("lan");
53             lan1.setAttribute("id", "1");
54             Element name1 = newxml.createElement("name");
55             name1.setTextContent("Java");
56             Element ide1 = newxml.createElement("ide");
57             name1.setTextContent("Eclipse");
58             lan1.appendChild(name1);
59             lan1.appendChild(ide1);
60             languages.appendChild(lan1);
61
62             Element lan2 = newxml.createElement("lan");
63             lan2.setAttribute("id", "2");
64             Element name2 = newxml.createElement("name");
65             name1.setTextContent("Swift");
66             Element ide2 = newxml.createElement("ide");
67             name1.setTextContent("Xcode");
68             lan1.appendChild(name2);
69             lan1.appendChild(ide2);
70             languages.appendChild(lan2);
71
72             newxml.appendChild(languages);
73
74             TransformerFactory transformerFactory = TransformerFactory
75                     .newInstance();
76             Transformer transformer = transformerFactory.newTransformer();
77             transformer.setOutputProperty("encoding", "UTF-8");
78             StringWriter sw = new StringWriter();
79             transformer.transform(new DOMSource(newxml), new StreamResult(sw));
80
81             text.setText(sw.toString());
82
83         } catch (ParserConfigurationException e) {
84             e.printStackTrace();
85         } catch (TransformerConfigurationException e) {
86             // TODO Auto-generated catch block
87             e.printStackTrace();
88         } catch (TransformerException e) {
89             // TODO Auto-generated catch block
90             e.printStackTrace();
91         }
92     }
93 }

MainActivity

4. 操作JSON数据

  JSON:JavaScript 对象表示法(JavaScript Object Notation)。独立于语言和平台,比 XML 更小、更快,更易解析。

4.1 JSON(JavaScript Object Notation) 定义:

  一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。– Json.org

4.2 JSON的结构:

  (1) Name/Value Pairs(无序的):类似所熟知的Keyed list、 Hash table、Disctionary和Associative array。在Android平台中同时存在另外一个类 "Bundle",某种程度上具有相似的行为。

  (2) Array(有序的):一组有序的数据列表。

  对象是一个无序的Name/Value Pairs集合。{ name:value , name:value , name:value .... }

  例子:{ "name":"小猪","age":20 }

4.3读取JSON格式数据

  Android平台自带了JSON解析的相关API,可以将文件、输入流中的数据转化为JSON对象,然后从对象中获取JSON保存的数据内容。下图是logcat中的内容。

 1 package com.example.testjson;
 2
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.UnsupportedEncodingException;
 7
 8 import org.json.JSONArray;
 9 import org.json.JSONException;
10 import org.json.JSONObject;
11
12 import android.app.Activity;
13 import android.os.Bundle;
14
15 public class MainActivity extends Activity {
16
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21
22         try {
23             InputStreamReader isr = new InputStreamReader(getAssets().open(
24                     "test.json"), "UTF-8");
25             BufferedReader br = new BufferedReader(isr);
26             String line;
27             StringBuilder builder = new StringBuilder();
28             while ((line = br.readLine()) != null) {
29                 builder.append(line);
30             }
31             br.close();
32             isr.close();
33             JSONObject root = new JSONObject(builder.toString());
34             System.out.println("cat=" + root.getString("cat"));
35             JSONArray array = root.getJSONArray("languages");
36             for (int i = 0; i < array.length(); i++) {
37                 JSONObject lan = array.getJSONObject(i);
38                 System.out.println("-----------------------");
39                 System.out.println("id=" + lan.getInt("id"));
40                 System.out.println("name=" + lan.getString("name"));
41                 System.out.println("ide=" + lan.getString("ide"));
42             }
43
44         } catch (UnsupportedEncodingException e) {
45             e.printStackTrace();
46         } catch (IOException e) {
47             e.printStackTrace();
48         } catch (JSONException e) {
49             e.printStackTrace();
50         }
51
52     }
53
54 }

MainActivity

  assets文件夹中test.json文件的内容:

1 {
2     "languages":[
3         {"id":1,"ide":"Eclipse","name":"Java"},
4         {"id":2,"ide":"Xcode","name":"Swift"},
5         {"id":3,"ide":"Visual Studio","name":"C#"}
6     ],
7     "cat":"it"
8 }

test.json

4.4创建JSON格式数据

  Android平台自带了JSON构造的相关API,可以轻松地构造JSON对象、JSON数组,并且为他们赋值,而且很容易将JSON对象转换为字符串用于传播。

 1 package com.example.testjson;
 2
 3 import org.json.JSONArray;
 4 import org.json.JSONException;
 5 import org.json.JSONObject;
 6
 7 import android.app.Activity;
 8 import android.os.Bundle;
 9
10 public class MainActivity extends Activity {
11
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16
17 //        try {
18 //            InputStreamReader isr = new InputStreamReader(getAssets().open(
19 //                    "test.json"), "UTF-8");
20 //            BufferedReader br = new BufferedReader(isr);
21 //            String line;
22 //            StringBuilder builder = new StringBuilder();
23 //            while ((line = br.readLine()) != null) {
24 //                builder.append(line);
25 //            }
26 //            br.close();
27 //            isr.close();
28 //            JSONObject root = new JSONObject(builder.toString());
29 //            System.out.println("cat=" + root.getString("cat"));
30 //            JSONArray array = root.getJSONArray("languages");
31 //            for (int i = 0; i < array.length(); i++) {
32 //                JSONObject lan = array.getJSONObject(i);
33 //                System.out.println("-----------------------");
34 //                System.out.println("id=" + lan.getInt("id"));
35 //                System.out.println("name=" + lan.getString("name"));
36 //                System.out.println("ide=" + lan.getString("ide"));
37 //            }
38 //
39 //        } catch (UnsupportedEncodingException e) {
40 //            e.printStackTrace();
41 //        } catch (IOException e) {
42 //            e.printStackTrace();
43 //        } catch (JSONException e) {
44 //            e.printStackTrace();
45 //        }
46
47 try {
48
49             JSONObject root = new JSONObject();
50             root.put("cat", "it");
51
52             //{"id":1,"ide":"Eclipse","name":"Java"},
53             JSONObject lan1 = new JSONObject();
54             lan1.put("id", 1);
55             lan1.put("ide", "Eclipse");
56             lan1.put("name", "Java");
57
58             //{"id":2,"ide":"Xcode","name":"Swift"},
59             JSONObject lan2 = new JSONObject();
60             lan2.put("id", 2);
61             lan2.put("ide", "Xcode");
62             lan2.put("name", "Swift");
63
64             //{"id":3,"ide":"Visual Studio","name":"C#"}
65             JSONObject lan3 = new JSONObject();
66             lan3.put("id", 3);
67             lan3.put("ide", "Visual Studio");
68             lan3.put("name", "C#");
69
70             JSONArray array = new JSONArray();
71             array.put(lan1);
72             array.put(lan2);
73             array.put(lan3);
74
75             root.put("languages", array);
76
77             System.out.println(root.toString());
78
79         } catch (JSONException e) {
80             // TODO Auto-generated catch block
81             e.printStackTrace();
82         }
83
84     }
85
86 }

MainActivity

时间: 2024-10-07 14:12:03

16_Android的数据存储_ SharedPreference、XML和JSON的相关文章

android数据存储_概述

andorid提供了六种方式存储永久的数据,根据需求来使用不同的存储方式,例如是否对于应用程序时私有还是公有,数据存储的空间等. 六个存储方式: 使用SharedPreferences: 这种方式是使用键值对来存储私有的数据 内部存储: 在设备的内存中存储私有数据 外部存储: 在SD卡或其他的外部存储来存储公有数据 SQLite数据库: 在私有的数据库中存储私有的结构花数据 网络存储: 在网络服务中存储数据 私有数据一般情况下不能被访问,但是可以通过content provider来进行对数据的

android数据存储_内部存储

源码下载(免下载积分):下载 你可以直接存储数据到内部存储中,默认情况下,文件存储到内部存储中是私有的,不能被 其他程序访问,当卸载应用程序,这些文件会被移除. 创建并写入数据可以有两种方法: 使用java中的相关的方法, 使用android.content中的相关方法,  调用 openFileOutput(),并返回FileOutputStream对象 调用FileOutputStream对象的write()方法 关闭流 读文件也是基本相同的方式. 在读文件有一点小技巧:如果想在编译时保存一

iOS 应用数据存储方式(XML属性列表-plist)

iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数据库的语句,将对象拆开存储) 5.Core Data(对象型的数据库,把内部环节屏蔽) 二.应用沙盒 每个iOS应用都有?己的应?沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应?必须待在?己的沙盒里,其他应用不能访问该

android数据存储_外部存储

源码下载(免下载积分):下载 外部存储并不是一定可以访问的,例如外部存储挂载到电脑上是,或者是SD Card作为外部存储,被移除是,因此在访问外部存储时,一定要保证外部存储是可以获得的.判断外部存储是否已经挂载到了手机上可以这样判断: //判断外部存储是否可以访问,并且可以读写 private boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Enviro

ios应用数据存储方式(XML属性列表-plist)

ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数据库的语句,将对象拆开存储) 5.Core Data(对象型的数据库,把内部环节屏蔽) 二.应用沙盒 每个iOS应用都有?己的应?沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应?必须待在?己的沙盒里,其他应用不能访问该沙

iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist

iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数据库的语句,将对象拆开存储) 5.Core Data(对象型的数据库,把内部环节屏蔽) 二.应用沙盒 每个iOS应用都有?己的应?沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应?必须待在?己的沙盒里,其

iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)

一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数据库的语句,将对象拆开存储) 5.Core Data(对象型的数据库,把内部环节屏蔽) 二.应用沙盒 每个iOS应用都有?己的应?沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应?必须待在?己的沙盒里,其他应用不能访问该沙盒(提示:在IOS8中已经开放访问) 应?沙盒的文件系

android数据存储之sharedPreference

Android的数据存储共分为5种 ①SharedPreferences (当前应用的路径下) ②内部存储 (当前应用的路径下) ③外部存储 -sdCard ④Sqlite   Android自带的一个轻量级数据库 ⑤网络存储 连接到服务器 ----将数据上传到服务器 其实归根结底,为一种,都以文件形式保存的!先说第一种如何用SharedPreferences保存数据 sharedPreferences用于保存简单的数据类型  (ps:没人会不知道,就不写了) 存储的步骤: 1 SharedPr

两种常用的数据交换格式:XML和JSON

不同编程语言之间的数据传输,需要一种通用的数据交换格式,它需要简洁.易于数据储存.快速读取,且独立于各种编程语言.我们往往传输的是文本文件,比如我们都知道的csv(comma seperated values)格式. 而在互联网上,传输数据往往有很多层次的结构,并非矩阵形态(m×n)那么简单.常见的有xml.json.yaml等等.其中,yaml是"yaml ain't markup language"的递归缩写,即各单词首字母组合恰为第一个词:而yaml也可理解成yet anothe