content provider 的query使用查询系统数据,获取所有音乐的title
2016-11-18 20:35
417 查看
Content Provider 相当于数据的接口,通过它可以 把程序内部的数据向其他应用公开,这样的话,
其他应用程序就可以通过Context.getContentResolver方法获得ContentResolver对象,
并使用ContentResolver.insert,ContentResolver.delete,ContentResolver.update,ContentResolver.query4个方法对程序内部的数据进行增删改查。
这里只用一个简单实例表明如何用content provider 的query获取所有音乐的title
先写一个类 MusicLoader
这个类写好之后,就要在activity里面来使用它呈现数据了。
这样就结束了,很简单吧,现在让我们看一看运行效果。
大小: 79.2 KB
查看图片附件
其他应用程序就可以通过Context.getContentResolver方法获得ContentResolver对象,
并使用ContentResolver.insert,ContentResolver.delete,ContentResolver.update,ContentResolver.query4个方法对程序内部的数据进行增删改查。
这里只用一个简单实例表明如何用content provider 的query获取所有音乐的title
先写一个类 MusicLoader
package com.life.testmusic; import android.annotation.SuppressLint; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore.Audio.Media; import android.util.Log; import java.util.ArrayList; import java.util.List; public class MusicLoader { private static final String TAG = "com.example.nature.MusicLoader"; private static List<MusicInfo> musicList = new ArrayList<MusicInfo>(); private static MusicLoader musicLoader; private static ContentResolver contentResolver; //单例模式 public static MusicLoader instance(ContentResolver pContentResolver) { if (musicLoader == null) { //pContentResolver由activity的getContentResolver()方法传过来, contentResolver = pContentResolver; musicLoader = new MusicLoader(); } return musicLoader; } @SuppressLint("LongLogTag") private MusicLoader() { //query()返回Cursor 对象,类似与数据库的Cursor ,通过它来查询数据 //第一个参数是一个Uri,对应了获取哪种信息,这里是获取音乐媒体信息,其余暂时都设置为null Cursor cursor = contentResolver.query(Media.EXTERNAL_CONTENT_URI, null, null, null, null); if (cursor == null) { Log.i(TAG, "Music Loader cursor == null."); //光标移动到第一行 } else if (!cursor.moveToFirst()) { Log.v(TAG, "Music Loader cursor.moveToFirst() returns false."); } else { //获取到title列的索引displayNameCol int displayNameCol = cursor.getColumnIndex(Media.TITLE); do { //传入displayNameCol 拿出title String title = cursor.getString(displayNameCol); MusicInfo musicInfo = new MusicInfo(); musicInfo.setTitle(title ); //加入list musicList.add(musicInfo ); //移动到下一行继续获取下一首歌的信息 } while (cursor.moveToNext()); //关闭cursor. cursor.close(); } } public List<MusicInfo> getMusicList() { return musicList; } //内部类,用于存储歌曲信息 public static class MusicInfo { private long id; private String title; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } }
这个类写好之后,就要在activity里面来使用它呈现数据了。
//获取单例,通过单例来getMusicList();, //其中参数是getContentResolver()获取到的ContentResolver对象 musicList=MusicLoader.instance(getContentResolver()).getMusicList(); String name=""; for (int i=0;i<musicList.size();i++) name+=musicList.get(i).getTitle()+"\n"; //textview, tvSongs用于呈现歌曲title tvSongs.setText(name);
这样就结束了,很简单吧,现在让我们看一看运行效果。
大小: 79.2 KB
查看图片附件
相关文章推荐
- Query对象在获取表的所有的数据的时候,使用list()和 iterator()有什么区别?
- C#遍历系统所安装的打印机,使用WMI方式获取打印机的所有属性
- ?使用SPSiteDataQuery和SPQuery查询不到数据
- 使用SQL查询所有数据库名和表名
- jQuery从服务器获取数据使用post(字典查询的功能),服务器端php返回数据
- 使用ADO.Net获取Sql Server数据库系统中所有数据库的名字
- 使用OPENDATASOURCE 函数,在查询中实现从ACCESS获取数据,并插入SQLSERVER2000表中
- 请使用PL/SQL来按父子层次关系查询出表的所有数据
- 使用wxPython获取系统剪贴板中的数据的教程
- Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串
- C#遍历系统所安装的打印机,使用WMI方式获取打印机的所有属性
- 网络数据获取及查询系统目标
- 深入浅出SharePoint—使用SPSiteDataQuery 查询多个List中的数据
- 营配数据质量核查,关于营销mis系统与配电gis系统里面的sql语句查询,做为积累使用,下次就不用重复写同样的语句了。
- 使用OPENDATASOURCE 函数,在查询中实现从ACCESS获取数据,并插入SQLSERVER2000表中
- C#遍历系统所安装的打印机,使用WMI方式获取打印机的所有属性
- JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询
- proc文件系统中cpu,内存,网络数据使用情况获取(附检测网速源码)
- hibernate在使用sql查询query自动转化成model类型数据,query.addEntity
- 使用wxPython获取系统剪贴板中的数据的教程