我正在创建一个有五个活动的应用程序.我有一个类,其中包含在所有五个活动中使用的函数和变量.我在每个活动中创建了一个局部变量,像这样初始化类;
localclass = new globalclass(getResouces());
Run Code Online (Sandbox Code Playgroud)
我是android/java开发的新手,当我尝试了一些东西时,我对内存足迹感到疑惑.在第一个开始的活动中,localclass被设置为如上所述.然后,我尝试从其他活动中访问此变量,并在活动第二,第三等中成功完成此操作;
localclass = com.firstactivity.localclass;
Run Code Online (Sandbox Code Playgroud)
我使用的变量之一是对应用程序资源的引用.在第二次的活动中我不会得到这样的资源;
res = getResources();
Run Code Online (Sandbox Code Playgroud)
但是像这样;
res = com.firstactivity.localclass.res;
Run Code Online (Sandbox Code Playgroud)
只要变量是静态的,这就可以工作.我也以相同的方式访问globalclass中的函数.
这是不好的实践吗?
我找到了问题的原因,见下文!
简而言之,由于备份功能恢复了具有相同版本号的旧数据库方案,因此在我的SQLiteHelperClass中都没有调用onUpdate()或onCreate().
我遇到了一个我无法解决的奇怪问题.当我在模拟器中运行我的应用程序时,一切正常.当我在手机上将其作为apk-debug.apk运行时,一切正常,但当我尝试在手机上将其作为已签名的应用程序运行时,我收到此错误:
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(no such column: listId (code 1): , while compiling: SELECT * FROM mytable WHERE listId=100 ORDER BY id,name,conc ASC)
Run Code Online (Sandbox Code Playgroud)
如果我删除设置中的所有应用程序数据并重新运行应用程序,一切都在签名的应用程序版本中工作,尽管它最初是首次安装在手机上!
mytable是通过运行db.execSQL(DATABASE_CREATE_MY_TABLE)创建的:(列名是在其他地方设置的常量)
private static final String DATABASE_CREATE_MY_TABLE = "CREATE TABLE "
+ MY_TABLE + "("
+ ID + " INTEGER, "
+ LIST_ID + " INTEGER, "
+ NAME + " STRING, "
+ CONC + " REAL, "
+ "PRIMARY KEY (" + ID …Run Code Online (Sandbox Code Playgroud)