播放历史记录的实现原理,很简单-小菜最推荐的就是用本地数据库来实现。对于android端SQLiteOpenHelper的优点我就不多说了,我们来简单了解一下程序逻辑:
历史播放记录,无非就是把用户的相关操作进行本地保存,我这里简单的实现就是,当视频播放完毕或播放界面onPause() 时,判断是否已经有记录(有则改无则加),至于要保存的对象就由你们自己来构建了。我倒也很想和你们一起分享,关键是我都快25了还没有对象,对 就是还没有对象(有什么想法的记得加我啊);
//SQLiteOpenHelper 代码:
- public class MyDatabaseHelper extends SQLiteOpenHelper {
- public MyDatabaseHelper(Context context) {
- super(context, "play_history", null, 1);// 创建数据库名
- // TODO Auto-generated constructor stub
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
- // TODO Auto-generated method stub
- db.execSQL("create table videos(id Integer primary key autoincrement,vdId Integer,vdName text,vdUrl text,vdImg text)");// 创建表,数据库语句,非常简单哈
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
- // TODO Auto-generated method stub
- onCreate(db);
- }
- }
//增删改查的操作
- public class MySQLManager {
- private final SQLiteDatabase db;
- public MySQLManager(Context context) {
- MyDatabaseHelper helper = new MyDatabaseHelper(context);
- db = helper.getWritableDatabase();
- }
- /**
- * 添加方法
- *
- * @param dataBean
- */
- public void insertData(PlayHistoryInfo dataBean) {
- ContentValues values = new ContentValues();
- values.put("vdId", dataBean.getVdId());
- values.put("vdName", dataBean.getVdName());
- values.put("vdUrl", dataBean.getVdUrl());
- values.put("vdImg", dataBean.getVdImg());
- db.insert("videos", null, values);
- }
- /**
- * 删表
- */
- public boolean deleteById(String userId) {
- boolean isOk = false;
- db.beginTransaction();//
- try {
- int res = db.delete("videos", "id=?", new String[] { userId });
- if (res > 0) {
- isOk = true;
- }
- db.setTransactionSuccessful();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- db.endTransaction();
- }
- return isOk;
- }
- /**
- * 修改信息
- *
- * @param item
- * @param cutoff
- */
- public void updata(int vdDuration) {
- db.execSQL("update videos set vdDuration=? where vdId=?",new Object[] { vdDuration, vdId, numId });
- db.close();
- }
- /* * 根据videoId来查询历史数据
- * @param videoId
- * @return
- */
- public selectByVideoIdData(String videoId) {
- List<PlayHistoryInfo> list = new ArrayList<>();
- String sql = "select * from videos" + " where vdId = "+ Integer.parseInt(videoId);
- db.beginTransaction();
- try {
- Cursor cursor = db.rawQuery(sql, null);
- while (cursor.moveToNext()) {
- String vdName = cursor.getString(cursor .getColumnIndex("vdName"));
- String vdUrl = cursor.getString(cursor.getColumnIndex("vdUrl"));
- String vdImg = cursor.getString(cursor.getColumnIndex("vdImg"));
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- db.endTransaction();
- }}
- }
OK本地数据库的方法已基本完成,下面来说一下如何调用既可了,把MySQLManager new出来就可以了;
- MySQLManager manager = new MySQLManager(context);
- manager.selectByVideoIdData(videoId);
标题是随便取的啊!各位大神见笑了,至于怎么去判断是否有网络(下一篇详细讲解),怎么去知道哪个数据是已经播放过的(把本地数据查询出来和后台数据一对比不就知道了);