• android-数据持久化


    动态文件

    String FILE_NAME = "tempfile.tmp";
                    try {
                        
                        //
                        FileInputStream fis = openFileInput(FILE_NAME);
                        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
                        BufferedReader br = new BufferedReader(isr);
                        StringBuffer sb = new StringBuffer();
                        while (br.readLine() != null) {
                            sb.append(br.readLine()+"
    ");
                        }
                        System.out.println(sb.toString());
                        
                        //
                        FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);//要让其它应用组件也能访问则用MODE_WORLD_WRITEABLE
                        File file = new File(FILE_NAME);
                        if (!file.exists()) {
                            byte[] os = "write file".getBytes("UTF-8");//"这个例子测试文件写".getBytes("GB2312");
                            fos.write(os);
                        }
                        
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

    静态文件资源

    //这个id是在gen的R.java中生成id. 项目层次结构为res/raw里
                        InputStream is = getResources().openRawResource(R.raw.info);
                        InputStreamReader isr;
                        isr = new InputStreamReader(is, "UTF-8");
                        BufferedReader bfr = new BufferedReader(isr);
                        String inString = "";
                        while ((inString = bfr.readLine()) != null) {
                            Log.i(TAG, inString);
                        }

    首选项

    int minimumMagnitude = 0;
    boolean autoUpdate = false;
    int updateFreq = 0;
    
    //
    Context context = getApplicationContext();
          SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    
          minimumMagnitude = Integer.parseInt(prefs.getString(Preferences.PREF_MIN_MAG, "0"));
          updateFreq = Integer.parseInt(prefs.getString(Preferences.PREF_UPDATE_FREQ, "0"));
          autoUpdate = prefs.getBoolean(Preferences.PREF_AUTO_UPDATE, false);
    
    
    //
    Context context = getApplicationContext();
        prefs = PreferenceManager.getDefaultSharedPreferences(context);
    Editor editor = prefs.edit();
        editor.putBoolean(PREF_AUTO_UPDATE, autoUpdateChecked);
        editor.putInt(PREF_UPDATE_FREQ, updateIndex);
        editor.putInt(PREF_MIN_MAG, minMagIndex);
        editor.commit(); 

    Preferences界面是继承PreferencesActivity,则只需要:

    @res/xml/userpreferences.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen
      xmlns:android="http://schemas.android.com/apk/res/android">
      <CheckBoxPreference
        android:key="PREF_AUTO_UPDATE"
        android:title="Auto refresh"
        android:summary="Select to turn on automatic updating" 
        android:defaultValue="true"
      />                        
      <ListPreference
       android:key="PREF_UPDATE_FREQ"
       android:title="Refresh frequency"
       android:summary="Frequency at which to refresh earthquake list"
       android:entries="@array/update_freq_options"
       android:entryValues="@array/update_freq_values"
       android:dialogTitle="Refresh frequency"
       android:defaultValue="60"
      />
      <ListPreference
        android:key="PREF_MIN_MAG"
        android:title="Minimum magnitude"
        android:summary="Select the minimum magnitude earthquake to report"
        android:entries="@array/magnitude_options"
        android:entryValues="@array/magnitude"
        android:dialogTitle="Magnitude"
        android:defaultValue="3"
      />
    </PreferenceScreen>
    
    
    @PreferencesActivity
    
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.userpreferences);    
      } 

    否则,需要在Preferences中手动设置控件的状态值,包括ok和cancel键所执行的动作回调。

    监听preference的改变

    @Activity
    
    public void onCreate(Bundle icicle) {
        Context context = getApplicationContext();
        SharedPreferences prefs =  PreferenceManager.getDefaultSharedPreferences(context);
        prefs.registerOnSharedPreferenceChangeListener(this);   
      } 
    
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    }

    从activity的preference中读写

    private ListView myListView;
    private EditText myEditText;
    private static final String TEXT_ENTRY_KEY = "TEXT_ENTRY_KEY";
    private static final String ADDING_ITEM_KEY = "ADDING_ITEM_KEY";
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        // Inflate your view
        setContentView(R.layout.main);
          
        // Get references to UI widgets
        myListView = (ListView)findViewById(R.id.myListView);
        myEditText = (EditText)findViewById(R.id.myEditText);
    
        restoreUIState();
      }
    
    private void restoreUIState() {
        // Get the activity preferences object.
        SharedPreferences settings = getPreferences(0);
    
        // Read the UI state values, specifying default values.
        String text = settings.getString(TEXT_ENTRY_KEY, "");
        Boolean adding = settings.getBoolean(ADDING_ITEM_KEY, false);
    
        // Restore the UI to the previous state.
        if (adding) {
          addNewItem();
          myEditText.setText(text);
        }
      }
    
    @Override
      protected void onPause() {
        super.onPause();
        
        // Get the activity preferences object.
        SharedPreferences uiState = getPreferences(0);
        // Get the preferences editor.
        SharedPreferences.Editor editor = uiState.edit();
    
        // Add the UI state preference values.
        editor.putString(TEXT_ENTRY_KEY, myEditText.getText().toString());
        editor.putBoolean(ADDING_ITEM_KEY, addingNew);
        // Commit the preferences.
        editor.commit();
      }

    状态

    private static final String SELECTED_INDEX_KEY = "SELECTED_INDEX_KEY";
    
    @Override
      public void onSaveInstanceState(Bundle outState) {
        outState.putInt(SELECTED_INDEX_KEY, myListView.getSelectedItemPosition());
    
        super.onSaveInstanceState(outState);
      }
    
      @Override
      public void onRestoreInstanceState(Bundle savedInstanceState) {
        int pos = -1;
    
        if (savedInstanceState != null)
          if (savedInstanceState.containsKey(SELECTED_INDEX_KEY))
            pos = savedInstanceState.getInt(SELECTED_INDEX_KEY, -1);
    
        myListView.setSelection(pos);
      }
  • 相关阅读:
    对于高并发短连接造成Cannot assign requested address解决方法
    virtualbox迁移已建虚机存储磁盘方法
    httpd:RSA certificate configured for SERVER does NOT include an ID which matches the server name
    解决服务不断重启挂掉问题
    tbb静态库编译
    su和su
    ubuntu18.04 mariadb start失败
    如何修复“sshd error: could not load host key”
    [LeetCode]Gas Station
    Java多态的一些陷阱
  • 原文地址:https://www.cnblogs.com/mingfung-liu/p/4528675.html
Copyright © 2020-2023  润新知