android– 在非Activity类中访问数据库

android– 在非Activity类中访问数据库,第1张

概述我有一些类(SomeClass.class).我想在其中有一些静态方法,如getAllDatabaseItems,getTableItems,insertNewRecord等.如果我这样做的话SQLiteDatabase db = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null); >我需要

我有一些类(SomeClass.class).我想在其中有一些静态方法,如getAllDatabaseItems,gettableItems,insertNewRecord等.

如果我这样做的话

sqliteDatabase db = openorCreateDatabase(DATABASE_name,MODE_PRIVATE,null);

>我需要扩展Activity(但仍然不能在静态方法中使用它)或在每个单独的方法(来自“调用者活动”)中传递“db”变量,这是非常笨重的.

什么是解决方案,所以我可以从一些类调用SomeClass.getAllDatabaseItems()?

@ MobileDev123所以我仍然需要扩展Activity(因为openorCreateDatabase方法)?
如果我有这个类(实际上不是一个活动,我不会那样使用它)

public class Partner extends Activity {@SuppressWarnings("static-access")public Partner(Context mContext) {    myContext = mContext;    db = openorCreateDatabase(DATABASE_name,myContext.MODE_PRIVATE,null);    db.execsql("CREATE table IF NOT EXISTS " + PARTNER_table_name + " (ID INTEGER PRIMARY KEY autoINCREMENT," + name + " VARCHAR);");    db.execsql("CREATE table IF NOT EXISTS " + ADDRESS_table_name + " (ID INTEGER PRIMARY KEY autoINCREMENT," + PARTNER_ID + " INT," + ADDRESS + " VARCHAR," + CITY + " VARCHAR);");}

然后从我的一些活动中调用它

    Partner newPartner = new Partner(this);    partnersItems = newPartner.getAllitems();

我在第4行得到NullExceptionError(Partner.class) – 为什么?如果我使用静态参考

MODE_PRIVATE => (Context.MODE_PRIVATE)

再次它不起作用.

@Falmarri与static相同,如果我传入“this”参数(来自某个调用者类)并在静态方法中将其作为Context参数接收仍然无法成功创建/打开我的数据库(请参阅前面的行)

最佳答案必须有一个叫你班级的活动或服务,你可以做的就是在方便的时候通过. (我更喜欢在构造函数中传递它).

在接收手上使用上下文瞬间.

例如,在MyActivity类中,您可以调用createDatabase(this)或new DataServices(this),但在DataServices类中,参数类型必须是上下文而不是MyActivity.

现在你有了context参数,你可以按照你想要的方式使用它,包括调用openorCreateDatabase().

编辑:添加代码

来自Main.java

DataBase database = new DataBase(this); //This will pass an instance of main. Which is eventually the subclass of Context.java

在DataBase类中:您不需要在那里扩展活动.在构造函数中定义

public DataBase(Context context);
//如果你正在使用eclipse并依赖一些自动化工具,你可以看到类似Main main的东西.但是使用这些行,所以你可以通过传递它来从任何活动或服务中调用它.

定义Context类的字段,并将其引用到上下文arg.

喜欢this.localContext = context;

通过使用localContext变量,您可以调用openorCreateDataBase列.

附加:如果您有任何控件(视图的子类)附加到此,您可以通过调用new DataBase(vIEw.getContext())来实例化DataBase;

我希望这会对你有所帮助….如果需要更多帮助,请随时在下面发表评论.

总结

以上是内存溢出为你收集整理的android – 在非Activity类中访问数据库全部内容,希望文章能够帮你解决android – 在非Activity类中访问数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1139721.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存