为了账号安全,请及时绑定邮箱和手机立即绑定

Android攻城狮的第二门课(第3季)

难度初级
时长 6小时 0分
学习人数
综合评分9.57
162人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.3 逻辑清晰
  • SQLiteOpenHelper的简单方法
    查看全部
    1 采集 收起 来源:SQLiteOpenHelper

    2017-07-10

  • 点击事件 case R.id.bind://绑定服务 intent2=new Intent(MainActivity.this,MyBindService.class); startService(intent2);//StartService 和 BindService相结合实现服务(要在onDestroy销毁),去掉就是单独的BinderService。 bindService(intent2, connection, BIND_AUTO_CREATE);//第二个参数是连接对象,第三个参数是必须要填的一个常量,没写的话将无法自动创建Service。 break; case R.id.Unbind:// 解绑服务 unbindService(connection); break; 单纯使用 BindService还是有很多隐患的。实际上可以结合 StartService 和 BindService。如图,使用同一个通信 intent2 ,就可以实现。 但比较麻烦的是,你打开了服务,就要相应地去关闭服务,所以要在 MainActivity 中重写 onDestroy()方法: @Override protected void onDestroy() { // TODO Auto-generated method stub stopService(intent2); unbindService(connection);//解绑 super.onDestroy(); } 这样在 Activity 被销毁的时候,就会停止服务,并解除了绑定。这样一来,即使程序被强制退出,也不会报错(之前会报一些和Service相关的错)。 注意:解绑只能使用一次,多次使用会报错,另外当启动源在没有解绑的情况下退出程序也会报错。 摘自评论区: bindService();方法中的第二个参数必须实现,ServiceConnection conn = new ServiceConnection(){};里边有两个方法可以暂时不管。如果写成null是会报错的。
    查看全部
    1 采集 收起 来源:Bind启动

    2017-06-08

  • 广播接收器---“普通的广播接收器” 1.首先发送广播。 Intent intent=new Intent(); intent.setAction("BC_ONE"); //设置动作(就是给改广播一个名字,用于过滤),与广播接收器的过滤条件匹配 intent.putExtra("msg", "这是我发送的广播");//放入数据 sendBroadcast(intent); //将广播发送出去 2.然后新建一个类 BC1 ,继承 BroadcastReceiver 并实现方法 onReceive(): public void onReceive(Context context, Intent intent) { //该广播接收器注册之后,如果接受到广播,会调用该回掉函数。之前通过回掉函数中的intent来获取信息 String s = intent.getStringExtra("msg"); System.out.printf("receive1收到消息:"+s); } 4.在AndroidManifest.xml中注册广播接收器 <!-- 注册广播接收器,name为全限定名 --> <receiver android:name="com.example.broadcastreceiverdemo.MyBroadcastReceiver1"> <!-- 广播接收器过滤器 ,priority设置优先级,-1000~1000--> <intent-filter android:priority="100"> <!-- 过滤Action为“BC_ONE”的广播,只接受这个 --> <action android:name="BC_ONE"/> </intent-filter> </receiver> 其他知识点总结: 一、优先级 1.通过在xml注册时设置优先级。数越大,优先级越高。就会越先调用 2.可以动态注册,如果动态注册。优先级最大。高于任何xml中注册的。 3.如果动态注册和静态注册都有,则会执行两次onReceive
    查看全部
  • 组件篇—BroadcastReceiver 1. Boastcast(广播)是一种广泛运用的在应用程序之间传输信息的机制。 2. BroadcastReceiver(广播接受者)是对发送出来的广播进行过滤并响应的一类组件,它就是用来接收来自系统和应用中的广播。 3. 用途: * 当开机完成后系统会产生一条广播;有些程序会接收此广播而启动程序,这就是“自启动”。 * 当网络状态改变时系统会产生一条广播;一般用于提示用户。 * 当电池电量改变时,系统会产生一条广播; * 其他。 为什么需要广播? 假如没有广播,那么,很多事情都要自己做,需要自己想办法去获取数据。 有了广播,我们只需等待广播告诉我们信息。 广播的优点: 1. 大大减少开发的工作量和开发周期 2. 作为应用开发者,只需要掌握 BroadcastReceiver,不需要了解底层实现。 使用方法:发送: 1. 把信息装入一个 Intent对象(如Action、Category) 2. 通过调用相应的方法将 Intent对象以广播方式发送出去:sendBroadcast()、sendOrderBroadcast()、sendStickyBroadcast() 接收:当 Intent 发送以后,所有已经注册的 BroadcastReceiver 会检查注册时的 IntentFilter 是否与发送的 Intent 相匹配,若匹配则就会调用 BroadcastReceiver的 onReceive()方法。所以当我们定义一个 BroadcastReceiver 的时候,都需要实现 onReceive()方法。 注意:BroadcastReceiver需要注册 :静态注册和代码注册 1. BroadcastReceiver 生命周期只有十秒左右。 2. BroadcastReceiver 里面不能做一些耗时操作(就是因为生命周期短) 3. 耗时操作应该通过发送 Intent 给 Service,由Service来完成 4. 不能使用子线程。使用子线程不可靠!因为BroadcastReceiver生命周期太短,可能接收都结束了,子线程还没结束。接收器一旦结束了,Receiver所在的进程很容易在需要的时候被杀死,因为此时它是空进程(没有任何活动组件的进程就是空进程),一旦宿主进程被杀掉了,那么正在工作的子进程也会被杀死。
    查看全部
  • 记得加上<uses-permission android:name="android.permission.READ_CONTACTS"/> 号码的查询不再像前面那种直接查询,而是必须通过联系人的Id去查找对应的电话,如果不这么做,查出来的电话号码可能不是当前联系人的电话号码。 依然需要通过ContentResolver来查询(在上节课的游标循环之内),然后返回一个游标Cursor,再通过游标去查询号码。这样就形成了“游标套游标”。 需要导入的包:android.provider.ContactsContract.CommonDataKinds.Phone; 1. 查询的 Uri : Phone.CONTENT_URI。 2. 查询的内容:号码除了数字以外,还有分类型(例如移动号码、家庭号码),所以对应两个属性:Phone.NUMBER,Phone.TYPE。查询内容就是 new String[]{Phone.NUMBER,Phone.TYPE}。 3. 查询条件,是根据 Id 去查的,写做 Phone.CONTACT_ID+"="+id。注意等号一定要加引号。 4. 最后两个属性这里不需要,都写成 null 就可以了。 ------------- 通过游标查询电话之后,记得关闭游标c1。注意这里的关闭是在 if (c1!=null)语句块之内,如果写到外面则会存在空指针异常。
    查看全部
  • 当应用程序在安装时,系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库应该都是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE。 创建的文件保存在/data/data/<package name>/files目录 openFileOutput(fileName,MODE):第一个参数是文件的名字,第二个参数是权限,权限可以叠加的。 如果希望文件被其他应用读和写,可以传入: MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE,也就是说,权限是可以合理地叠加在一起。
    查看全部
    1 采集 收起 来源:文件操作案例

    2018-03-22

  • 权限与文件存储路径 MODE_PRIVATE - 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。 MODE_APPEND - 模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE - 用来控制其他应用是否有权限读写该文件 MODE_WORLD_READABLE - 表示当前文件可以被其他应用读取 MODE_WORLD_WRITEABLE - 表示当前文件可以被其他应用写入
    查看全部
    2 采集 收起 来源:File类方法介绍

    2017-06-05

  • 首先创建数据库和表(与上节课一样) SQLiteDatabase db = openOrCreateDatabase("stu.db", MODE_PRIVATE, null); db.execSQL("create table if not exis。。。) /增加:使用 ContentValues 向表格中添加数据 ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("sex", "男"); values.put("age",19); long rawId = db.insert("stutb", null, values);//表名,,将values包含的数据插入到表格中 values.clear();//清空values,方便下次操作,不然数据会叠加。 values.put("name", "张三封"); values.put("sex", "男"); values.put("age",29); db.insert("stutb", null, values); values.clear(); values.clear(); //删除 db.delete("stutb", "name like ?", new String[]{"%封%"});//表名,删除条件,条件的补充 //修改 values.put("sex", "女"); db.update("stutb", values, "_id > ?", new String[]{"3"});//将全部ID>3的人的性别改为女 //查看(表名,null意味着所有列都查找,条件与占位符,占位符具体,"groupBy","having","orderBy"排序) Cursor c = db.query("stutb", null, "_id > ?", new String[]{"0"}, null, null, "name"); if (c!=null) { String[] columns = c.getColumnNames(); while (c.moveToNext()) {
    查看全部
  • 注意事项 1. 命名规范:数据库的名字最好有后缀".db",方便在第三方数据库工具上使用。 2. 主键必须以下划线开头,例如“_id”,原因在于适配器,例如像ListView的适配器只通过下划线去找主键。 3. 操作完之后,记得手动关闭游标Cursor和数据库。 ----------------------- --Cursor是Android查询数据后得的一个管理数据集合的类,正常情况下,如果查询得到的数据量较小时不会有内存的问题,而且虚拟机能够保证Cursor最终会被释放掉。 --然而,如果Cursor的数据量特别大,特别是如果里面有Blob信息的时候,应该保证Cursor占用的内存被及时地清理掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动地将Cursor关闭,因为在源码中我们发现,如果等到垃圾回收器来回收,也就是如果不手动关闭,系统就会报错,会给用户以错误提示。 ------------------------ 如图,游标接口 Cursor 的一些方法
    查看全部
  • 通过execSQL进行数据操作(比较复杂,不建议使用) // 打开或创建(如果有就打开,没有就创建,没有“覆盖”的问题)一个数据库 SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);// 数据库名,权限,游标(不需要) //创建表(usertb),创建主键(_id),创建列(name,age,sex db.execSQL("create table if not exists usertb (_id integer primary key autoincrement, name text not null, age integer not null, sex text not null)";); db.execSQL("insert into usertb (name,age,sex) values('张三','男',20)";);//查询语句 Cursor cursor = db.rawQuery("select * from usertb",null); // 查询数据,以游标形式,第二个参数代表条件 if (cursor!=null){ //表示查询成功 while(cursor.moveToNext()){ Log.i("info","_id"+cursor.getInt(cursor.getColumnIndex("_id")));// 先获得列的编号,再通过编号获得对应的值。 Log.i("info","name="+cursor.getString(cursor.getColumnIndex("name"))); Log.i("info","sex="+cursor.getString(cursor.getColumnIndex("sex"))); Log.i("info","age="+cursor.getInt(cursor.getColumnIndex("age"))); } cursor.close(); // 释放资源 } db.close(); // 关闭数据,释放内存
    查看全部
  • 在button中设置android:onClick="doClick" String name=pref.getString("username","" ); if (name==null) { checkBox1.setChecked(false); }else { checkBox1.setChecked(true); ed_name.setText(name); } } public void doclick(View v){ switch (v.getId()) {
    查看全部
  • 通过getSharedPreferences获取SharedPreferences对象(文件名,权限) 数据在DDMS中的各自的包名下的文件里 通过定义Editor对象,编辑SharedPreference对象 editor.putString 存入所需的文件 putString 存入整数型数据 getString获得存入的字符数据 .commit(); 表示提交操作
    查看全部
  • Android的四种数据存储方式: 1. SharedPreferences 2. SQLite 3. Content Provider 4. File --------------------- SharedPreferences: 1. 是一种轻型的数据存储方法; 2. 本质是基于 XML 文件存储 key-value 键值对数据; 3. 通常用来存储一些简单的配置信息。一般是放置当前应用的属性值,信息量不多,所以用数据库的话不划算,还可能造成时间上的浪费。 只能实现非常简单的存放数据和读取数据。SharedPreferences只能识别简单的数据类型,比如String、int,对于复杂的类型,比如自定义的类型,可能就无法存储了(或者通过转码操作转变为字符串也倒是可以存储)。 SharedPreferences属于Android自带的轻量级的存储类,效率并不是很高。 ---------------------- 要点: 1. SharedPreferences对象本身只能获取数据而不支持存储和修改,存储和修改是通过 Editor 对象实现的; 2. 实现 SharedPreferences 存储的步骤: (1)获得 SharedPreferences 对象; (2)获得 SharedPreferences.Editor 对象; (3)通过 Editor 接口的 putXxx 方法保存 key-value对,其中的Xxx表示不同的数据类型; (4)通过 Editor 接口的 commit 方法保存 key-value对。
    查看全部
  • 重写ContentProvider 第三方软件只能实现重写过的功能 比如说只实现了增删,第三方软件就只能增删 onCreate() 在ContentProvider创建后被调用 delete(Uri,uri,String selection,String[] selectionArgs) 根据Uri删除selection指定的条件所匹配的全部记录 insert(Uri uri,ContentValues values) 根据Uri插入Values对应的数据 update(Uri uri,ContentValues,String selection,String[] selectionArgs) 根据uri修改selection指定的条件所匹配的全部记录 query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder) 根据uri查询出selection指定的条件所匹配的全部记录,并且可以指定查询那些列,以什么方式排序(sortOrder) getType(Uri uri) 返回当前uri的MIME类型,如果该URI对应的数据可能包括多条记录 MIME类型字符串就是以vnd.android.dir/开头 如果该URI对应的数据只有一条记录 该MIME类型字符串就是以vnd.android.cursor.item/开头
    查看全部
  • 存储可被处理的值
    查看全部

举报

0/150
提交
取消
课程须知
本课程是Android开发课程的中后期部分,学习之前要求对一些知识点有一定的了解: 1、已经掌握了Java基础 2、已经熟悉或者了解Android中的监听事件原理 3、已经熟悉或者了解一种以上的数据库,并掌握基本的SQL语句
老师告诉你能学到什么?
1、初步掌握Android手势识别的原理以及实际使用 2、初步掌握Android的数据存储方式 3、深度了解Android中的组件 4、熟悉了解Android常用的系统服务并对服务的使用有新的认识

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!