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
上传中...
上传图片
插入图片