Android基础知识点梳理(3)

SQlite数据库

编写类继承SQLiteOpenHelper

publicMySqlOpenHelper(Contextcontext){

//上下文数据库名结果集(游标)数据库版本

super(context,"sqlite.db",null,1);

}

MySqlOpenHelper helper=new MySqlOpenHelper(getApplicationContext());

//打开或者创建一个数据库。第一次就是创建

SQLiteDatabasedatabase1=helper.getWritableDatabase();

//如果磁盘满了,返回一个只读的

SQLiteDatabasedatabase2=helper.getReadableDatabase();

 

@Override

public void onCreate(SQLiteDatabase db) {

//数据库底层全是以string存,来提升性能;

db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20))");

}

版本跟换之后会执行适合做更新表的结构

SQLiteDatabase db=helper.getWritableDatabase();

ContentValues values=new ContentValues();

values.put("name", "dsy");

values.put("phone", "256521");

long l=db.insert("info", null, values);

db.close();

SQLiteDatabase db=helper.getReadableDatabase();

//返回值代表影响的行数

int delete=db.delete("info", "name=?", new String[]{"dsy"});

db.close();

SQLiteDatabase db=helper.getWritableDatabase();

ContentValues values=new ContentValues();

values.put("phone", "123");

int update=db.update("info", values, "name=?", new String[]{"dsy"});

db.close();

SQLiteDatabase db=helper.getWritableDatabase();

//第二个参数null表示查询所有

 Cursor cursor=db.query("info", new String[]{"phone"}, "name=?", new String[]{"dsy"}, null, null, null);

            if(cursor!=null&&cursor.getCount()>0){

                    while(cursor.moveToNext()){

                            System.out.println(cursor.getString(0));

                    }

            }

            db.close();

SQLiteDatabase db=helper.getWritableDatabase();

            //第二个参数null表示查询所有

            Cursor cursor=db.query("info", new String[]{"phone"}, "name=?", new String[]{"dsy"}, null, null, null);

            if(cursor!=null&&cursor.getCount()>0){

                    while(cursor.moveToNext()){

                            System.out.println(cursor.getString(0));

                    }

            }

            db.close();

public void zz(View v){

            db=helper.getWritableDatabase();

            db.beginTransaction();

            try {

db.execSQL("update count set money=money+100 where name=?",new Object[]{"dsy"});

db.execSQL("update count set money=money-100 where name=?",new Object[]{"scy"});

                    db.setTransactionSuccessful();

} catch (Exception e) {

Toast.makeText(getApplicationContext(), "服务器忙请稍后!", 1).show();

}finally{

db.endTransaction();

}

    }

 

  • 数据库事物操作
  • 创建的数据库位于项目包名下的databases/
  • 在命令行进入目录,使用sqlite3 数据库名字来查询
  • 增删查改操作可以使用传统的语句操作,也可以使用一下API操作
  • 创建数据库onUpgrade
  • 创建数据库onCreate方法合适做表结构的初始化
  • 创建需要写带Context的参数的构造方法
  • 使用Sqlite

LitePal2.0数据库

Android studio 需要在build.grade中修改一下配置,使用Eclipse需要导入一下jar包

 <https://github.com/LitePalFramework/LitePal/blob/master/downloads/litepal-2.0.0.jar>

dependencies {
    implementation 'org.litepal.android:core:2.0.0'
}

 

  1. 在app/src/main 下新建assets文件夹,在文件夹中新建litepal.xml

<litepal>

<dbname value=""></dbname>

<version value="1"></version>

<list>
    <mapping class="org.litepal.litepalsample.model.Book" />
</list>

</litepal>

  1. 编写实体类Book继承LitePalSupport作为映射
  2. 在maniFest的application中加入

android:name="org.litepal.LitePalApplication"

  1.  在Activity中直接调用Connector.getDatabase();
  2. 增删查改实体类需要继承LitePalSupport

对象.setXx()

对象.save()

LitePalSupport.deleteAll(指定表名和约束);

LitePalSupport.findAll(指定表名和约束);

findFirst

findLast

LitePalSupport.select("name","price").find(指定表名);  //查询指定列

LitePalSupport.where("page>?","200").find(指定表名);

LitePalSupport.order("price desc").find(指定表名);

LitePalSupport.limit(3).find(指定表名);

LitePalSupport.limit(3).offset(1).find(指定表名);

LitePalSupport.findBySQL("sql语句");

常规对象.set

  1.  对象.save()
  2. 对象.updateAll("name=? And author=?","a","b")
  3. 对象.setToDefault(“列名”) 对象.updateAll() 用来把字段值更新成默认值

 

 

ListView的基本用法

 

优化1:应为ListView 快速拖动会导致内存溢出 原因是应为消耗的内存大于释放的内存,所以需要使用缓存机制

   @Override

public View getView(finalint position, View convertView, ViewGroup parent) {

 

ViewHolder holder;

if (convertView == null) {

convertView = mInflater.inflate(R.layout.item,null);

holder = new ViewHolder();

/*得到各个控件的对象*/

holder.title = (TextView) convertView.findViewById(R.id.ItemTitle);

holder.text = (TextView) convertView.findViewById(R.id.ItemText);

holder.bt = (Button) convertView.findViewById(R.id.ItemButton);

convertView.setTag(holder);//绑定ViewHolder对象

}else{

holder = (ViewHolder)convertView.getTag();//取出ViewHolder对象

}

/*设置TextView显示的内容,即我们存放在动态数组中的数据*/

holder.title.setText(getDate().get(position).get("ItemTitle").toString());

holder.text.setText(getDate().get(position).get("ItemText").toString());

holder.bt.setOnClickListener(new OnClickListener() {

@Override

publicvoid onClick(View v) {

});

return convertView;

}

优化2ListView Layout_height需要使用 match-parent

   使用wrap-content需要校验多次,运行更多次的getView()方法,效率就差了

 

  • 设置监听 setOnItemClickListener
  • 新建类继承BaseAdapter,实现构造函数 getCount getItem getItemId getView
  • 如何使用
    1. 在布局加入ListView控件
    2. 在Activity中初始化
    3. 设置数据
      1. lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, strs));
      2. SimpleAdapter mSimpleAdapter = new SimpleAdapter(this,listItem,new String[] {"ItemImage","ItemTitle", "ItemText"},  

ListView的原理

显示数据的原理:MVC模式 Model(数据) view(ListView) Controller(Adapter)

工作原理:https://blog.csdn.net/guolin_blog/article/details/44996879

RecyclerView的基本用法

 

  • 配置compile 'com.android.support:recyclerview-v7:24.2.1'
  • <android.support.v7.widget.RecyclerView  />
  •  初始化RecyclerView
    1. 获取控件
    2. 设置布局
      1. LinearLayoutManager manager=new LinearLayoutManager(this);   manager.setOrientation(LinearlayoutManager.HORIZONTAL);//水平列 
      2. StaggerdGridLayoutManager layoutManager=new StaggerdGridLayoutmanager(3,StaggerdGRidLayoutManager.VERTICAL);//垂直的三行瀑布流
    3. setlayoutmanager
    4. setAdapter
  • 定义adapter
    1. 编写类继承RecyclerView.Adapter<内部Viewholder类>
    2. 定义内部类Viewholder继承RecyclerView.ViewHolder   //用来初始化item的控件
    3. 定义构造方法传入数据集合
    4. onCreateViewHolder  //创建传入布局View对象的ViewHolder  在这里设置点击事件
    5. onBindViewHolder  //展示数据
    6. getItemCount

RecyclerView的原理

https://blog.csdn.net/huyongl1989/article/details/51449701

inflater对象的获取三种方式

View view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item,null);

View view=View.inflate(getApplicationContext(), R.layout.item, null);

View View=getSystemService(LAYOUT_INFLATER_SERVICE).inflate(R.layout.item,null);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值