我正在制作一个应用程序,我正在使用Android Room Persistence Library来处理我的数据库层.房间图书馆就像魅力一样,一切都很好.但我希望在用户卸载应用程序时删除会创建的数据库.我尝试卸载应用程序,然后再次安装,但不知何故数据库仍然存在,应用程序能够从中获取旧数据.
我想也许是因为我的应用程序数据备份在设置中设置为自动,并且android在云上备份并再次将其恢复,但关闭备份设置并没有帮助.即使这样做对你来说听起来不是一个好的解决方案.
我创建了一个非常简单的类,RoomDatabase如果有助于回答问题,则扩展和下面是代码.
我知道我可以fallbackToDestructiveMigration()在数据库构建器上使用并增加数据库版本.它将清除数据库中的数据.那不是我想要的.
@Database(entities = {UnleashedEntity.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
private static AppDatabase INSTANCE;
public abstract DaoContract MyDao();
public static AppDatabase getAppDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user-database")
.build();
}
return INSTANCE;
}
public static void destroyInstance() {
INSTANCE = null;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
我知道我可以使用ACTION_PACKAGE_REMOVED意图让我的应用程序知道卸载.我想知道的是,是否有配置databasebuilder可以完成工作,以及数据库在卸载后如何保留.
可能是重复的,因为对此主题有很多疑问,但我找不到我想要的东西。我知道这String是一成不变的并且StringBuilder是可变的。我了解这两个术语的本质。我想知道当创建的实例时内存中到底发生了什么StringBuilder。喜欢:
StringBuilder s = new StringBuilder();
Run Code Online (Sandbox Code Playgroud)
s[0] = 'a';这样使用它,所以我们可以调用s数组吗?s.appennd("abc");并且内存中没有足够的连续空间会发生什么"abc"呢?是否会将它s带到新的存储位置,就像string每次我们向string类型变量附加内容时发生的情况一样。我正在创建一个具有蓝牙低功耗的应用程序.我发现有一件有趣的事情.我知道,API level 23除了蓝牙之外,你需要为位置提供权限才能使扫描工作.但即使从设置中关闭蓝牙,我也不知道你可以扫描设备.我关闭了蓝牙(但位置仍然打开)但我仍然可以从扫描结果中看到设备.
这是android中的一个错误,其中android内部使用蓝牙而没有用户意识到它?或者这是在我找不到的地方记录的.
我构建了一个应用程序,它在地图中加载标记,我为 volley JSON 文件获取标记,但我首先需要加载 volley,然后继续执行代码,因为另一种方式显示latLng null错误,此参数加载速度不快,先执行另一个方法并显示为空。
我的加载标记截击代码
public void getMarkers(){
requestQueue = Volley.newRequestQueue(getApplicationContext());
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray saagTracker = response.getJSONArray("saagMRK");
for (int i = 0; i < saagTracker.length(); i++) {
JSONObject object = saagTracker.getJSONObject(i);
title = object.getString(TITLE);
snnipet = object.getString(SNNIP);
latLng = new LatLng(Double.parseDouble(object.getString(LAT)), Double.parseDouble(object.getString(LNG)));
coor = coor + "|" + object.getString(LAT) + "," + object.getString(LNG); // Menambah data marker untuk di tampilkan ke …Run Code Online (Sandbox Code Playgroud) 我正在用android开发一个带有BLE API的Android应用程序.我的应用程序需要连接到BLE设备,并且只要它在范围内并打开就会保持连接状态.我需要从中读取数据,并将数据写入其中.
我试图遵循MVP架构模式,不严格,因为活动是起点.但无论如何,我想知道我应该在哪里与蓝牙进行交互?我正在寻找以下问题的答案.我搜索过StackOverflow,但找不到我要找的东西.
我正在寻找主要的架构指导,以及开发此应用程序的最佳方式.
我正在尝试为表的主键生成一个唯一的ID,我正在使用DateTime.Now.Ticks它.这是现在我们无法使用的要求Identity.
但有时,在循环中它会在连续迭代中生成相同的ID.我的简化代码看起来像这样
While(IncomingData.Next())
{
IncomingData.ID = DateTime.Now.Ticks;
// Other Operations
.
.
.
InsertInDatabase(IncomingData);
}
Run Code Online (Sandbox Code Playgroud)
是因为我的处理器指令/秒的速度大于Ticks测量的精度吗?我正在使用I5 2.9GHZ处理器.虽然我已经通过引入计数变量并将其添加到解决了我的问题ticks.这不是一个好方法.无论如何,有人可以为我分解它,因为a如何tick计算是否依赖于cpu周期?谢谢.
我有3张桌子A,B,C
表A.
TABLE_NAME|table_number
soho 20
foho 30
joho 40
Run Code Online (Sandbox Code Playgroud)
表B
TABLE_ID | TABLE_NAME
1 soho
2 foho
3 joho
Run Code Online (Sandbox Code Playgroud)
表C.
TABLE_ID | TABLE_VALUES
1 xx
1 yy
2 hh
3 no
3 bb
Run Code Online (Sandbox Code Playgroud)
我想要做的是传递table_name作为:paramterfrom和得到table_values表c,如果我通过soho
TABLE_NAME| TABLE_VALUES
SOHO xx
SOHO yy
Run Code Online (Sandbox Code Playgroud)
这是我的尝试,但我得到了table_value所有表格
select a.table_name , c.table_value
from a , b , c
where a.table_name= :myParamter
and
b.table_id= c.table_id
Run Code Online (Sandbox Code Playgroud)
我的查询输出是这样的
ABLE_NAME| TABLE_VALUES
SOHO xx
SOHO yy
SOHO hh
SOHO no
SOHO bb
Run Code Online (Sandbox Code Playgroud) android ×4
c# ×2
android-room ×1
architecture ×1
bluetooth ×1
geofire ×1
java ×1
memory ×1
oracle ×1
sql ×1