数据共享

共享preference可在一个应用程序的各个组件之间共享。

在MainActivity里面创建并保存preference:

01 package zcy.org;
02
03 import android.app.Activity;
04 import android.content.Intent;
05 import android.content.SharedPreferences;
06 import android.os.Bundle;
07 import android.view.View;
08 import android.view.View.OnClickListener;
09 import android.widget.Button;
10 import android.widget.EditText;
11
12 public class MainActivity extends Activity {
13 public static final String MYPREFS="mySharedPreference";
14EditText et;
15Button bt;
16 float f;
17/** Called when the activity is first created. */
18@Override
19 public void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21setContentView(R.layout.main);
22et=(EditText)findViewById(R.id.myEditText);
23bt=(Button)findViewById(R.id.myButton);
24 bt.setOnClickListener(new OnClickListener(){
25 public void onClick(View arg0) {
26 Intent intent=new Intent(MainActivity.this,SecActivity.class);
27savePreference();
28startActivity(intent);
29}
30});
31}
32
33 protected void savePreference(){
34 int mode=Activity.MODE_PRIVATE;
35//创建或检索共享的preference对象
36SharedPreferences mySharedPreference=getSharedPreferences(MYPREFS,mode);
37//找一个编辑器来修改共享的preference
38SharedPreferences.Editor editor=mySharedPreference.edit();
39//在共享的preference对象中存储新的原语类型
40 editor.putBoolean("isTrue",true);
41f=Float.parseFloat(et.getText().toString());
42 editor.putFloat("lastFloat",f);
43//提交更改
44editor.commit();
45}
46}

在SecActivity里面读取preference

01 package zcy.org;
02
03 import android.app.Activity;
04 import android.content.SharedPreferences;
05 import android.os.Bundle;
06 import android.widget.TextView;
07
08 public class SecActivity extends Activity{
09 private TextView tv;
10 boolean isTrue;
11 float lastFloat;
12@Override
13 public void onCreate(Bundle outState){
14 super.onCreate(outState);
15setContentView(R.layout.main2);
16tv=(TextView)findViewById(R.id.tv);
17loadPreference();
18 if(isTrue){
19tv.setText(Float.toString(lastFloat));
20}
21}
22 public void loadPreference(){
23 int mode=Activity.MODE_PRIVATE;
24//获取存储的preference
25SharedPreferences mySharedPreference=getSharedPreferences(MainActivity.MYPREFS,mode);
26//检索保存的值
27 isTrue=mySharedPreference.getBoolean("isTrue",false);
28 lastFloat=mySharedPreference.getFloat("lastFloat",0f);
29}
30
31}

以上讲的方法可以在一个应用程序的不同Activity之间共享变量,如果只是想保存一个活动的状态,而不需要和其他活动共享,则可以使用Activity.getPreference()。

getPreferences()只需要一个mode参数,而getSharedPreferences()还需要另外指定名称。

01 package zcy.org;
02
03 import android.app.Activity;
04 import android.content.Intent;
05 import android.content.SharedPreferences;
06 import android.os.Bundle;
07 import android.view.View;
08 import android.view.View.OnClickListener;
09 import android.widget.Button;
10 import android.widget.EditText;
11
12 public class MainActivity extends Activity {
13EditText et;
14Button bt;
15 float f;
16/** Called when the activity is first created. */
17@Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20setContentView(R.layout.main);
21et=(EditText)findViewById(R.id.myEditText);
22//获取存储的preference
23SharedPreferences mySharedPreference=getPreferences(Activity.MODE_PRIVATE);
24//检索保存的值
25 f=mySharedPreference.getFloat("lastFloat",0f);
26et.setText(Float.toString(f));
27bt=(Button)findViewById(R.id.myButton);
28 bt.setOnClickListener(new OnClickListener(){
29 public void onClick(View arg0) {
30 Intent intent=new Intent(MainActivity.this,SecActivity.class);
31//在活动跳转之前保存本活动的preference
32savePreference();
33startActivity(intent);
34}
35});
36}
37
38 protected void savePreference(){
39 int mode=Activity.MODE_PRIVATE;
40//创建或检索活动的preference对象
41SharedPreferences mySharedPreference=getPreferences(mode);
42//找一个编辑器来修改共享的preference
43SharedPreferences.Editor editor=mySharedPreference.edit();
44//在共享的preference对象中存储新的原语类型
45f=Float.parseFloat(et.getText().toString());
46 editor.putFloat("lastFloat",f);
47//提交更改
48editor.commit();
49}
50}

当从其他活动跳转回MainActivity时,EditText中的值是之前输入的值。

通过重写onSaveInstanceState来保存活动实例的值,把修改过的Bundle传递给超类的处理函数。

当活动已完成它的生命周期但还没有显示的结束时,就会触发onSaveInstanceState这个函数。这样就可以保证在用户一次会话的生命周期中保持一致的活动状态。

如果活动被强制重启,那么已保存的Bundle就会被传递到onRestoreInstanceState和onCreate方法中。

注意只有当活动变为不活动状态的时候才会调用onRestoreInstanceState,而当活动通过调用finish或用户按返回键而被关闭时是不会调用onRestoreInstanceState的。

01 package zcy.org;
02
03 import android.app.Activity;
04 import android.content.Intent;
05 import android.os.Bundle;
06 import android.view.View;
07 import android.view.View.OnClickListener;
08 import android.widget.Button;
09 import android.widget.EditText;
10
11 public class SecActivity extends Activity{
12 private Button bt;
13EditText tv;
14 private static final String TEXTVIEW_STATE_KEY="TEXTVIEW_STATE_KEY";
15@Override
16 public void onSaveInstanceState(Bundle outState){
17//检索View
18tv=(EditText)findViewById(R.id.sectv);
19//保存View的状态
20outState.putString(TEXTVIEW_STATE_KEY,tv.getText().toString());
21 super.onSaveInstanceState(outState);
22}
23@Override
24 public void onCreate(Bundle icicle){
25 super.onCreate(icicle);
26setContentView(R.layout.main2);
27tv=(EditText)findViewById(R.id.sectv);
28 String text="";
29 if(icicle!=null&&icicle.containsKey(TEXTVIEW_STATE_KEY))
30text=icicle.getString(TEXTVIEW_STATE_KEY);
31tv.setText(text);
32bt=(Button)findViewById(R.id.bt);
33 bt.setOnClickListener(new OnClickListener(){
34 public void onClick(View arg0) {
35 Intent intent=new Intent(SecActivity.this,MainActivity.class);
36startActivity(intent);
37}
38});
39}
40}

在SecActivity中输入“zcy”,如果紧接着重启应用程序,则直接进入SecActivity页面,并且EditText中还显示"zcy"。

而如果在SecActivity中按back按钮( 这时SecActivity就调用了finish())回到MainActivity,再从MainActivity进入SecActivity时,EditText中就为空了。

文件

除了标准的Java I/O类外,Android提供openFileInput和openFileOutput以简化对本地文件流的读写。这些方法只支持当前文件夹下的文件,指定文件时给出路径会抛出异常。

String FILE_NAME="tempfile";

FileOutputStream fos=openFileOutput(FILE_NAME,Context.MODE_PRIVATE);

FileInputStream fis=openFileInput(FILE_NAME);

Context.MODE_PRIVATE指明文件为当前应用程序私有,文件不存在时会创建,存在时会覆盖;

Context.MODE_APPEND追加的形式;

Context.MODE_WORLD_READABLE,Context.MODE_WORLD_WRITEABLE其他程序可访问。
将静态文件作为资源:

把外部文件放在res/raw下面

Resource myResource=getResources();

InputStream myFile=myResource.openRawResource(R.raw.filename);


Android还提供deleteFile(删除当前应用程序创建的文件)和fileList(返回当前应用程序创建的文件列表的字符串数组)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值