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中內容保存下來。activity_ui.xml:*/ 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; } } }
<?保存頁面: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()方法。這是靜態方法,自己主動使用應用程序的包名作為文件名稱。
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面試準備 第二天 第五例 數據存儲