zoukankan      html  css  js  c++  java
  • Android面试准备 第二天 第五例 数据存储

    參考:http://blog.csdn.net/lmj623565791/article/details/24015867

    5、Activity用SharedPreferences保存数据,大小有木有限制?

    个人理解:SharedPreferences是哪种存储数据的方式居然记不清楚了,个人印象中在第一行代码中,介绍了三种数据存储的方式。记得包括SharedPreferences,还有通过IO流把数据存储到手机本地文件下,仅仅记得SQLite数据库存储的方式。只是它们的使用方式已经忘干净了。

    所以学习编程对我来说是背书嘛?还是编程有些固定的规则或者思路,供我有迹可循的背书。假定我默认了编程是思想的一种训练的,真的想知道学习编程和未学习对思考是否有本质的影响。

    标准答案:这个真心查不到。

    二次理解:我须要把数据存储的相关知识点再进行一次学习,试图通过反复记忆的方式探索对我个人思考是否有有效的帮组。比方反复多次以后我更深刻的记住了怎么使用相关方法。甚至更加奇妙的我能够举一反三,能更加高速的学习相似的内容。我眼下悲观的觉得,学习Android知识很多其它是知道提供哪些功能,熟悉它怎么使用,怎么更加的灵活的使用组装出符合要求的软件,至于为什么提供了这些对象和方法,我想很多其它的时候是由于Google在宏观层面,依据总体框架设计的须要而来,菜鸟的我仅仅能是盲人摸象。

    知识点巩固:

    依据第一行代码第六章 数据存储全方案,具体解释持久化技术,Android提供了三种存储数据的方式:

    1、文件存储。

    2、SharedPreference存储。

    3、SQLite数据库存储

    当中关于文件存储和SharedPreference存储,导致我记忆混乱的原因,大概是这两个存储方式的原理和使用方式差点儿是一样的,都会在手机指定文件夹下生成一个文件,而差别则是文件存储原封不动把你的内容拷贝文件里;而SharedPreference存储要求使用键值对的方式去存储数据,而且系统会依据键值对的内容。生成格式化的xml文件,这样的方式对于程序猿来说。首先xml是一种规范的文本形式。能够非常方便的读取和形成共享,所以我预计大部分开发都会选择后面这样的方式。


    一、文件存储:

    仅仅要记住一个方法,即openFileOutput(Filename,Mode),由Context提供,參数有两个。第一个參数是文件名称。它不须要指定路径,由于Android默认会在指定路线下生成该文件;第二个參数事实上是设置项,分为MODE_PRIVATE和MODE_APPEND,就是推断当程序运行时发现该名称的文件已经存在时,是直接覆盖该文件,还是在该文件内容基础上追加新的内容。最后openFileOutput方法返回一个字符输出流(FileOutputStream)。

    代码实例:

    UIActivity.xml:

    package com.noodles.uipractice;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    import java.io.BufferedWriter;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    
    public class UIActivity extends AppCompatActivity implements View.OnClickListener {
    
        /**
         * 1、把控件对象设置为成员变量,一般学习教程里面都是这样做的,
         * 我感觉从JAVA的语言的特性来说,这样做变量的生命周期更长。
         * 不会由于创建它的函数运行完成后消失
         */
        private EditText editText;
    
        private Button btnSave;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ui);
    
            /**
             * 2、获取控件的对象的引用
             */
            editText = (EditText) findViewById(R.id.edit_text);
            btnSave = (Button) findViewById(R.id.btn_save);
    
            /**
             * 3、给button定义事件。点击后把editText中内容保存下来。

    */ btnSave.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_save: String text = editText.getText().toString(); if ("".equals(text)) { Toast.makeText(this, "文本内容为空", Toast.LENGTH_SHORT).show(); } else { BufferedWriter bw = null; try { FileOutputStream fos = openFileOutput("data", MODE_PRIVATE); bw = new BufferedWriter(new OutputStreamWriter(fos)); bw.write(text); } catch (java.io.IOException e) { e.printStackTrace(); } finally { try { if(bw != null) { bw.close(); } } catch (IOException e) { e.printStackTrace(); } } } break; default:break; } } }

    activity_ui.xml:

    <?

    xml version="1.0" encoding="utf-8"?

    > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Save" /> </LinearLayout>

    保存页面:

    文件路径:


    文件内容:


    二、SharedPreference存储。

    1、获取SharedPreference对象。三种方式:

    • Context的getSharedPreference(),接收两个參数。第一个就是文件名称,第二个模式有MODE_PRIVATE和MODE_MULTI_PROCESS,第1个參数表示仅仅有本程序能够对该文件进行读写。第2个參数表示多个程序能够对该文件进行读写。

    • Activity的getPreference(),它接收一个操作模式參数。会以当前活动的类名为文件名称,在活动中应该是两个方法都能够用,差别就是你需不须要自己定义文件名称。第三个方法同理,由于静态方法,通过类名调用。在不论什么类中都能够调用。所以仅仅是文件名称的差别吧。

    • 通过PreferenceManager类中getDefaultSharedPreference()方法。这是静态方法,自己主动使用应用程序的包名作为文件名称。
    吐槽:为什么通过方法调用的方式返回一个对象。而不是new去创建。这大概是由于所谓的设计模式的原因,但对于这些设计模式的优点,我如今没办法去了解,导致我仅仅能记住它是这样用。这反而添加一个菜鸟学习的困扰。
    2、调用SharedPreference对象的edit()方法返回一个SharedPreference.Editor对象。它应该是SharedPreference的内部类。
    3、调用SharedPreference.Editor的putXXX方法,该方法接收两个參数以键值对的方式。存储不同类型的数据。XXX指详细数据类型。
    4、最后调用commit方法提交内容。
    package com.noodles.uipractice;
    
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class UIActivity extends AppCompatActivity implements View.OnClickListener {
    
    
        private EditText editText;
    
        private Button btnSave,btnRead;
    
        private TextView textView;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ui);
    
            /**
             * 2、获取控件的对象的引用
             */
            editText = (EditText) findViewById(R.id.edit_text);
            textView = (TextView) findViewById(R.id.text_view);
            btnSave = (Button) findViewById(R.id.btn_save);
            btnRead = (Button) findViewById(R.id.btn_read);
    
            /**
             * 3、给button定义事件,点击后把editText中内容保存下来。
             */
            btnSave.setOnClickListener(this);
            btnRead.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            SharedPreferences sharedPreferences = getSharedPreferences("data", MODE_PRIVATE);
            switch (v.getId()) {
                case R.id.btn_save:
                    String text = editText.getText().toString();
                    if ("".equals(text)) {
                        Toast.makeText(this, "文本内容为空", Toast.LENGTH_SHORT).show();
                    } else {
                        //获取SharedPreference对象。调用Context的getSharedPreference方法
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.putString("EditView",text);
                        editor.commit();
                    }
                    break;
                case R.id.btn_read:
                    //通过获取的SharedPreference对象的getXXX方法获取文件里的值。

    String getText = sharedPreferences.getString("EditView", ""); textView.setText(getText); break; default:break; } } }


    保存页面:

    路径:


    内容:


  • 相关阅读:
    不要自称为程序员(转)
    JSON数据格式
    netstat
    win7,ubuntu双系统——重装win7后如何恢复ubuntu引导
    js中setInterval与setTimeout用法
    使用CSS中margin和padding的基础和注意事项
    HTTP协议与HTML表单(再谈GET与POST的区别)
    (转)JAVA AJAX教程第四章—AJAX和MVC的简单结合
    (转)JAVA AJAX教程第三章—AJAX详细讲解
    制作SD卡启动自己编译的uboot.bin
  • 原文地址:https://www.cnblogs.com/llguanli/p/7223734.html
Copyright © 2011-2022 走看看