我有一个应用程序,我需要使用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 AsyncTask:
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));
可以被检索,因此我的应用程序不会崩溃。
答案 0 :(得分:1)
定义AsyncTask完成后调用的方法,然后再次在UIThread上运行。
MainThread:调用AsyncTask
AsyncTask:工作并调用doWhenDoneWithBackgroundWork
doWhenDoneWithBackgroundWork:在MainThread上再做一些工作
答案 1 :(得分:1)
您可以在异步任务的onPostExecute
方法上编写代码。