共享preference可在一个应用程序的各个组件之间共享。
在MainActivity里面创建并保存preference:
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; |
12 | public class MainActivity extends Activity { |
13 | public static final String MYPREFS= "mySharedPreference" ; |
17 | /** Called when the activity is first created. */ |
19 | public void onCreate(Bundle savedInstanceState) { |
20 | super .onCreate(savedInstanceState); |
21 | setContentView(R.layout.main); |
22 | et=(EditText)findViewById(R.id.myEditText); |
23 | bt=(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 ); |
33 | protected void savePreference(){ |
34 | int mode=Activity.MODE_PRIVATE; |
36 | SharedPreferences mySharedPreference=getSharedPreferences(MYPREFS,mode); |
38 | SharedPreferences.Editor editor=mySharedPreference.edit(); |
40 | editor.putBoolean( "isTrue" , true ); |
41 | f=Float.parseFloat(et.getText().toString()); |
42 | editor.putFloat( "lastFloat" ,f); |
在SecActivity里面读取preference
03 | import android.app.Activity; |
04 | import android.content.SharedPreferences; |
05 | import android.os.Bundle; |
06 | import android.widget.TextView; |
08 | public class SecActivity extends Activity{ |
13 | public void onCreate(Bundle outState){ |
14 | super .onCreate(outState); |
15 | setContentView(R.layout.main2); |
16 | tv=(TextView)findViewById(R.id.tv); |
19 | tv.setText(Float.toString(lastFloat)); |
22 | public void loadPreference(){ |
23 | int mode=Activity.MODE_PRIVATE; |
25 | SharedPreferences mySharedPreference=getSharedPreferences(MainActivity.MYPREFS,mode); |
27 | isTrue=mySharedPreference.getBoolean( "isTrue" , false ); |
28 | lastFloat=mySharedPreference.getFloat( "lastFloat" ,0f); |


以上讲的方法可以在一个应用程序的不同Activity之间共享变量,如果只是想保存一个活动的状态,而不需要和其他活动共享,则可以使用Activity.getPreference()。
getPreferences()只需要一个mode参数,而getSharedPreferences()还需要另外指定名称。
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; |
12 | public class MainActivity extends Activity { |
16 | /** Called when the activity is first created. */ |
18 | public void onCreate(Bundle savedInstanceState) { |
19 | super .onCreate(savedInstanceState); |
20 | setContentView(R.layout.main); |
21 | et=(EditText)findViewById(R.id.myEditText); |
23 | SharedPreferences mySharedPreference=getPreferences(Activity.MODE_PRIVATE); |
25 | f=mySharedPreference.getFloat( "lastFloat" ,0f); |
26 | et.setText(Float.toString(f)); |
27 | bt=(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 ); |
38 | protected void savePreference(){ |
39 | int mode=Activity.MODE_PRIVATE; |
41 | SharedPreferences mySharedPreference=getPreferences(mode); |
43 | SharedPreferences.Editor editor=mySharedPreference.edit(); |
45 | f=Float.parseFloat(et.getText().toString()); |
46 | editor.putFloat( "lastFloat" ,f); |
当从其他活动跳转回MainActivity时,EditText中的值是之前输入的值。
通过重写onSaveInstanceState来保存活动实例的值,把修改过的Bundle传递给超类的处理函数。
当活动已完成它的生命周期但还没有显示的结束时,就会触发onSaveInstanceState这个函数。这样就可以保证在用户一次会话的生命周期中保持一致的活动状态。
如果活动被强制重启,那么已保存的Bundle就会被传递到onRestoreInstanceState和onCreate方法中。
注意只有当活动变为不活动状态的时候才会调用onRestoreInstanceState,而当活动通过调用finish或用户按返回键而被关闭时是不会调用onRestoreInstanceState的。
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; |
11 | public class SecActivity extends Activity{ |
14 | private static final String TEXTVIEW_STATE_KEY= "TEXTVIEW_STATE_KEY" ; |
16 | public void onSaveInstanceState(Bundle outState){ |
18 | tv=(EditText)findViewById(R.id.sectv); |
20 | outState.putString(TEXTVIEW_STATE_KEY,tv.getText().toString()); |
21 | super .onSaveInstanceState(outState); |
24 | public void onCreate(Bundle icicle){ |
25 | super .onCreate(icicle); |
26 | setContentView(R.layout.main2); |
27 | tv=(EditText)findViewById(R.id.sectv); |
29 | if (icicle!= null &&icicle.containsKey(TEXTVIEW_STATE_KEY)) |
30 | text=icicle.getString(TEXTVIEW_STATE_KEY); |
32 | bt=(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 ); |

在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(返回当前应用程序创建的文件列表的字符串数组)。