Android 3種數據保存(SharedPreferences存儲 內部文件存儲 數據庫存儲)

Android 3種數據保存(SharedPreferences存儲 內部文件存儲 數據庫存儲)

第一步:在xml文件上界面佈局
這邊採用LinearLayour佈局,添加3個按鈕來實現界面的跳轉,代碼以下:php

<?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個按鈕的監聽事件(界面的跳轉)java

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個按鈕的實現不一樣的功能,點擊第一個按鈕把當前輸入的信息保存到手機內部文件夾上,第二個按鈕打開當前文件夾顯示保存的信息,第三個按鈕刪除手機內部文件夾下所保存的文件,代碼以下:android

<?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>

界面截圖:
在這裏插入圖片描述
第二:內部文件存儲功能的實現web

  • 獲取到當前的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)獲取信息app

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)刪除文件ide

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個按鈕的實現不一樣的功能,點擊第一個按鈕註冊帳號,第二個按鈕從新輸入信息,第三個按鈕登錄帳號,代碼以下:svg

<?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