android 在Fragment 中使用ormlite 数据库

在ormlite官方的demo中,Activity 中访问数据库是extends ormliteBaseActivity.

那在Fragment中怎么使用呢?

简单的:

public class OrmLiteFragment extends Fragment {

    private DatabaseHelper databaseHelper = null;

    protected DatabaseHelper getHelper() {
        if (databaseHelper == null) {
            databaseHelper =
                OpenHelperManager.getHelper(getActivity(), DatabaseHelper.class);
        }
        return databaseHelper;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (databaseHelper != null) {
            OpenHelperManager.releaseHelper();
            databaseHelper = null;
        }
    }
}

模ormliteBaseActivity

/**
 * 只能在OnStart 以后的生命周期中调用。
 * 
 * @author Administrator
 *
 * @param <H>
 */
public class OrmBaseLiteFragment <H extends OrmLiteSqliteOpenHelper> extends Fragment {
 private volatile H helper;
 private volatile boolean created = false;
 private volatile boolean destroyed = false;
 private static Logger logger = LoggerFactory.getLogger(OrmBaseLiteFragment.class); 

 /**
  * Get a helper for this action.
  */
 public H getHelper() {
  if (helper == null) {
   if (!created) {
    throw new IllegalStateException("A call has not been made to onCreate() yet so the helper is null");
   } else if (destroyed) {
    throw new IllegalStateException(
      "A call to onDestroy has already been made and the helper cannot be used after that point");
   } else {
    throw new IllegalStateException("Helper is null for some unknown reason");
   }
  } else {
   return helper;
  }
 }
 
 /**
  * Get a connection source for this action.
  */
 public ConnectionSource getConnectionSource() {
  return getHelper().getConnectionSource();
 }
 
// /**
//  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//  * 
//  * 
//  */
// @Override
// public View onCreateView(LayoutInflater inflater , ViewGroup container , Bundle savedInstanceState)
// {
//  if (helper == null) {
//   helper = getHelperInternal(getActivity());
//   created = true;
//  }
//  super.onCreate(savedInstanceState);
//  return container;
// }
 
 @Override
 public void onStart() {
  super.onStart();
  if (helper == null) {
   LogUtil.e("==============ormFragment", "getHelperInternal   in  ormFragment");
   helper = getHelperInternal(getActivity());
   created = true;
  }
 }
 
 
 
 @Override
 public void onDestroy() {
  super.onDestroy();
  releaseHelper(helper);
  destroyed = true;
 }
 /**
  * This is called internally by the class to populate the helper object instance. This should not be called directly
  * by client code unless you know what you are doing. Use {@link #getHelper()} to get a helper instance. If you are
  * managing your own helper creation, override this method to supply this activity with a helper instance.
  * 
  * <p>
  * <b> NOTE: </b> If you override this method, you most likely will need to override the
  * {@link #releaseHelper(OrmLiteSqliteOpenHelper)} method as well.
  * </p>
  */
 protected H getHelperInternal(Context context) {
  @SuppressWarnings({ "unchecked", "deprecation" })
  H newHelper = (H) OpenHelperManager.getHelper(context);
  logger.trace("{}: got new helper {} from OpenHelperManager", this, newHelper);
  return newHelper;
 }
 /**
  * Release the helper instance created in {@link #getHelperInternal(Context)}. You most likely will not need to call
  * this directly since {@link #onDestroy()} does it for you.
  * 
  * <p>
  * <b> NOTE: </b> If you override this method, you most likely will need to override the
  * {@link #getHelperInternal(Context)} method as well.
  * </p>
  */
 protected void releaseHelper(H helper) {
  OpenHelperManager.releaseHelper();
  logger.trace("{}: helper {} was released, set to null", this, helper);
  this.helper = null;
 }
 @Override
 public String toString() {
  return getClass().getSimpleName() + "@" + Integer.toHexString(super.hashCode());
 }
 
 
 
}
时间: 2024-12-19 13:24:28

android 在Fragment 中使用ormlite 数据库的相关文章

在 Android 应用程序中使用 SQLite 数据库以及怎么用

part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开源的,不论什么人都能够使用它.很多开源项目((Mozilla, PHP, Python)都使用了 SQLite. SQLite 由下面几个组件组成:SQL 编译器.内核.后端以及附件.SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE).使调试.改动和扩展 SQLite 的内核变得更加方便. 图

Android的Fragment中的互相通信-桥梁activity

Android的Fragment中的互相通信-桥梁activity 效果图如下: 项目结构图如下: Fragment1: package com.demo.fragmenttongxin; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import an

在android中使用OrmLite数据库框架

android中的数据库框架OrmLite,是对android中自带数据库的封装.下面按步骤说明如何使用. 最重要的是继承OrmLiteSqliteOpenHelper,获取得到helper对象 在里面重写onCreate,onUpgrade,close等方法,完成数据库表的创建,更新,资源释放. 获取到helper对象后,就可以使用helper的getDao方法获取dao来对数据表进行操作.下面是对数据库访问的Dao进行的封装 1.继承OrmLiteSqliteOpenHelper获取help

Android 在Fragment中执行onActivityResult不被调用的简单解决方法

在Android开发中,我们经常会用到FragmentActivity下嵌套多个Fragment,但是在开发过程中会发现在嵌套的Fragment中使用onActivityResult回调方法没有被执行. 网上也有很多解决方法,但是说的都比较麻烦,所以今天给大家推荐一种超简单的用法, 在Fragment和FragmentActivity中都要重写onActivityResult方法,并且要保证两者的请求码或者结果码一致.代码如下: 在FragmentActivity中 @Override prot

android,在fragment中使用listview,不使用listfragment

public class LeftFragment extends Fragment{ private ListView listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.lesson_table_left, null); listV

Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法

问题: 使用 AS 在 Fragment 中调用 getActivity() 方法的时候会出现可能为空指针的提醒 使用 monkey 多次十万次测试,会出现 getActivity() NullPointException 的情况 思考 为什么会出现这种情况,按说当前 Activity 存在,在 Fragment 中使用 getActivity() 是可以拿到的,不应该为空的 源码 fragment 的生命周期 以下源码基于 API 26 getActivity 可能为 Null, 跟进源码,可

Android的Fragment中onActivityResult不被调用的解决方案

常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至两次或多层Fragment嵌套使用.这个时候,在第二级或者更深级别的Fragment调用startActivityForResult方法时,将无法收到onActivityResult回调.阅读FragementActivity源码后发现,原来是源码里没有处理嵌套Fragment的情况,也就是说回调只到第一级Fragment,就没有继续分发.我们可以实现一个自己的AppCompatActivity,来实现继续分发,

Android的Fragment中onActivityResult不被调用的解决方案(绝对管用)

常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至Fragment下层层嵌套使用.这个时候,在第二级或者更深级别的Fragment将无法收到onActivityResult回调,查看FragementActivity的源码发现: public void startActivityFromFragment(Fragment fragment, Intent intent, : int requestCode) { : if (requestCode == -1)

Android 在fragment中实现返回键单击提醒 双击退出

尝试用mvp架构加dagger2来重写了一下,大致功能都实现了,还没有全部完成. 项目地址 接近完成的时候,想在天气信息页面实现一个很常见的功能,也就是点击屏幕下方的返回键的时候不是返回到上一个activity或者退出,而是提醒用户再按一次就会退出. 实现思路也很简单,就是对返回键的动作进行监听和拦截,然后重写成需要的动作,因为在我的程序中activity只作为调度器使用,真正的View功能在fragment中,所以返回键的动作捕捉只能以接口形式 BaseFragment实现这个接口,代码如下: