文件存儲、SharedPreferences、數據庫存儲java
public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.edit);
String inputText = load();
/*此方法是對字符串的雙重判斷,即不爲空,不爲null*/
if(!TextUtils.isEmpty(inputText)){
editText.setText(inputText);
// 將光標移動到字符串最後
editText.setSelection(inputText.length());
Toast.makeText(this, "恢復成功", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
String inputText = editText.getText().toString();
save(inputText);
}
/*文件存儲*/
public void save(String inputText) {
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(inputText);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*文件恢復*/
public String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
}
佈局設置一個編輯框便可
android studio3.0以上版本已經棄用Android Device Monitor,查看文件能夠在View→Tool Windows→Device File Explorer查看
文件目錄爲/data/data/包名/files/下查看android
public class MainActivity extends AppCompatActivity {
private Button saveData;
private Button restoreData;
private TextView showData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveData=(Button)findViewById(R.id.save_data);
restoreData=(Button)findViewById(R.id.restore_data);
showData=(TextView)findViewById(R.id.show_data);
/*存儲數據*/
saveData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","Tom");
editor.putInt("age",28);
editor.putBoolean("married",false);
editor.apply();
}
});
/*恢復數據*/
restoreData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences pref=getSharedPreferences("data",MODE_PRIVATE);
String name=pref.getString("name","");
int age=pref.getInt("age",0);
boolean married=pref.getBoolean("married",false);
showData.setText("name is "+name+"\n"+"age is "+age+"\n"+"married is "+married);
}
});
}
}
佈局就是是兩個按鈕和一個文本
* 數據庫
使用自帶數據庫SQLITE
佈局六個按鈕git
<Button
android:id="@+id/create_database"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="建立數據庫"
/>
<Button
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加數據"
/>
<Button
android:id="@+id/up_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="更新數據"
/>
<Button
android:id="@+id/delete_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="刪除數據"
/>
<Button
android:id="@+id/query_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查詢數據"
/>
新建MyDatabaseHelper類github
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK="create table Book ("
+"id integer primary key autoincrement,"
+"author text,"
+"price real,"
+"pages integer,"
+"name text)";
public static final String CREATE_CATEGORY="create table Category ("
+"id integer primary key autoincrement,"
+"category_name text,"
+"category_code integer)";
private Context mContext;
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext=context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_BOOK);
/*建立新表須要onCreate()方法*/
sqLiteDatabase.execSQL(CREATE_CATEGORY);
//onCreate(sqLiteDatabase);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
修改MainActivityweb
public class MainActivity extends AppCompatActivity {
public static final String TAG="MainActivity";
private Button createDatabase;
private Button addData;
private Button updateData;
private Button deleteData;
private Button queryData;
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createDatabase=(Button)findViewById(R.id.create_database);
addData=(Button)findViewById(R.id.add_data);
updateData=(Button)findViewById(R.id.up_date);
deleteData=(Button)findViewById(R.id.delete_data);
queryData=(Button)findViewById(R.id.query_data);
/*添加新表的時候須要更改版本號*/
dbHelper=new MyDatabaseHelper(this,"BookStore.db",null,2);
/*建立數據庫*/
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dbHelper.getWritableDatabase();
}
});
/*添加數據*/
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
//開始填寫第一條數據
values.put("name","離散數學");
values.put("author","屈婉玲");
values.put("pages",300);
values.put("price",33.33);
//插入第一條數據
sqLiteDatabase.insert("Book",null,values);
values.clear();
//開始填寫第二條數據
values.put("name","高數十八講");
values.put("author","張宇");
values.put("pages",400);
values.put("price",44.44);
sqLiteDatabase.insert("Book",null,values);
}
});
/*更新數據*/
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("author","耿素雲");
sqLiteDatabase.update("Book",values,"name=?",new String[]{
"離散數學"});
}
});
/*刪除數據*/
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
sqLiteDatabase.delete("Book","name=?",new String[]{
"高數十八講"});
}
});
/*查詢數據*/
queryData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
Cursor cursor=sqLiteDatabase.query("Book",null,null,null,null,null,null);
if (cursor.moveToFirst()){
do {
String name=cursor.getString(cursor.getColumnIndex("name"));
String author=cursor.getString(cursor.getColumnIndex("author"));
int pages=cursor.getInt(cursor.getColumnIndex("pages"));
double price=cursor.getDouble(cursor.getColumnIndex("price"));
Log.d(TAG, "book name is "+name);
Log.d(TAG, "book author is "+author);
Log.d(TAG, "book pages is "+pages);
Log.d(TAG, "book price is "+price);
}while (cursor.moveToNext());
}
cursor.close();
}
});
}
}
使用LitePal操做,先去項目主頁查看最新版本
implementation 'org.litepal.android:core:2.0.0'
在main下新建assets目錄(new→Floder→AssetsFloder),而後在裏面新建litepal.xml數據庫
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore">
</dbname>
<version value="1">
</version>
<list>
<mapping class="com.example.litepaltest.Book">
</mapping>
</list>
</litepal>
而後再註冊
android:name="org.litepal.LitePalApplication"
1.建立數據庫
添加實體類而後映射,再調用LitePal.getDatabase();就是建表app
public class Book {
private int id;
private String author;
private double price;
private int pages;
private String name;
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 void setPrice(double price) {
this.price = price;
}
public double getPrice() {
return price;
}
public void setPages(int pages) {
this.pages = pages;
}
public int getPages() {
return pages;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
<list>
<mapping class="com.example.litepaltest.Book">
</mapping>
</list>
public class MainActivity extends AppCompatActivity {
private Button createDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createDatabase=(Button)findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.getDatabase();
}
});
}
}
2升級數據庫
在實體類裏添加,或者新建實體類,而後在litepal.xml中更改版本號後映射便可ide
public class Category {
private int id;
private String categoryName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
}
<version value="2">
</version>
<list>
<mapping class="com.example.litepaltest.Book">
</mapping>
<mapping class="com.example.litepaltest.Category">
</mapping>
</list>
3.向LitePal添加數據(增)
只是建立數據庫是不須要繼承結構的,而進行CRUD(增刪改查)操做,實體類是須要繼承LitePalSupport的
添加數據只須要調用實體類的set方法和DataSupport的save()方法便可
public class Book extends LitePalSupport
svg
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book=new Book();
book.setName("離散數學");
book.setAuthor("屈婉玲");
book.setPages(400);
book.setPrice(40.35);
book.setPress("清華大學出版社");
book.save();
}
});
4.更新數據佈局
updataData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book = new Book();
book.setAuthor("耿素雲");
book.updateAll("author=?","屈婉玲");
}
});
5.刪除數據
LitePal.deleteAll(Book.class,"price<?","15");
6.查詢數據
List<Book>books=LitePal.findAll(Book.class);
for(Book book:books){
Log.d("MainActivity","book name is "+book.getName());
Log.d("MainActivity","book author is "+book.getAuthor());
Log.d("MainActivity","book pages is "+book.getPages());
Log.d("MainActivity","book price is "+book.getPrice());
Log.d("MainActivity","book press is "+book.getPress());