我在尝试将数据发送到数据库时遇到问题。我让主线程为连接打开一个新线程,然后运行 sql 语句并在后台将一行插入到数据库中,同时 UI 切换到另一个 Activity (这是一个相机 Activity )。问题是,正常运行时,线程似乎不会执行,但在调试中运行并单步执行 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());
}
有没有办法强制这个线程执行?
最佳答案
My guess would be the AsyncTask is destroyed when its hosting activity is destroyed as you switch activities. I think you'll want a service to accomplish this.
这就是问题所在。当 Activity 切换时,AsyncTasks 被删除,导致 SQL 永远不会被执行。我添加了一个新 Activity 并调用其中的函数,现在正在执行 SQL。感谢纳什的提示!
关于java - 是否有原因导致线程仅在我强制调试时才执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58207631/