zoukankan      html  css  js  c++  java
  • 安卓数据存储(未完)

    1.使用SharedPreferences以及SharedPreferences.Editor

      a) 使用步骤

        i. 使用getSharedPreferences()生成SharedPreferences对象,该方法需要指定两个参数

          1. 存储数据的xml文件名,保存在 /data/data/包名/shared_prefs目录下

          2. 操作模式(MODE_WORLD_READABLE可读,MODE_WORLD_WRITEABLE可写,MODE_PRIVATE私有)

        ii. 使用SharedPreferences.EditorputXxxx()方法保存数据

        iii. 使用SharedPreferences.Editorcommit()方法将数据保存到xml文件中

        iv. 使用SharedPreferencesgetXxxx()方法获得相应的数据

      b) 代码

    <Button
    
            android:id="@+id/prefs"
    
            android:layout_width="fill_parent"
    
            android:layout_height="wrap_content"
    
            android:text="Click me to save SharedPreferences"
    
            android:onClick="save"
    
    />
    public class MyActivity extends Activity {
    
     
    
        //声明一个SharedPreferences对象
    
        private SharedPreferences sharedPrefenerces;
    
        private Button button;
    
        private String txt;
    
        private static int i = 0;
    
        /**
    
         * Called when the activity is first created.
    
         */
    
        @Override
    
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.main);
    
            //生成SharedPreferences对象,私有模式,文件名为prefs.xml
    
            sharedPrefenerces = getSharedPreferences("prefs", Context.MODE_PRIVATE);
    
            button = (Button) findViewById(R.id.prefs);
    
            String temp = sharedPrefenerces.getString("prf",null);
    
            if(temp != ""){
    
                button.setText(temp);
    
            }
    
        }
    
        public void save(View view){
    
            //获取SharedPreferences.Editor对象
    
            SharedPreferences.Editor editor = sharedPrefenerces.edit();
    
            txt = "you have click + " + i++ + "times";
    
            editor.putString("prf",txt);
    
            if(editor.commit()){
    
                Toast.makeText(MyActivity.this, txt,Toast.LENGTH_SHORT).show();
    
            }
    
        }
    
    }

     

     

    2.使用文件流

      a) 安卓使用流操作文件的方法与Java类似,通过Context.openFileOutput()方法获取FileOutputStream,通过Context.openFileInput()获取FileInputStream

      b) 这两个方法都需要参数,其中openFileInput()只需要文件名,而openFileOutput()还需要多一个模式

      c) 此处的模式相对于1中多了一个MODE_APPEND 表示可添加

      d) 文件保存在data/data/fils目录下

      代码:

     

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
            >
    
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="文件名"
                android:id="@+id/textView"/>
    
        <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/file_name"
                android:layout_below="@+id/textView"
                android:layout_alignParentStart="true"/>
    
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="文件内容"
                android:layout_below="@+id/file_name"
                android:layout_alignParentStart="true"
                android:layout_marginTop="28dp"
                android:id="@+id/textView2"/>
    
        <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/file_content"
                android:layout_below="@+id/textView2"
                android:layout_alignParentStart="true"/>
    
        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="保存数据"
                android:id="@+id/save_data"
                android:layout_marginTop="42dp"
                android:layout_below="@+id/file_content"
                android:layout_alignParentStart="true"
                android:onClick="saveData"/>
    
        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="读取数据"
                android:id="@+id/read_data"
                android:layout_alignTop="@+id/save_data"
                android:layout_centerHorizontal="true"
                android:onClick="readData"/>
    </RelativeLayout>

     

    public class MyActivity extends Activity {
    
        private EditText filename;
        private EditText content;
        private Button savedata;
        private Button readdata;
        /**
         * Called when the activity is first created.
         */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //init
            filename = (EditText) findViewById(R.id.file_name);
            content = (EditText) findViewById(R.id.file_content);
            savedata = (Button) findViewById(R.id.save_data);
            readdata = (Button) findViewById(R.id.read_data);
        }
    
        //存储数据的方法
        public void saveData(View view){
            //获取保存的文件名称,内容
            String str_filename = filename.getText().toString();
            String str_content = content.getText().toString();
            //判断文件名与内容是否为空
            if (str_content == "" || str_filename == ""){
                Toast.makeText(MyActivity.this, "文件名或者文件内容不能为空,请重新填写", Toast.LENGTH_SHORT).show();
            }else {
                try {
                    write2disk(str_filename,str_content);
                    Toast.makeText(MyActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    Toast.makeText(MyActivity.this, "保存失败", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
        //读取数据的方法
        public void readData(View view) {
            //获取保存的文件名称,内容
            String str_filename = filename.getText().toString();
            //判断文件名与内容是否为空
            if (str_filename == "") {
                Toast.makeText(MyActivity.this, "文件名不能为空,请重新填写", Toast.LENGTH_SHORT).show();
            } else {
                try {
                    String str_content = readfromdisk(str_filename);
                    content.setText(str_content);
                } catch (Exception e) {
                    Toast.makeText(MyActivity.this, "文件读取失败!请检查文件名后重试", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
        //将指定的内容写入文件
        public void write2disk(String file, String content) throws Exception {
            //获取文件操作流,私有模式
            FileOutputStream fout = openFileOutput(file, MODE_PRIVATE);
            //写入
            fout.write(content.getBytes());
            //关闭流
            fout.close();
        }
    
        //读取指定文件
        public String readfromdisk(String file) throws Exception {
            //获取文件操作流,私有模式
            FileInputStream input = openFileInput(file);
            //字节缓存数组
            byte[] buffer = new byte[input.available()];
            //将内容读取到缓存
            input.read(buffer);
            //关闭流
            input.close();
    
            //此处不能用toString()方法,返回的不是字符串
            return new String(buffer);
        }
    }

     

     

     

     

     

     

     

     

  • 相关阅读:
    JAVA_SWT 事件的四种写法
    JAVA静态数据的初始化;
    Centos 安装freesurfer fsl matlab 等软件---转自网络
    ROC和AUC————摘在网络
    转自网络用LIBSVM进行回归预测的粗浅认识————————作者师梦
    fmri格式相关简介————转自网络
    fMRI数据分析处理原理及方法————转自网络
    装机、做系统必备:秒懂MBR和GPT分区表____转载网络
    【转】Thymeleaf自动在URL后加了;jsessionid=的问题
    LeetCode (85): Maximal Rectangle [含84题分析]
  • 原文地址:https://www.cnblogs.com/q812717031/p/3578187.html
Copyright © 2011-2022 走看看