Android 3種資料保存(SharedPreferences存盤 內部檔案存盤 資料庫存盤)
第一步:在xml檔案上界面布局
這邊采用LinearLayour布局,添加3個按鈕來實作界面的跳轉,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/b1"
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="內置存盤"/>
<Button
android:id="@+id/b6"
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:text="SharedPreferences存盤"/>
<Button
android:id="@+id/b7"
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:text="SQLite存盤"/>
</LinearLayout>
界面截圖:

第二步:在Mainactivity.java完成功能的實作
找到ID并系結
3個按鈕的監聽事件(界面的跳轉)
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
});
b6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,Main3Activity.class);
startActivity(intent);
}
});
b7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,Main4Activity.class);
startActivity(intent);
}
});
第三步:各功能的實作
①、內部檔案存盤
創建一個xml檔案(activity_main2)和一個java檔案(Main2Activity),來實作內部檔案存盤界面的布局和功能的實作,
第一:這邊的布局采用LinearLayout布局,首先添加一個EditText控制元件來輸入我們要保存的資訊,在添加3個按鈕的實作不同的功能,點擊第一個按鈕把當前輸入的資訊保存到手機內部檔案夾上,第二個按鈕打開當前檔案夾顯示保存的資訊,第三個按鈕洗掉手機內部檔案夾下所保存的檔案,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Main2Activity">
<EditText
android:id="@+id/e1"
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp" />
<Button
android:id="@+id/b2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="保存資訊"/>
<Button
android:id="@+id/b3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="獲取資訊"/>
<Button
android:id="@+id/b4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="洗掉檔案"/>
<TextView
android:id="@+id/t1"
android:layout_width="match_parent"
android:textSize="30sp"
android:layout_marginTop="20dp"
android:text=""
android:gravity="center"
android:layout_height="wrap_content"/>
</LinearLayout>
界面截圖:

第二:內部檔案存盤功能的實作
- 獲取到當前的id并系結

- 3個按鈕的監聽事件
按鈕1(b2)保存資訊
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
OutputStream outputStream=openFileOutput("myfile",MODE_PRIVATE);
//MODE_PRIVATE,覆寫原有的檔案;MODE_APPEND,內容追加到原來的檔案上,
if(e1.getText().toString().equals(""))
{
Toast.makeText(Main2Activity.this,"當前為空,請輸入資訊",Toast.LENGTH_SHORT).show();
return;
}
outputStream.write(e1.getText().toString().getBytes());
outputStream.flush();;
outputStream.close();
Toast.makeText(Main2Activity.this,"保存資訊成功",Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
e.printStackTrace();
Toast.makeText(Main2Activity.this,"保存資訊成功失敗",Toast.LENGTH_SHORT).show();
}
}
});
按鈕2(b3)獲取資訊
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
StringBuffer stringBuffer=new StringBuffer();
try {
InputStream inputStream=openFileInput("myfile");
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
String cout=null;
while((cout=bufferedReader.readLine())!=null)
{
stringBuffer.append(cout);
}
Toast.makeText(Main2Activity.this,"獲取資訊成功",Toast.LENGTH_SHORT).show();
t1.setText(stringBuffer.toString());
bufferedReader.close();
}
catch (Exception e)
{
e.printStackTrace();
Toast.makeText(Main2Activity.this,"獲取資訊失敗",Toast.LENGTH_SHORT).show();
}
}
});
按鈕3(b4)洗掉檔案
b4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean b=deleteFile("myfile");
if(b==true)
{
Toast.makeText(getApplicationContext(), "洗掉檔案成功", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(), "洗掉檔案失敗", Toast.LENGTH_SHORT).show();
}
}
});
界面截圖:

②、SharedPreferences存盤
創建一個xml檔案(activity_main3)和一個java檔案(Main3Activity),來實作內部檔案存盤界面的布局和功能的實作,
第一:這邊的布局采用LinearLayout布局,首先添加兩個EditText控制元件來輸入賬號和密碼,在添加3個按鈕的實作不同的功能,點擊第一個按鈕注冊賬號,第二個按鈕重新輸入資訊,第三個按鈕登陸賬號,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".Main3Activity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:textSize="20sp"
android:text="用戶名:"/>
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入賬號"
android:singleLine="true" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:textSize="20sp"
android:text="密碼:"/>
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入密碼"
android:inputType="textPassword"
android:singleLine="true" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/login"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:text="注冊"/>
<Button
android:id="@+id/delect"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="重新輸入"/>
</LinearLayout>
<Button
android:id="@+id/see"
android:layout_width="100dp"
android:layout_marginTop="20dp"
android:layout_height="wrap_content"
android:text="登陸"/>
</LinearLayout>
界面截圖:

第二:SharedPreferences存盤功能的實作
-
獲取到當前的id并系結

-
定義一個SharedPreferences

private SharedPreferences sharedPreferences; -
3個按鈕的監聽事件
按鈕1(login)注冊賬號
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(username.getText().toString().equals("")||password.getText().toString().equals(""))
{
Toast.makeText(Main3Activity.this,"不能為空!",Toast.LENGTH_SHORT).show();
return;
}
sharedPreferences=getSharedPreferences("data",Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString("username",username.getText().toString());
editor.putString("password",password.getText().toString());
editor.apply();
Toast.makeText(Main3Activity.this,"注冊成功!",Toast.LENGTH_SHORT).show();
}
});
按鈕2(delect)洗掉檔案,重新輸入
delect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.clear();
editor.apply();
username.setText("");
password.setText("");
Toast.makeText(Main3Activity.this,"重新輸入",Toast.LENGTH_SHORT).show();
}
});
按鈕3(see)跳轉到登陸賬號界面
創建一個xml檔案(activity_main5)和一個java檔案(Main5Activity),來實作登陸賬號功能
第一:這邊的布局采用LinearLayout布局,首先添加兩個EditText控制元件來輸入賬號和密碼,在添加1個按鈕的實作賬號登陸,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".Main5Activity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="賬號:"/>
<EditText
android:id="@+id/zh1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text=""/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="密碼:"/>
<EditText
android:id="@+id/mm1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text=""/>
</LinearLayout>
<Button
android:id="@+id/success"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="確認"/>
</LinearLayout>
界面截圖:

第二:功能實作(Main5Activity)
獲取到當前的id并系結

獲取注冊過的賬號和密碼

按鈕的監聽事件(判斷賬號密碼是否為空和賬號密碼是否存在)
success.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(zh1.getText().toString().equals("")||mm1.getText().toString().equals(""))
{
Toast.makeText(Main5Activity.this,"不能為空!",Toast.LENGTH_SHORT).show();
return;
}
else if(zh1.getText().toString().equals(userzh)&&mm1.getText().toString().equals(usermm))
{
Toast.makeText(Main5Activity.this,"登陸成功",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Main5Activity.this,"賬號或密碼錯誤",Toast.LENGTH_SHORT).show();
}
}
});
界面截圖:

③、SQLite存盤
創建一個xml檔案(activity_main4)和一個java檔案(Main4Activity),來實作SQLite存盤界面的布局和功能的實作,
第一:這邊的布局采用LinearLayout布局,首先添加兩個EditText控制元件來輸入賬號和密碼,在添加2個按鈕的實作不同的功能,點擊第一個按鈕注冊賬號,第二個按鈕重新輸入,之后在定義兩個TextView來顯示注冊的賬號密碼,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".Main4Activity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:textSize="20sp"
android:text="用戶名:"/>
<EditText
android:id="@+id/usernames"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入賬號"
android:singleLine="true" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:textSize="20sp"
android:text="密碼:"/>
<EditText
android:id="@+id/passwords"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入密碼"
android:inputType="textPassword"
android:singleLine="true" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/register"
android:layout_width="100dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:text="注冊"/>
<Button
android:id="@+id/again"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="重新輸入"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="50dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="賬號:"/>
<TextView
android:id="@+id/zh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text=""/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:textSize="20sp"
android:text="密碼:"/>
<TextView
android:id="@+id/mm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text=""/>
</LinearLayout>
</LinearLayout>
界面截圖:

第二:創建資料庫檔案(MyDateBase)
public class MyDateBase {
}
繼承SQLiteOpenHelper
public class MyDateBase extends SQLiteOpenHelper {
}
滑鼠移至SQLiteOpenHelper按下Alt+Enter,選擇第一個,之后按下ok


滑鼠移至SQLiteOpenHelper按下Alt+Enter,選擇第一個,之后按下ok

創建一個命名為first的資料表(id,username,password)
private String createAppTable="create table first(id integer primary key autoincrement,username varchar(20),password varchar(20))";
在onCreate函式中執行SQL陳述句
sqLiteDatabase.execSQL(createAppTable);
sqLiteDatabase.execSQL("insert into first(id,username,password) values(?,?,?)",new String[]{"1","",""});
System.out.println("創建資料庫成功");
根據Id找到賬號和密碼并更新賬號和密碼,在倒數第二個花括號添加類
public String getusernameById(SQLiteDatabase db,String id)//根據Id找到賬號
{
Cursor cursor=db.rawQuery("select * from first where id=?",new String[]{id});
if(cursor.moveToNext())
{
return cursor.getString(cursor.getColumnIndex("username"));
}
return "";
}
public void updateusername(SQLiteDatabase db,String id,String username)//更新賬號
{
db.execSQL("update first set username=? where id=?",new String[]{username,id});
}
public String getpasswordById(SQLiteDatabase db,String id)//根據Id找到密碼
{
Cursor cursor=db.rawQuery("select * from first where id=?",new String[]{id});
if(cursor.moveToNext())
{
return cursor.getString(cursor.getColumnIndex("password"));
}
return "";
}
public void updatepassword(SQLiteDatabase db,String id,String password)//更新密碼
{
db.execSQL("update first set password=? where id=?",new String[]{password,id});
}
public void delectdb(SQLiteDatabase db,String id)//洗掉資料表中的資訊
{
db.execSQL("delete from first where id=?",new String[]{id});
}
第三:回傳Main4Activity檔案,實作功能的實作
獲取到當前的id并系結

并添加SQLiteDatabase和MyDateBase

訪問資料表

更新用戶名和密碼
public void UpdateUserName()//更新賬號
{
myDateBase.updateusername(db,"1",usernames.getText().toString());
}
public void UpdatePassWord()//更新密碼
{
myDateBase.updatepassword(db,"1",passwords.getText().toString());
}
按鈕的監聽事件
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(passwords.getText().toString().equals("")||usernames.getText().toString().equals(""))
{
Toast.makeText(Main4Activity.this,"注冊失敗,不能為空!",Toast.LENGTH_SHORT).show();
return;
}
UpdateUserName();
UpdatePassWord();
Toast.makeText(Main4Activity.this,"注冊成功!",Toast.LENGTH_SHORT).show();
zh.setText(usernames.getText().toString());
mm.setText(passwords.getText().toString());
}
});
again.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
usernames.setText("");
passwords.setText("");
}
});
獲取賬號和密碼并顯示
public void getUserName() {//獲取用戶名
String user=myDateBase.getusernameById(db, "1");
zh.setText(user);
}
public void getPassword() {//獲取密碼
String pass=myDateBase.getpasswordById(db, "1");
mm.setText(pass);
}

洗掉資料表的資訊
public void DelectDb()
{
myDateBase.delectdb(db,"1");
}
本專案的源代碼鏈接:
https://download.csdn.net/download/Scxioi0/12911350
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/159213.html
標籤:其他
