Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android面試准備 第二天 第五例 數據存儲

Android面試准備 第二天 第五例 數據存儲

編輯:關於Android編程

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、給按鈕定義事件,點擊後把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:

 

 




    
保存頁面:
\
文件路徑:

 

\

文件內容:

\

二、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、給按鈕定義事件,點擊後把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;
        }
    }
}

保存頁面: \

 

路徑:

\

內容:

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved