android 之SharedPreferences,SDCard以及网络存储
android 之數據存儲分類:
A.Shared Preferences:存儲私有的數據以鍵值對的形式
B.內部存儲:在設備的內存中存儲私有數據
C.外部存儲:在外部設備(手機SDCard等)存儲共享數據
D.SQLite數據庫存儲:存儲結構化數據
F.網絡存儲:將Android手機端的數據存儲到遠程服務器中,
分類:
基于HTTP協議:
1.HttpURLConnection
2.HttpClient
基于Socket通信:
1.TCP
2.UDP
sharedPreferences進行數據讀寫的操作具體步驟:
示例代碼:
主類的:
package com.hsj.example.sharedprefereneddemo01;import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.Toast;import com.hsj.example.sharedprefereneddemo01.service.SharedPreferenceService;/*** 面試題:在android中常用的數據存放方式有哪些?* A:SharedPreferences(共享參數配置):存儲原始簡單類型的數據,以鍵值對的形式存儲的* B:InternalStorage(內部存儲):存儲私有數據到設備內存上* C:ExternalStorage(外部存儲):存儲公共數據到外部存儲設備上,比如SDCard* D:SQLiteDatabase(數據庫存儲):存儲結構化的數據* E:NetConnectionStorage(通過網絡連接進行遠程數據存儲)****/ public class MainActivity extends AppCompatActivity {private EditText editText_userName;private EditText editText_password;/*** 生成共享參數對象*/private SharedPreferences sharedPreferences;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SharedPreferenceService preferenceService=new SharedPreferenceService(this);preferenceService.write();preferenceService.read();System.out.println("======");preferenceService.readAll();/*通過調用getSharedPreferences(文件名, 文件的操作模式):得到SharedPreferences 對象;第一個參數表示文件名,第二個參數表示文件的操作模式:Context.MODE_PRIVATE:私有模式,使用該模式創建的文件只能在本應用程序中訪問,其它應用程序不能訪問,如果多次向文件中寫入內容,則后寫入的內容會覆蓋之前寫的內容Context.MODE_APPEND:追加模式,作用和私有模式相同,但如果多次寫入數據會在之前內容的后面追加內容,之前的內容不會被覆蓋的Context.MODE_WORLD_READABLE(1):使用該模式創建的文件,其它應用程序可以讀取,但不能寫入Context.MODE_WORLD_WRITEABLE(2):使用該模式創建的文件,其它應用程序可以寫入,但不能讀取.如果想實現全局可讀寫咋辦?A:Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLEB:Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE位與(&)的運算規律:同時為1才為1位或(|)的運算規律:一個為1即為10000 0001|0000 0010================0000 0011注意:文件名不要加擴展名,系統會自動給我們加上.xml, 因此下面的 代碼生成的文件名為:hsj.xml*///this.sharedPreferences=this.getSharedPreferences("hsj", Context.MODE_PRIVATE);//this.getPreferences(Context.MODE_PRIVATE):沒有指定文件名,此時生成文件的名字為:當前Activity的簡單類名.xml,即:MainActivity.xmlthis.sharedPreferences=this.getPreferences(Context.MODE_PRIVATE);/*總結:this.getSharedPreferences("hsj", Context.MODE_PRIVATE)和this.getPreferences(Context.MODE_PRIVATE)方法的區別:相同點:都可以得到SharedPrefereces 對象不同點:A:語法不同:getSharedPreferences("hsj", Context.MODE_PRIVATE)需要傳遞文件名和文件的操作模式this.getPreferences(Context.MODE_PRIVATE):只需要傳遞文件的操作模式即可B: 生成的文件名不同getSharedPreferences("hsj", Context.MODE_PRIVATE)可以手工指定生成文件的名字this.getPreferences(Context.MODE_PRIVATE):生成文件的名字為當前Activity的簡單類名.xmlC:應用場合不同:getSharedPreferences("hsj", Context.MODE_PRIVATE):可以應用在不同的Activity 之間讀寫數據this.getPreferences(Context.MODE_PRIVATE):只能使用當前Activity 讀取其中的數據*/System.out.println("sharedPreferences="+this.sharedPreferences);this.editText_userName= (EditText) this.findViewById(R.id.editText_userName);this.editText_password= (EditText) this.findViewById(R.id.editText_password);readData(sharedPreferences);}/*** 讀取 SharedPreferences 對象中存儲的數據* @param sharedPreferences*/private void readData(SharedPreferences sharedPreferences) {//根據指定的鍵取值,如果指定的鍵不存在返回第二個參數指定的默認值作為整個方法的返回值String userName=sharedPreferences.getString("userName","無名");String pwd=sharedPreferences.getString("pwd","");this.editText_userName.setText(userName);this.editText_password.setText(pwd);}public void login(View view){String userName=this.editText_userName.getText().toString();String pwd=this.editText_password.getText().toString();if(TextUtils.isEmpty(userName)){this.editText_userName.setError("用戶名必須輸入");this.editText_userName.requestFocus();return;}this.editText_password.requestFocus();if(TextUtils.isEmpty(pwd)){this.editText_password.setError("密碼必須輸入!");this.editText_password.requestFocus();return;}if("admin".equals(userName) && "123".equals(pwd)){Toast.makeText(this,userName+"登錄成功!",Toast.LENGTH_LONG).show();saveData(userName,pwd);}else {Toast.makeText(this,"用戶名或者密碼錯誤!",Toast.LENGTH_LONG).show();}}/*** 存儲數據* 使用SharedPreferences 完成數據存儲時數據存在在:/data/data/應用程序主包名/shared_prefs/文件名* 里面生成的文件內容為:*<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><string name="userName">admin</string><string name="pwd">123</string></map>* @param userName 用戶名* @param pwd 密碼*/private void saveData(String userName, String pwd) {//2.通過調用SharedPreferences 對象的edit()方法得到Editor對象SharedPreferences.Editor editor=sharedPreferences.edit();//3.調用editor 對象的putxxx()方法完成數據的設定,xxx 代表數據類型editor.putString("userName",userName);editor.putString("pwd",pwd);//4.調用editor對象的commit()方法提交數據完成持久化操作editor.commit();}public void reset(View view){this.editText_userName.setText(null);this.editText_password.setText(null);this.editText_userName.requestFocus();} }service:
package com.hsj.example.sharedprefereneddemo01.service;import android.content.Context; import android.content.SharedPreferences;import java.util.HashSet; import java.util.Map; import java.util.Set;/*** Created by hsjwcf on 2018/6/14.*/ public class SharedPreferenceService {private SharedPreferences sharedPreferences;public SharedPreferenceService(Context context){sharedPreferences=context.getSharedPreferences("wcf",Context.MODE_PRIVATE);}/***** <?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><long name="idcard" value="1112223344" /><boolean name="isMarried" value="true" /><float name="salary" value="30000.0" /><int name="age" value="20" /><string name="name">趙麗穎</string><set name="phones"><string>111234511</string><string>111234589</string><string>111234556</string><string>111234533</string></set></map>* 寫數據*/public void write(){SharedPreferences.Editor editor=sharedPreferences.edit();editor.putString("name","趙麗穎");editor.putInt("age",20);editor.putFloat("salary",30000);editor.putBoolean("isMarried",true);editor.putLong("idcard",1112223344);Set<String> phones=new HashSet<>();phones.add("111234556");phones.add("111234589");phones.add("111234511");phones.add("111234533");editor.putStringSet("phones",phones);editor.commit();}/*** 讀取數據*/public void read(){String name=sharedPreferences.getString("name","無名");int age=sharedPreferences.getInt("age",-1);float salary=sharedPreferences.getFloat("salary",10000);boolean isMarried= sharedPreferences.getBoolean("isMarried",false);long idCard=sharedPreferences.getLong("idCard",00000000);Set<String> set=new HashSet<>();set.add("00000000");set.add("11111111");Set<String> phones=sharedPreferences.getStringSet("phones",set);System.out.println("name="+name+",age="+age+",salary="+salary+",isMarried="+isMarried+",idCard="+idCard+",phones="+phones);}public void readAll(){Map<String,?> map= sharedPreferences.getAll();System.out.println("map="+map);}}UI界面:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:hint="請輸入用戶名"android:id="@+id/editText_userName" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="textPassword"android:hint="請輸入密碼"android:ems="10"android:id="@+id/editText_password" /><LinearLayoutandroid:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:layout_gravity="center_horizontal"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="登錄"android:onClick="login"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="重置"android:onClick="reset"/></LinearLayout> </LinearLayout>
使用內部存儲讀寫數據的操作步驟:
1.調用上下文對象的openFileInput(文件名)得到文件輸入流對象
fileinputStream = fileInputStream = this.context.openfileInput(xxx.txt);
2.讀取數據
byte[] buffer = new byte[1024];
int len = fileinputStream.read(buffer);
String info = new String(buffer,0,len);
3.關閉文件輸入流對象
fileInputStream.close();
實例代碼:
業務邏輯代碼:
UI界面代碼:
?? ?
使用外部存儲讀寫數據的操作步驟:
1.判斷手機的SDCard是否存在并且可用
String state = Environment.getExtrnalStorageState();
2.得到外部存儲設備的根目錄并組拼出寫入數據文件
File root = Environment.getExernalStorageDirectoy();
file destFile = new File(root,"sddcard.bak");
3.使用組拼出的文件包裝成輸入流對象
inputStream = new FileInputStream(destFile);
4.使用輸入流讀取數據
byte[] buffer = new byte[1024];
int len = 0;
while((len = inputStream.read(buffer)) != -1){
sb.append(new String(buffer,0,len));
}
5.關閉輸入流
inputStream.close();
業務邏輯代碼:
UI界面代碼:
總結
以上是生活随笔為你收集整理的android 之SharedPreferences,SDCard以及网络存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 之Fragment的详
- 下一篇: android android stud