SharedPreferences存储
SharedPreferences是使用键值对的方法存储的
1、将数据存储到sharedPreferences中
首先获取SharedPreferences.Editor对象,然后再可以向对象中添加3个不同类型的数据,最后再apply()方法调用
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 18);
editor.putBoolean("married", false);
editor.apply();
2、从SharedPreferences中读取数据
首先得到SharedPreferences对象,然后用get()方法,如读取字符串则getString(),读取布尔型则getBoolean()方法
SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married",false);
数据库存储
LitePal学习笔记
配置LitePal
1、编辑app/build.grape文件,在dependencies添加如下内容:
implementation ‘org.litepal.guolindev:core:3.2.3’
2、右击app/src/main目录->new->Directory,创建一个assets目录,然后assets目录下再创建一个litepal.xml文件,如下内容:
<litepal>
<dbname value ="BookStore"></dbname>
<version value="1"></version>
<list>
</list>
</litepal>
注意:
最新版本的LitePal
每次修改类里的代码litepal.xml里的mapping class (java类)value都要加1
3、配置一下LitePalApplication,修改AndroidMainfest.xml中的代码
android:name="org.litepal.LitePalApplication"
2、建表(创建数据)
实例的book类 (新建一个book类) LitePal.getDatabase()方法 创建数据库
public class Book extends LitePalSupport {
private int id;
private String author;
private double price;
private int pages;
private String name;
private String press;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
}
还要将book类添加到映射模型列表当中
修改litepal.xml,注意 value要加1
<litepal>
<dbname value ="BookStore"></dbname>
<version value="2"></version>
<list>
<mapping class="com.example.litepaltest.Book"></mapping>
</list>
</litepal>
然后修改MainActivity中的代码
添加:LitePal.getDatabase(); //数据库自动完成创建
3、添加数据
book继承DataSupport类
book类的代码中:public class Book extends LitePalSupport
接着就可以在book中添加数据了,修改MainActivity中的代码 实现添加,最后save()保存
Book book = new Book();
book.setName("The Da Vinci Code");
book.setAuthor("Dan Brown");
book.setPages(454);
book.setPrice(16.96);
book.setPress("Unknow");
book.save();
4、更新数据
再添加新的数据然后再save()一次
5、删除数据
LitePal.deleteAll()方法
LitePal.deleteAll(Book.class, “price < ?”, “15”); //删除价格小于15的书
6、查找数据
LiST books = LitePal.findAll()方法
查询Book表中的第一条数据
Book firstBook = DataSupport.finfFirst(Book.class);
查询book表中的最后一条数据
Boook lastBook = DataSuppport.findLast(Book.class);
select()方法用于指定查询哪几列的数据,比如查找name和author的数据
List<Book> books = DataSupport.select("name","author").find(Book.class);
where()方法用于指定查询的约束条件
List<Book> books = DataSupport.where("pages > ?","400").find(Book.class);
还有order()、limit()等方法
实现记住密码的功能
MainActivity
public class MainActivity extends AppCompatActivity {
private SharedPreferences pref;
private SharedPreferences.Editor editor;
private EditText accountEdit;
private EditText passwordEdit;
private Button login;
private CheckBox rememberPass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pref = PreferenceManager.getDefaultSharedPreferences(this);
accountEdit = (EditText) findViewById(R.id.editTextTextPersonName2);
rememberPass = (CheckBox) findViewById(R.id.remember_pass);
passwordEdit = (EditText) findViewById(R.id.editTextTextPassword);
login = (Button) findViewById(R.id.login);
boolean isRemenber = pref.getBoolean("remember_paassword", false);
if (isRemenber) {
//将账号和密码都设置到文本框中
String account = pref.getString("account", "");
String password = pref.getString("passworld", "");
accountEdit.setText(account);
passwordEdit.setText(password);
rememberPass.setChecked(true);
}
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String account = accountEdit.getText().toString();
String password = passwordEdit.getText().toString();
//如果账号和密码是admin和123456则登陆成功
if (account.equals("admin") && password.equals("123456")) {
editor = pref.edit();
if (rememberPass.isChecked()) {
//检查复选框是否被选中
editor.putBoolean("remember_password", true);
editor.putString("account", account);
editor.putString("password", password);
} else {
editor.clear();
}
editor.apply();
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
//finish();
} else {
Toast.makeText(MainActivity.this, "account or password is invalid",
Toast.LENGTH_SHORT).show();
}
}
});
}
}
LoginActivity
public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
}
activity_main.xml
<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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Account:"
android:layout_marginRight="10dp"/>
<EditText
android:id="@+id/editTextTextPersonName2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Password:" />
<EditText
android:id="@+id/editTextTextPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPassword" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/remember_pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Remember password"
android:textSize="18sp"/>
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="Login"
android:id="@+id/login"/>
</LinearLayout>
注册和登录功能的思路
(还没实现,自己的总结可能有误,还会修改)
一、主活动登录注册界面。二、点击注册startActivity(intent)进入注册活动。首先获取每个控件的实例,然后在EditText里输入账号密码,点击注册。点击注册按钮执行以下活动:首先getString(这是一个要另外写的方法)方法获取输入的内容,然后if、else if判断账号/密码是否为空,再次输入密码 是否一致,用Toast显示提示信息(如:账号不能为空等等)。还要判断是否注册过该账号,怎么判断呢(写一个判断是否存在的方法:即从SharedPreferences中读取数据:首先getSharedPreferences()方法得到sharedpreference对象,然后getString(userName, “”)传入用户名和密码,如果密码为空,则未注册过此密码,则注册成功。)注册成功,就保存账号和密码到SharedPreferences中: saveRegisterInfo(userName, password);写一个saveRegisterInfo(String userName,String password)方法:sharedpreferences.editor editor = getsharedpreferences( ).edit(); 然后键值对,用户名和密码一一对应editor.putString(userName, passname); 登录活动:开始登录,获取用户名和密码,定义方法 读取用户名得到密码,如果输入密码和得到的密码相同则登录成功,定义通过用户名得到密码的方法(getsharedpreferences方法然后得到密码)
SharePreferences存储和数据库存储的结合
实现登录不同用户展示不一样的内容
(思路也许是错的)
思路:
1、新建一个sharedpreferences,可编辑,接着获取文本框的用户名和密码,保存在sharedpreferences里,其中sharedpreferences里的username和book里的username是一样的数据,通过数据库的《list》在book表里查找用户名有没有,密码有没有,用户名与密码是否匹配,符合这些查找条件list就>0 则登录成功就intent,intent进入另一个活动后,要怎么把该用户名的消息加载进来呢,获取sharedpreferences这个对象,获取它的用户名的值,通过数据库在book类的查找这个用户名匹配的信息,然后加载出来适配器的原理。
2、删除数据: 长按按钮,确认删除,获取这个item的位置 得到它的ID,该id就是book类一条数据的id,删除后刷新
3、添加数据:怎么知道添加的是次用户名的信息呢,sharedpreferences获取用户名,然后在book表的此用户名消息里添加,再刷新适配器