本帖最后由 小鲁哥哥 于 2017-12-19 15:50 编辑
【济南中心】Android课程同步笔记day03:Android应用开发基础
数据存储: android常用的本地存储方式有三种,如下: *文件存储:文件(I/O)存储方法,常用于存储大数量的数据,但是缺点是更细数据将是一件困难的事情。 *SharePerference存储:它的本质是一个xml文件,常用于存储简单的参数设置 *数据库存储:即SLQite数据库,它是一个轻量级的数据库,支持基本的SQL语法,是常被采用的一种数据存储方式 SQLite: 开源项目,它为嵌入式轻量级的数据库
SQLite创建: 步骤如下 1. 定义一个数据库创建的帮助类 MyDataBaseOpenHelper extends SQLiteOpenHelper
2. 指定数据库文件的名称,数据库的版本号.默认的游标工厂
3. 通过helper得到一个可写或者是可读的数据库,数据库才会被创建
helper.getWritableDatabase();
SQLiteExpert: SQLite Expert Professional是一款功能强大的SQLite数据库管理工具,允许用户在SQLite服务器上执行创建、编辑、复制、提取等操作。SQLite Expert支持SQLite所有的特征,包括一个可视化查询生成器,一个SQL编辑与语法突出 SQLiteExpert使用:1.将xx.db文件导入到SQLiteExpert中。 2.选中要查看的表,点击Data选项卡,馋看表中的内容。
3.DDL database definition language 查看sql语句。
数据库的增删改查:
* 增
insert into student (name,phone) values ('张三','110')
* 删
delete from student where name='张三'
* 改
update student set phone ='119' where name='张三'
* 查
select * from student where name=?
数据库事务:
>事务:保证一组操作要么同时成功,要么同时失败.
代码如下:
[Java] 纯文本查看 复制代码 /**
* 测试事务(安全性)
*/
public void testTransaction(){
PersonSQLiteOpenHelper mHelper = new PersonSQLiteOpenHelper(getContext());
SQLiteDatabase db = mHelper.getWritableDatabase();
// - laozhou 转账给 xiaosan. 1000块
try {
// 1. 开始事物
db.beginTransaction();
// laozhou 减去 1000 salary = salary - 1000
db.execSQL("update person set salary = salary - 1000 where name = 'laozhou'");
// int result = 1 / 0;
// xiaosan 加上 1000
db.execSQL("update person set salary = salary + 1000 where name = 'xiaosan'");
// 2. 设置成功点. 可以设置多个, 把刚刚的所有操作一次提交
db.setTransactionSuccessful();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 3. 结束事物
db.endTransaction();
db.close();
}
}
ListView:ListView作为android系统用比较重要的一个控件,要求大家对它熟练掌握
> 是系统给我们提供的一个可以显示很多个item的控件.
> 这个控件合理的控制了界面的显示,即使有1000000万个item要显示他也能扛得住
ListView的使用:Listview+adapter+数据源
其中适配器是用于将数据源中的数据映射到ListView中,而这种关联的建立通常是在adapter的构造函数中实现。
Adapter:为ListView的适配器,适配器一般有四种:ArrayAdapter,SimpleAdapter,BaseAdapter,CursorAdapter
ArrayAdapter:
[Java] 纯文本查看 复制代码 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
String[] objects = new String[]{"Animation","App","content","Media","NFC","OS"};
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item, objects));
}
SimpleAdapter:
[Java] 纯文本查看 复制代码 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("icon", R.drawable.ic_menu_preferences);
map1.put("name", "功能设置");
data.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("icon", R.drawable.ic_menu_recent_history);
map2.put("name", "时钟设置");
data.add(map2);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("icon", R.drawable.ic_menu_refresh);
map3.put("name", "同步设置");
data.add(map3);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("icon", R.drawable.ic_menu_report_image);
map4.put("name", "图片设置");
data.add(map4);
lv.setAdapter(new SimpleAdapter(this, data, R.layout.item, new String[]{"icon","name"}, new int[]{R.id.iv,R.id.tv}));
}
BaseAdapter:
[Java] 纯文本查看 复制代码 public class MainActivity extends Activity {
//mvc中的view,视图
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查找视图
lv = (ListView) findViewById(R.id.lv);
//设置控制器 controller
lv.setAdapter(new MyAdapter());
}
//BaseXXX SimpleXXX DefalutXXX
/**
* 控制器 用来控制listview如何显示
*/
private class MyAdapter extends BaseAdapter{
//控制listview里面有多少个item
@Override
public int getCount() {
return 1000000;
}
//返回某个位置显示的view对象。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(MainActivity.this);
System.out.println("getview:"+position);
tv.setText("我是文本:"+position);
tv.setTextSize(24);
return tv;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
}
Android样式:
android样式设置在styles.xml文件中,可以自定义自己的样式
[XML] 纯文本查看 复制代码 <resources>
<style name="text_content_style">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#0000ff</item>
<item name="android:textSize">20sp</item>
</style>
<style name="text_title_style" parent="@style/text_content_style">
<item name="android:textSize">25sp</item>
</style>
<style name="text_content_style.sub">
<item name="android:textSize">28sp</item>
</style>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
</resources> Android主题:android中activity的主题可以自己自主设置,在menu文件中设置
[XML] 纯文本查看 复制代码 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
</menu>
在Activity代码中写下如何代码就可以生效了
[Java] 纯文本查看 复制代码 getMenuInflater().inflate(R.menu.main, menu);
|