2 samuwoo samuwoo 于 2015.05.27 16:53 提问

Android 使用单例模式创建数据库中的问题

图片说明

如图调用getInstance来获取实例,行参是Context类,此处填了this。如果数据库还没有创建,就会自动调用私有化的构造方法,我的问题是,构造方法处的Context表示什么?实在不理解啊。。。

7个回答

edouardzyc
edouardzyc   2015.05.27 16:58

先说一点, 单例模式里面 CoolWeatherDB应该是private的, 否则外面都能直接访问了
context就是上下文,包含了下页面跳转的参数什么的

bdmh
bdmh   Ds   Rxr 2015.05.27 17:01

你传的什么就是什么,多多数可能是activity,或者其他你使用的上下文对象

danielinbiti
danielinbiti   Ds   Rxr 2015.05.27 17:02

改改
增加一个

 public static void init(Context context){//在Application中初始化就行了,或者在主界面的activity中也行。
      if(coolWeatherDB==null){
                coolWeatherDB = new CoolWeatherDB(context)
            }
 }
 public static CoolWeatherDB getInstance(){
    return coolWeatherDB
 }
sl_18500
sl_18500   2015.05.27 17:05

context就是上下文,所以要确保context已初始化,我们可以把实例化DBManager的步骤放在Activity的onCreate里

qq_14824463
qq_14824463   2015.05.27 17:38

13.public class SqliteActivity extends Activity {

14. /** Called when the activity is first created. */

15. @Override

16. public void onCreate(Bundle savedInstanceState) {

17. super.onCreate(savedInstanceState);

18. setContentView(R.layout.main);

19.

20. DBHelper helper = new DBHelper(SqliteActivity.this,"sqlite.db");

21. Log.d("Avin","this is onCreate in SqliteActivity...the helper is -->"+helper);

22. SQLiteDatabase sdb = helper.getReadableDatabase();

23.

24. Log.d("Avin","this is onCreate in SqliteActivity...the sdb is -->"+sdb);

25. sdb = helper.getWritableDatabase();

26. //如果不指定主键 会正常运行吗

27. //试试证明,会!

28.

29. //批量插入

30. String[] cands = {"a","b","c","d"};

31. String[] keys = {"1","2","3","4"};

32.

33. for(int i=0; i<cands.length; i++){

34. ContentValues cv = new ContentValues();

35. cv.put("flt_cand", cands[i]);

36. cv.put("flt_key", keys[i]);

37.

38. sdb.insert("floats", null, cv);

39. }

40.

41.

42. Log.d("Avin","insert...");

43.

44.

45.

46. sdb.close();

47.

48. sdb = helper.getReadableDatabase();

49.

50. Cursor cur = sdb.query("floats", new String[]{"flt_cand"}, "flt_key=?", new String[]{"4"}, null, null, null);

51.

52. while(cur.moveToNext()){

53. String rst = cur.getString(cur.getColumnIndex("flt_cand"));

54. Log.d("Avin", rst);

55. }

56.

57. }

58.}

基本上cur.moveToNext() 看能否解決你的問題

samuwoo
samuwoo   2015.05.27 20:45

说上下文的,麻烦解释清楚些。我也知道是上下文

sirnuo
sirnuo   2015.05.28 08:54

Context 就是Context对象。 Application Activity 都继承 类 Context 。[ android.content.Context ]
操作apk资源和数据库,都需要 Context 。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
android 单例模式 数据库操作
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class BlackNumberOpenHelper extends SQLiteOpenHelper { pu
Android中数据库设计的单例模式
我们先来看看什么是单例模式 单例模式(Singleton) 单例模式是对象的创建模式,单例模式能够确保某个类只有一个单一的实例对象存在,同时能够自行实例化并将单一的实例提供给外界调用的特点,其在实际项目开发中经常被用到。 单例模式 有以下几个特点: A、单例类(Singleton)只能有一个唯一的实例存在。 B、单例类必须有能够自行创建自己的实例对象的能力
彻头彻尾理解单例模式及其在多线程环境中的应用
摘要:      本文首先概述了单例模式产生动机,揭示了单例模式的本质和应用场景。紧接着,我们给出了单例模式在单线程环境下的两种经典实现:饿汉式 和 懒汉式,但是饿汉式是线程安全的,而懒汉式是非线程安全的。在多线程环境下,我们特别介绍了五种方式来在多线程环境下创建线程安全的单例,即分别使用 synchronized方法、synchronized块、静态内部类、双重检查模式 和 Thr
CrashHandler在开发中运用(单例模式)
CrashHandler主要应用于对全局UncaughtException的捕捉,并且根据用户意愿选择是否将其发送给开发者。
设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题
介绍在上篇博客中详细说明了各种单例的写法和问题。这篇主要介绍单例在Android开发中的各种应用场景以及和静态类方法的对比考虑,举实际例子说明。单例的思考写了这么多单例,都快忘记我们到底为什么需要单例,复习单例的本质 单例的本质:控制实例的数量 全局有且只有一个对象,并能够全局访问得到。控制实例数量有时候会思考如果我们需要控制实例的数量不是只有一个,而是2、3、4或者任意多个呢?我们怎样控制实例
Android之什么场景该使用单例模式总结
1、什么是单例模式 单例模式意味着只有一个对象,至于单例模式如何实现就不这里就不多说了,有很多种实现办法。 2、什么时候该使用单例模式?如果不使用单例模式会出现什么问题? 先举2个例子 例子1              当我们做得到最新的短信和最新的通话记录的时候,我们一般采取一个类继承ContentObserver,当数据库里面的内容变化时候,就会触发里面的onc
Android中的单例模式使用场景
1.设计模式实例-单例模式 单例模式,故名思议,是指在一个类中通过设置静态使得其仅创造一个唯一的实例。这样设置的目的是满足开发者的希望??这个类只需要被实例化创建一次,同时因为其为静态的缘故,加载的速度也应该快于正常实例化一个类的速度(理论上)。 在Android开发中,当我们需要创建一个Fragment的时候常常会用到这样的模式,没有代码的学习是虚无的,接下来亮代码学习: public c
使用SQLiteOpenHelper和单例模式操作SQLite数据库
在前文中总结了SQLite数据库的基本用法,本文中将使用SQLiteOpenHelper和单例模式来操作数据库。SQLiteOpenHelper是Android提供的一个管理数据库的工具类,可以用于管理数据库的创建和版本更新。一般的用法是创建它的子类,并扩展它的onCreate()和onUpgrade方法。 SQLiteOpenHelper包含如下方法: 同上文一样,数据仍是手动写死的,实
Android中单例模式应用实战详解
一、单例模式简介 单例模式是对象的创建模式,单例模式能够确保某一个类只有一个单一的实例对象存在,同时能够自行实例化并将单一的实例提供给外界调用的特点,其在项目开发中经常被用到。单例模式是设计模式中最简单的,只有一个单例类,没有其他的层次结构与抽象。该模式需要确保该类只能生成一个对象,通常是该类需要消耗太多的资源或者没有没有多个实例的理由。   二、单例模式特点 综合上面的单例的
单例模式解决多线程的问题
1、懒汉模式把getInstance()方法变成同步方法 public class Singleton{ private static Singleton singleton; private Singleton(){} public static synchronized Singleton getInstance(){ if(singleton == null){ singl