編輯:關於Android編程
RAM內存:運行內存,相當於電腦的內存。
ROM內存:存儲內存,相當於電腦的硬盤
在ROM內存中寫寫數據不需要權限
在Android中,組件之間不能相互轉換EditText不能轉換成EditText
案例記住登錄用戶名和密碼:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/name"
android:hint="請輸入用戶名:" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/password"
android:password="true"
android:hint="請輸入密碼:" />
android:layout_width="fill_parent"
android:layout_height="match_parent"
>
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="登錄"
android:onClick="login"/>
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/login"
android:layout_alignBottom="@+id/login"
android:layout_centerVertical="true"
android:text="記住用戶名" />
package com.test.storage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et_name = null;
private EditText et_password = null;
private String name ="";
private String password="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//全局變量的初始化,最好放在onCreate方法中
//不要提前獲取組件的值,有可能會導致下一次使用時值改變或者為空
/* et_name = (EditText) this.findViewById(R.id.name);
et_password = (EditText) this.findViewById(R.id.password);
name = et_name.getText().toString().trim();
password = et_password.getText().toString().trim();*/
et_name = (EditText) this.findViewById(R.id.name);
et_password = (EditText) this.findViewById(R.id.password);
try {
readInfo();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void login(View v) throws IOException{
name = et_name.getText().toString().trim();
password = et_password.getText().toString().trim();
CheckBox cb = (CheckBox) this.findViewById(R.id.check);
//判斷checkbox是否被選中
if (cb.isChecked()) {
//內部存儲空間的路徑data/data/包名 在RAM
//最好通過上下文Context可以獲取上下文的環境信息,getFilesDir():/data/data/當前包名.apirwinfrom/files/文件名
//File file = new File(getFilesDir(), "userinfo.txt");
//這種方式不好,當包名一旦改變,就會報異常。
File file = new File("data/data/com.test.storage/info.txt");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
fos.write((name+" "+password).getBytes());
fos.flush();
fos.close();
}
//創建彈出對話框,參數:上下文內容 文本內容 顯示時間
Toast.makeText(this, "登錄成功",Toast.LENGTH_SHORT).show();
}
public void readInfo() throws IOException{
File file = new File("data/data/com.test.storage/info.txt");
if(file.exists()){
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
line = br.readLine();
String[] userInfo = line.split(" ");
et_name.setText(userInfo[0]);
et_password.setText(userInfo[1]);
}
}
}
當手機內部存儲空間不足時,Cache中文件會被刪除。重要的信息不要保存在Cache中。網絡中的照片可以保存在Cache中。
清空緩存是清空Cache文件夾下的所有內容。
清空數據是清空應用程序獨立空間下的所有內容,包括緩存。
外部存儲空間
sdcard:相當於電腦的移動硬盤
sdcard的位置:
Android2.3之前,sdcard路徑:在根目錄下sdcard文件夾
Android4.3版本之前,sdcard路徑:mnt/sdcard
Android4.3開始,sdcard路徑:storage/sdcard
為了兼容低版本的程序,Android在之前各個版本的sdcard目錄下都留下了快捷方式,指向storage/sdcard
在外部存儲空間寫文件,需要添加權限
如果用戶選擇了保護sdcard的選項,則讀取sdcard的文件上的數據,也是要權限的。
android.permission.READ_EXTERNAL_STORAGE
package com.test.storage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et_name = null;
private EditText et_password = null;
String name = "";
String password = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 全局變量的初始化,最好放在onCreate方法中
// 不要提前獲取組件的值,有可能會導致下一次使用時值改變或者為空
/*
* et_name = (EditText) this.findViewById(R.id.name); et_password =
* (EditText) this.findViewById(R.id.password); name =
* et_name.getText().toString().trim(); password =
* et_password.getText().toString().trim();
*/
et_name = (EditText) this.findViewById(R.id.name);
et_password = (EditText) this.findViewById(R.id.password);
try {
readInfo();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void login(View v) throws IOException {
name = et_name.getText().toString().trim();
password = et_password.getText().toString().trim();
CheckBox cb = (CheckBox) this.findViewById(R.id.check);
// 判斷checkbox是否被選中
if (cb.isChecked()) {
// 這種方式不好,當包名一旦改變,就會報異常。
// File file = new File("sdcard/info.txt");
// 使用sdcard之前必須要檢測sdcard的狀態
/**
* MEDIA_REMOVED:sdcard不存在 MEDIA_UNKNOWN:不能識別sdcard
* MEDIA_UNMOUNTED:sd存在但是沒有掛載上 MEDIA_MOUNTED :sdcard已經掛載,可正常使用
* MEDIA_MOUNTED_READ_ONLY:sdcard只讀 MEDIA_CHECKING:sdcard正在准備
*/
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 最好通過上下文Context可以獲取上下文的環境信息,返回的是sdcard的真實路徑
File file = new File(Environment.getExternalStorageDirectory(),
"userinfo.txt");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
fos.write((name + " " + password).getBytes());
fos.flush();
fos.close();
}
} else {
Toast.makeText(this, "sdcard不可以用", Toast.LENGTH_SHORT);
}
// 創建彈出對話框,參數:上下文內容 文本內容 顯示時間
Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();
}
public void readInfo() throws IOException {
// File file = new File("sdcard/info.txt");
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File file = new File(Environment.getExternalStorageDirectory(),
"userinfo.txt");
if (file.exists()) {
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(
fis));
String line = null;
line = br.readLine();
String[] userInfo = line.split(" ");
et_name.setText(userInfo[0]);
et_password.setText(userInfo[1]);
}
}
}
}
本文實例講述了Android持久化技術之SharedPreferences存儲。分享給大家供大家參考,具體如下:1、SharedPreferences存儲在前面一篇文章《
功能非常簡單就是定義一個CountDownTimer直接看代碼 首先在XML裡面放個按鈕代碼如下: 下面就是主代碼: p
之前講到過,應用開發者為了保護自己的應用不被別人分析和篡改,會將應用的安全性寄托在某個(些)機制上。可以被用來保護應用的機制有很多,效果和實現難度也是各有特點。有這樣一類
在android中使用百度地圖,我們可以先看看百度地圖相應的SDK信息:http://developer.baidu.com/map/index.php?title=an