保存游戏数据 下文详解SQLite存储方式并把SQLite的数据库文件存储在SD卡中Word文件下载.docx
《保存游戏数据 下文详解SQLite存储方式并把SQLite的数据库文件存储在SD卡中Word文件下载.docx》由会员分享,可在线阅读,更多相关《保存游戏数据 下文详解SQLite存储方式并把SQLite的数据库文件存储在SD卡中Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
80·
90·
100·
110·
120·
130·
140·
150
1.<
?
xmlversion="
1.0"
encoding="
utf-8"
>
2.<
LinearLayoutxmlns:
android="
3.android:
orientation="
vertical"
android:
layout_width="
fill_parent"
4.android:
layout_height="
5.<
TextViewandroid:
6.android:
wrap_content"
text="
保存数据练习!
"
7.android:
textSize="
20sp"
textColor="
#ff0000"
id="
@+id/tv_title"
/>
8.<
9.android:
请输入帐号"
10.<
EditTextandroid:
11.android:
@+id/editText_Login"
12.android:
<
/EditText>
13.<
14.android:
请输入密码"
15.<
16.android:
@+id/editText_Password"
17.android:
18.<
Buttonandroid:
@+id/button_save"
19.android:
保存"
/Button>
20.<
@+id/button_load"
21.android:
取出数据"
22.android:
visibility="
invisible"
23.<
/LinearLayout>
先把xml文件放上来的原因是因为我在此篇中介绍的SharedPreference和文件存储(FIleInputStream/FileOutputStream),都共用此xml,很简单,两个textview两个editview以及两个button,这里就不多说了;
下面是SharedPreference的代码实现和详细讲解:
[java:
1./**
2.*@authorHimi
3.*@保存方式:
SharedPreference
4.*@注意:
SharedPreference可以跨程序包使用,多谢二楼童鞋提醒!
5.*@操作模式:
Context.MODE_PRIVATE:
新内容覆盖原内容
6.*Context.MODE_APPEND:
新内容追加到原内容后
7.*Context.MODE_WORLD_READABLE:
允许其他应用程序读取
8.*Context.MODE_WORLD_WRITEABLE:
允许其他应用程序写入,会覆盖原数据。
9.*/
10.publicclassMainActivityextendsActivityimplementsOnClickListener{
11.privateEditTextet_login,et_password;
12.privateButtonbtn_save;
13.privateTextViewtv_title;
14.privateSharedPreferencessp;
15.@Override
16.publicvoidonCreate(BundlesavedInstanceState){
17.super.onCreate(savedInstanceState);
18.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
19.WindowManager.LayoutParams.FLAG_FULLSCREEN);
20.this.requestWindowFeature(Window.FEATURE_NO_TITLE);
21.setContentView(R.layout.main);
22.btn_save=(Button)findViewById(R.id.button_save);
23.btn_save.setOnClickListener(this);
24.et_login=(EditText)findViewById(R.id.editText_Login);
25.et_password=(EditText)findViewById(R.id.editText_Password);
26.tv_title=(TextView)findViewById(R.id.tv_title);
27.//这里我们先调用getSharedPreferences()来实例化一个SharedPreferences,
28.//第二个参数是指:
操作模式(上面对各种操作模式已有解释)
29.sp=getSharedPreferences("
Setting_himi"
MODE_PRIVATE);
30./*
31.*下面代码是我们要在程序刚启动的时候我们来读取之前的数据,
32.*当然我们还没有保存任何数据所以肯定找不到!
33.*如果找不到也没关系会默认返回一个参数值,看下面的方法含义便知!
34.*/
35.sp.getString("
login"
"
);
36.//getString()类似哈希表,一个key一个volue,
37.//这个方法如果找不到对应的第一个参数(key),那么将以第二个参数作为此key的返回值
38.et_login.setText(sp.getString("
));
39.et_password.setText(sp.getString("
password"
40.}
41.@Override
42.publicvoidonClick(Viewv){
43.if(v==btn_save){
44.if(et_login.getText().toString().equals("
))
45.tv_title.setText("
请输入帐号!
46.elseif(et_password.getText().toString().equals("
47.tv_title.setText("
请输入密码!
48.else{
49.sp.edit()
50..putString("
et_login.getText().toString())
51..putString("
et_password.getText().toString())
52..commit();
53.//从sp.edit()开始进入编辑状态,直到commit()提交!
54.tv_title.setText("
保存成功!
可重新打开此程序,测试是否已经保存数据!
+
55."
/n(或者在'
FileExplorer'
窗口下-data-data-com.himi路径下"
56."
是否存在"
+"
了'
Setting_himi.xml'
)"
57.}
58.}
59.}
60.}
代码中的注释的很清楚了,比较简单,不多说了。
《文件存储OutputStream/InputStream》
1.适合游戏存储,能存储较大数据;
2.不仅能存储到系统中,也能存储到SD卡中!
如果童鞋们对SQL不太熟习的话那么选择此种方式最为合适的啦、嘿嘿
Stream数据流方式
4.*@注意1:
默认情况下,使用openFileOutput方法创建的文件只能被其调用的应用使用,
5.*其他应用无法读取这个文件,如果需要在不同的应用中共享数据;
6.*
7.*@注意2:
因为androidos内部闪存有限,所以适合保存较少的数据,当然我们也有解决的方法,
8.*就是把数据保存在SD开中,这样就可以了,后面我也会向大家讲解!
9.*
10.*@提醒1调用FileOutputStream时指定的文件不存在,Android会自动创建它。
11.*另外,在默认情况下,写入的时候会覆盖原文件内容,如果想把新写入的内
12.*容附加到原文件内容后,则可以指定其mode为Context.MODE_APPEND。
13.*
14.*@提醒2启动程序就初始化的时候一定要注意处理!
代码中有注释!
一定要仔细看!
15.*
16.*@提醒3这里我给大家讲两种方式,一种是原生态file流来写入/读入,
17.*另外一种是用Data流包装file流进行写入/读入其实用data流来包装进行操作;
18.*原因是:
包装后支持了更多的写入/读入操作,比如:
file流写入不支持
19.*writeUTF(Stringstr);
但是用Data包装后就会支持。
20.*
21.*@操作模式:
22.*Context.MODE_APPEND:
23.*Context.MODE_WORLD_READABLE:
24.*Context.MODE_WORLD_WRITEABLE:
25.*/
26.publicclassMainActivityextendsActivityimplementsOnClickListener{
27.privateEditTextet_login,et_password;
28.privateButtonbtn_save;
29.privateTextViewtv_title;
30.privateFileOutputStreamfos;
31.privateFileInputStreamfis;
32.privateDataOutputStreamdos;
33.privateDataInputStreamdis;
34.@Override
35.publicvoidonCreate(BundlesavedInstanceState){
36.Stringtemp=null;
37.super.onCreate(savedInstanceState);
38.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
39.WindowManager.LayoutParams.FLAG_FULLSCREEN);
40.this.requestWindowFeature(Window.FEATURE_NO_TITLE);
41.setContentView(R.layout.main);
42.btn_save=(Button)findViewById(R.id.button_save);
43.btn_save.setOnClickListener(this);
44.et_login=(EditText)findViewById(R.id.editText_Login);
45.et_password=(EditText)findViewById(R.id.editText_Password);
46.tv_title=(TextView)findViewById(R.id.tv_title);
47.try{
48.//openFileInput不像sharedPreference中
49.//getSharedPreferences的方法那样找不到会返回默认值,
50.//这里找不到数据文件就会报异常,所以finally里关闭流尤为重要!
!
51.if(this.openFileInput("
save.himi"
)!
=null){
52.//--------------单纯用file来读入的方式-----------------
53.//fis=this.openFileInput("
54.//ByteArrayOutputStreambyteArray=new
55.//ByteArrayOutputStream();
56.//byte[]buffer=newbyte[1024];
57.//intlen=0;
58.//while((len=fis.read(buffer))>
0){
59.//byteArray.write(buffer,0,len);
60.//}
61.//temp=byteArray.toString();
62.//--------------用data流包装后的读入的方式------------
63.fis=this.openFileInput("
//备注1
64.dis=newDataInputStream(fis);
65.et_login.setText(dis.readUTF());
66.et_password.setText(dis.readUTF());
67.//这里也是在刚启动程序的时候去读入存储的数据
68.//读的时候要注意顺序;
例如我们写入数据的时候
69.//先写的字符串类型,我们也要先读取字符串类型,一一对应!
70.}
71.}catch(FileNotFoundExceptione){
72.//TODOAuto-generatedcatchblock
73.e.printStackTrace();
74.}catch(IOExceptione){
75.//TODOAuto-generatedcatchblock
76.e.printStackTrace();
77.}finally{
78.//在finally中关闭流!
因为如果找不到数据就会异常我们也能对其进行关闭操作;
79.try{
80.if(this.openFileInput("
81.//这里也要判断,因为找不到的情况下,两种流也不会实例化。
82.//既然没有实例化,还去调用close关闭它,肯定"
空指针"
异常!
83.fis.close();
84.}
85.}catch(FileNotFoundExceptione){
86.//TODOAuto-generatedcatchblock
87.e.printStackTrace();
88.}catch(IOExceptione){
89.//TODOAuto-generatedcatchblock
90.e.printStackTrace();
91.}
92.}
93.}
94.@Override
95.publicvoidonClick(Viewv){
96.if(Environment.getExternalStorageState()!
97.//这个方法在试探终端是否有sdcard!
98.Log.v("
Himi"
有SD卡"
99.}
100.if(v==btn_save){
101.if(et_login.getText().toString().equals("
102.tv_title.setText("
103.elseif(et_password.getText().toString().equals("
104.tv_title.setText("
105.else{
106.try{
107.//------单纯用file来写入的方式--------------
108.//fos=newFileOutputStream(f);
109.//fos.write(et_login.getText().toString().getBytes());
110.//fos.write(et_password.getText().toString().getBytes());
111.//------data包装后来写入的方式--------------
112.fos=this.openFileOutput("
//备注2
113.dos=newDataOutputStream(fos);
114.dos.writeUTF(et_login.getText().toString());
115.dos.writeUTF(et_password.getText().toString());
116.tv_title.setText("
可重新打开此程序,测试是"
117."
否已经保存数据!
118."
窗口下-data-data-com.himi-files路径下"
119."
是否存在了'
save.himi'
120.}catch(FileNotFoundExceptione){
121.//TODOAuto-generatedcatchblock
122.e.printStackTrace();