实例1
实例2
实例3
实例4
SharedPreferences本身是1个接口,没法直接创建,只能通过getSharedPreferences(String name,int mode)方法获得。
String time = preferences.getString("time", null);
// 读取int类型的数据
int randNum = preferences.getInt("random", 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "+ "hh:mm:ss");
// 存入当前时间
editor.putString("time", sdf.format(new Date()));
// 存入1个随机数
editor.putInt("random", (int) (Math.random() * 100));
// 提交所有存入的数据
editor.commit();
public class MainActivity extends Activity
{
final String FILE_NAME = "crazyit.bin";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println(new StringBuilder("a").append("b").append("c")
.toString());
// 获得两个按钮
Button read = (Button) findViewById(R.id.read);
Button write = (Button) findViewById(R.id.write);
// 获得两个文本框
final EditText edit1 = (EditText) findViewById(R.id.edit1);
final EditText edit2 = (EditText) findViewById(R.id.edit2);
// 为write按钮绑定事件监听器
write.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
// 将edit1中的内容写入文件中
write(edit1.getText().toString());
edit1.setText("");
}
});
read.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 读取指定文件中的内容,并显示出来
edit2.setText(read());
}
});
}
private String read()
{
try
{
// 打开文件输入流
FileInputStream fis = openFileInput(FILE_NAME);
byte[] buff = new byte[1024];
int hasRead = 0;
StringBuilder sb = new StringBuilder("");
// 读取文件内容
while ((hasRead = fis.read(buff)) > 0)
{
sb.append(new String(buff, 0, hasRead));
}
// 关闭文件输入流
fis.close();
return sb.toString();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
private void write(String content)
{
try
{
// 以追加模式打开文件输出流
FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
// 将FileOutputStream包装成PrintStream
PrintStream ps = new PrintStream(fos);
// 输出文件内容
ps.println(content);
// 关闭文件输出流
ps.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
如果不想使用Enviroment的getExternalStorageState()方法,完全可使用/mnt/sdcard/路径代表SD卡的路径,然后通过判断/mnt/sdcard/路径是不是存在就知道手机是不是插入SD卡。
<!-- 在SD卡中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 向SD卡写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
public class MainActivity extends Activity
{
final String FILE_NAME = "/crazyit.bin";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获得两个按钮
Button read = (Button) findViewById(R.id.read);
Button write = (Button) findViewById(R.id.write);
// 获得两个文本框
final EditText edit1 = (EditText) findViewById(R.id.edit1);
final EditText edit2 = (EditText) findViewById(R.id.edit2);
// 为write按钮绑定事件监听器
write.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
// 将edit1中的内容写入文件中
write(edit1.getText().toString());
edit1.setText("");
}
});
read.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 读取指定文件中的内容,并显示出来
edit2.setText(read());
}
});
}
private String read()
{
try
{
// 如果手机插入了SD卡,而且利用程序具有访问SD的权限
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED))
{
// 获得SD卡对应的存储目录
File sdCardDir = Environment.getExternalStorageDirectory();
System.out.println("----------------" + sdCardDir);
// 获得指定文件对应的输入流
FileInputStream fis = new FileInputStream(
sdCardDir.getCanonicalPath() + FILE_NAME);
// 将指定输入流包装成BufferedReader
BufferedReader br = new BufferedReader(new
InputStreamReader(fis));
StringBuilder sb = new StringBuilder("");
String line = null;
// 循环读取文件内容
while ((line = br.readLine()) != null)
{
sb.append(line);
}
// 关闭资源
br.close();
return sb.toString();
}
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
private void write(String content)
{
try
{
// 如果手机插入了SD卡,而且利用程序具有访问SD的权限
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED))
{
// 获得SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
File targetFile = new File(sdCardDir
.getCanonicalPath() + FILE_NAME);
// 以指定文件创建 RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(
targetFile, "rw");
// 将文件记录指针移动到最后
raf.seek(targetFile.length());
// 输出文件内容
raf.write(content.getBytes());
// 关闭RandomAccessFile
raf.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
- 获得SQLiteDatabase对象,它代表与数据库的连接
- 调用SQLiteDatabase的方法来履行SQL语句
- 调用SQL语句履行结果,比如用SimpleCursorAdapter封装Cursor.
- 关闭SQLiteDatabase,回收资源
db = SQLiteDatabase.openOrCreateDatabase(
this.getFilesDir().toString()
+ "/my.db3", null);
上面代码返回1个SQLiteDatabase对象,该对象的execSQL()可履行任意的SQL语句,可通过以下代码在利用程序中创建表:
db.execSQL("create table news_inf(_id integer"
+ " primary key autoincrement,"+ " news_title varchar(50),"+ " news_content varchar(255))");
public class MainActivity extends Activity
{
SQLiteDatabase db;
Button bn = null;
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 创建或打开数据库(此处需要使用绝对路径)
db = SQLiteDatabase.openOrCreateDatabase(
this.getFilesDir().toString()
+ "/my.db3", null); // ①
listView = (ListView) findViewById(R.id.show);
bn = (Button) findViewById(R.id.ok);
bn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
// 获得用户输入
String title = ((EditText) findViewById(
R.id.title)).getText().toString();
String content = ((EditText) findViewById(R.id.content))
.getText().toString();
try
{
insertData(db, title, content);
Cursor cursor = db.rawQuery("select * from news_inf"
, null);
inflateList(cursor);
}
catch (SQLiteException se)
{
// 履行DDL创建数据表
db.execSQL("create table news_inf(_id integer"
+ " primary key autoincrement,"
+ " news_title varchar(50),"
+ " news_content varchar(255))");
// 履行insert语句插入数据
insertData(db, title, content);
// 履行查询
Cursor cursor = db.rawQuery("select * from news_inf"
, null);
inflateList(cursor);
}
}
});
}
private void insertData(SQLiteDatabase db
, String title, String content) // ②
{
// 履行插入语句
db.execSQL("insert into news_inf values(null , ? , ?)"
, new String[] {title, content });
}
private void inflateList(Cursor cursor)
{
// 填充SimpleCursorAdapter
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
MainActivity.this,
R.layout.line, cursor,
new String[] { "news_title", "news_content" }
, new int[] {R.id.my_title, R.id.my_content },
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); // ③
// 显示数据
listView.setAdapter(adapter);
}
@Override
public void onDestroy()
{
super.onDestroy();
// 退出程序时关闭SQLiteDatabase
if (db != null && db.isOpen())
{
db.close();
}
}
}
在Android SDK的platform-tools目录下
经常使用命令以下:
1. .databases:查看当前数据库
2. .tables:查看当前数据库中的数据表
3. .help:帮助命令
SQLiteDatabase的insert方法的签名为long insert(String table, String nullColumnHack,ContentValues values),参数说明以下:
1. table:数据表名
2. nullColumnHack:代表强行插入null值的数据列的表名。当values参数为null或不包括key_value对时该参数有效。
3. values:代表1行记录的数据。
insert方法插入的1行记录使用ContentValues寄存。
ContentValues values = new ContentValues();
values.put("name","aserbao");
values.put("age",25);
db.insert("表名",null,values);
生成的SQL语句以下:
insert into <表名>(key1,key2…)values(value1,value2…)
update(String table,ContentValues values,String whereClause,String[] whereArgs);参数说明以下:
1. table:表名
2. valuse:想更新的数据
3. whereClause:代表满足whereClause字句的记录将会被更新
4. whereArgs: 用于whereClause子句传入参数。
ContentValues values = new ContentValues();
values.put("name","imerbao");
int result = db.update("表名",values,"_id>?",new Integer[]{20})
生成的SQL语句以下:
update <table>set key1=value1,key2=value2…… where <whereCluse>
delete(String table,String whereClause,String[] whereArgs)参数说明同上
删除以a开头的人名:
db.delete("表名","person_name like ?",new String[]{"a_"});
对应的SQL语句以下:
delete <table>where <whereClause>
Cursor query(boolean distinct,String table,String[] columns,String whereClause,String[] selectionArgs,String groupBy,String having,String orderBy);
distinct:是不是去重;
table:表名
columns:需要查出来的列名
whereClause:条件子句
selectionArgs:用于在whereClause子句的占位符传入参数值,值在数组中的位置与占位符在语句中的位置必须1致,否则就会有异常。
groupBy:用于控制分组
having:用于对分组进行过滤
orderBy:用于对记录进行排序
limit:用于进行分页
如果想查出表中以i开头的记录,语句以下:
db.query("表名",new String[]{"_id,name,age"}),"name like ?", new String[]{"i%"},null,null,"
方法:
- synchronized SQLiteDatabase getReadableDatabase():
- synchronized SQLiteDatabase getWritableDataable();
- abstract void onCreate(SQLiteDatabase db);
- abstract void onUpdate(SQLiteDatabase db,int oldVersion, int newVersion);
- synchronized void close();
实例4MainActivity代码:
public class MainActivity extends Activity
{
MyDatabaseHelper dbHelper;
Button insert = null;
Button search = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 创建MyDatabaseHelper对象,指定数据库版本为1,此处使用相对路径便可
// 数据库文件自动会保存在程序的数据文件夹的databases目录下
dbHelper = new MyDatabaseHelper(this, "myDict.db3", 1);
insert = (Button) findViewById(R.id.insert);
search = (Button) findViewById(R.id.search);
insert.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
// 获得用户输入
String word = ((EditText) findViewById(R.id.word))
.getText().toString();
String detail = ((EditText) findViewById(R.id.detail))
.getText().toString();
// 插入生词记录
insertData(dbHelper.getReadableDatabase(), word, detail);
// 显示提示信息
Toast.makeText(MainActivity.this, "添加生词成功!"
, Toast.LENGTH_LONG).show();
}
});
search.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
// 获得用户输入
String key = ((EditText) findViewById(R.id.key)).getText()
.toString();
// 履行查询
Cursor cursor = dbHelper.getReadableDatabase().rawQuery(
"select * from dict where word like ? or detail like ?",
new String[] { "%" + key + "%", "%" + key + "%" });
// 创建1个Bundle对象
Bundle data = new Bundle();
data.putSerializable("data", converCursorToList(cursor));
// 创建1个Intent
Intent intent = new Intent(MainActivity.this
, ResultActivity.class);
intent.putExtras(data);
// 启动Activity
startActivity(intent);
}
});
}
protected ArrayList<Map<String, String>>
converCursorToList(Cursor cursor)
{
ArrayList<Map<String, String>> result =
new ArrayList<Map<String, String>>();
// 遍历Cursor结果集
while (cursor.moveToNext())
{
// 将结果集中的数据存入ArrayList中
Map<String, String> map = new HashMap<>();
// 取出查询记录中第2列、第3列的值
map.put("word", cursor.getString(1));
map.put("detail", cursor.getString(2));
result.add(map);
}
return result;
}
private void insertData(SQLiteDatabase db, String word
, String detail)
{
// 履行插入语句
db.execSQL("insert into dict values(null , ? , ?)"
, new String[] {word, detail });
}
@Override
public void onDestroy()
{
super.onDestroy();
// 退出程序时关闭MyDatabaseHelper里的SQLiteDatabase
if (dbHelper != null)
{
dbHelper.close();
}
}
}
public class MyDatabaseHelper extends SQLiteOpenHelper
{
final String CREATE_TABLE_SQL =
"create table dict(_id integer primary " +
"key autoincrement , word , detail)";
public MyDatabaseHelper(Context context, String name, int version)
{
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db)
{
// 第1次使用数据库时自动建表
db.execSQL(CREATE_TABLE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db
, int oldVersion, int newVersion)
{
System.out.println("--------onUpdate Called--------"
+ oldVersion + "--->" + newVersion);
}
}
public class ResultActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.popup);
ListView listView = (ListView) findViewById(R.id.show);
Intent intent = getIntent();
// 获得该intent所携带的数据
Bundle data = intent.getExtras();
// 从Bundle数据包中取出数据
@SuppressWarnings("unchecked")
List<Map<String, String>> list = (List<Map<String, String>>)
data.getSerializable("data");
// 将List封装成SimpleAdapter
SimpleAdapter adapter = new SimpleAdapter(ResultActivity.this
, list,
R.layout.line, new String[] { "word", "detail" }
, new int[] {R.id.word, R.id.detail });
// 填充ListView
listView.setAdapter(adapter);
}
}
再过两天就要回湖南老家了,2016感觉怎样都没做就结束了,2年多没见爸妈了,这次得回家好好和家人聚聚。基础到位,2017,走上大神之路。