java - 一个线程只有在我强制它进行调试时才会执行,有什么原因吗?
问题描述
我在尝试将数据发送到数据库时遇到问题。我让主线程为连接打开一个新线程,然后运行一条 sql 语句并将一行插入到后台的数据库中,同时 UI 切换到另一个活动(这是一个相机活动)。问题是当正常运行时,线程似乎没有执行,但是在调试中运行并单步执行 ASyncTask 的每一行时,它会执行。唯一一次更新数据库是在我逐步调试时。该数据库位于 Microsoft SQL Server 上。
我已经尝试过多次,并且只有当我通过调试单步执行时,线程才会始终执行。
在主线程中
SendToDB sendFalsePositive = new SendToDB();
sendFalsePositive.execute();
正在执行的 AsyncTask
Connection conn;
try {
// com.microsoft.sqlserver.jdbc.sqlserver.SQLServerDriver
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
// jdbc and jtds are the drivers that allow the connection to outside databases
// sq41ddb.na.steelcase.net:3250 is the server and port that are need to connect to the scrapMinder database
String connString = "jdbc:jtds:sqlserver://SQLSERVER;databaseName=DATABASENAME;user=USERNAME;password=PASSWORD";
conn = DriverManager.getConnection(connString);
Log.i("Connection", "Open");
Log.i("SEND TO DB", "Date: " + date + " Time: " +time);
Statement statement = conn.createStatement();
statement.executeUpdate("Insert Into DATABASENAME (Date, Time) \n" +
"values ('" + date + "', '" + time +"' );"); //SQL SELECT STATEMENT TO INSERT INTO DATABASE
statement.setQueryTimeout(0);
} catch (Exception e) {
Log.e("Error SendToDB", e.toString());
}
有没有办法强制这个线程执行?
解决方案
我的猜测是,当您切换活动时,它的托管活动被破坏时,AsyncTask 会被破坏。我想你会想要一个服务来完成这个。
这就是问题所在。当活动切换导致 SQL 永远不会执行时,正在删除 AsyncTasks。我添加了一个新活动并在其中调用了函数,现在正在执行 SQL。谢谢你的小费纳什!
推荐阅读
- postgresql - 生产环境中的 DOCKER 环境
- vba - 为什么当我尝试使用 VBA 运行循环时,味精框不起作用
- java - 如何在容器化 Jenkins 中使用主机系统中的 JDK 11 构建 Spring Boot 2
- javascript - 对数组的每个项目进行 api 调用
- javascript - 使用 discord.js 在文本中提及名字
- python - 使用python循环从binance获取更多数据
- amazon-redshift - Access denied to S3 when using COPY command with IAM role
- javascript - 为什么 IDBKeyRange.upperBound 在 Firefox 中不起作用?
- sql-server - NULL 是必要的吗?
- testing - 错误错误:找不到模块'testcafe-hammerhead'