我有一个需要使用 AsyncTask 的应用程序,但我遇到的问题是主线程走得太远并最终导致我的应用程序崩溃,因为我的 Connect1 线程尚未检索到需要继续的信息。我想知道我怎么能让线程等到 AsyncTask 线程消失,然后主线程才能继续。
代码:
private void gNameOriginTag() {
TextView tV;
Connect1 connect1 = new Connect1();
connect1.execute();
// Set the long name for the chosen.
tV = (TextView) view.findViewById(R.id.gLName);
tV.setText(columns.get(4)); //<<<< Error is here.
....
}
Connect1 异步任务:
private class Connect1 extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
Connection conn = null;
Statement stmt = null;
try {
// STEP 2: Register JDBC driver
Class.forName(JDBC_DRIVER);
// STEP 3: Open a connection
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// STEP 4: Execute a query
stmt = conn.createStatement();
// STEP 5a: Extract data from result set
ResultSet rs = stmt.executeQuery("SELECT * FROM gs WHERE name ='"
+ gSelected + "'");
ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
int x = 1;
while (rs.next()) {
while (x < rsmd.getColumnCount()) {
// Retrieve Strings & Add it to the ArrayList.
columns.add(rs.getString(x));
x++;
}
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
// Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
// Handle errors for Class.forName
e.printStackTrace();
} finally {
// finally block used to close resources
try {
if (stmt != null)
stmt.close();
} catch (SQLException se2) {
}// nothing we can do
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
}// end finally try
}// end try
return "";
}
}
我这样做的原因是因为 android 2.3.3 没有在我学到的主线程上运行 mysql,所以我正在尝试学习 AsyncTask,所以我在“代码:”中试图完成的事情是以某种方式使主线程等待/加入(我还读到暂停主线程是不好的,所以我更加迷失在做什么)等待 Connect1 线程完成,以便:
tV.setText(columns.get(4));
可以检索,所以我的应用程序不会崩溃。