问题描述
- Android 使用单例模式创建数据库中的问题
-
如图调用getInstance来获取实例,行参是Context类,此处填了this。如果数据库还没有创建,就会自动调用私有化的构造方法,我的问题是,构造方法处的Context表示什么?实在不理解啊。。。
解决方案
先说一点, 单例模式里面 CoolWeatherDB应该是private的 否则外面都能直接访问了
context就是上下文,包含了下页面跳转的参数什么的
解决方案二:
你传的什么就是什么,多多数可能是activity,或者其他你使用的上下文对象
解决方案三:
改改
增加一个
public static void init(Context context){//在Application中初始化就行了,或者在主界面的activity中也行。 if(coolWeatherDB==null){ coolWeatherDB = new CoolWeatherDB(context) } } public static CoolWeatherDB getInstance(){ return coolWeatherDB }
解决方案四:
context就是上下文,所以要确保context已初始化我们可以把实例化DBManager的步骤放在Activity的onCreate里
解决方案五:
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.thissqlite.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() 看能否解決你的問題
解决方案六:
说上下文的,麻烦解释清楚些。我也知道是上下文
解决方案七:
Context 就是Context对象。 Application Activity 都继承 类 Context 。[ android.content.Context ]
操作apk资源和数据库,都需要 Context 。