Android面試準備 第二天 第五例 資料存放區

來源:互聯網
上載者:User

標籤:gravity   name   部分   err   名稱   ace   包括   append   mat   

參考: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>

儲存頁面:

檔案路徑:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

檔案內容:


二、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; } }}


儲存頁面:

路徑:


內容:


Android面試準備 第二天 第五例 資料存放區

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.