我正在尝试使用jdbc驱动程序将我的android应用程序与mysql数据库连接。我搜索了很多,发现使用线程或AsyncTask我们可以直接连接到mysql。但我在asynctask中发现很难,所以我使用线程来做到这一点。这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.search_customer);
TextView t = (TextView) findViewById(R.id.Search_Customer_textView1);
Button b = (Button) findViewById(R.id.Search_Customer_button1);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Thread timer=new Thread(){
public void run(){
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://192.168.1.102:3306/outsidelaundry", "root", "");
Statement stmt = con.createStatement();
String query = "select Name from nonmember";
ResultSet rs = stmt.executeQuery(query);
while(rs.next())
{
val = val + rs.getString(1) + "\n";
}
Toast.makeText(getApplicationContext(), val, Toast.LENGTH_LONG).show();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
};
timer.start();
Toast.makeText(getApplicationContext(), "pressed", Toast.LENGTH_LONG).show();
}
});
}
当我运行程序时,线程没有启动/运行。我没有得到任何例外。请帮帮我。
答案 0 :(得分:2)
您正在线程中显示Toast。你应该在ui线程上更新ui。
内部线程的run方法使用runOnUiThread
。 runOnUiThread
是您的活动类的一种方法。添加@Override
Thread timer=new Thread(){
@Override
public void run(){
Log.i("Thread","Running");
// you should see the log message if the thread runs
try {
// do othere operations
runOnUiThread(new Runnable() {
@Override
public void run() {
// dispaly toast here;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
};
timer.start();
你也可以使用asynctask。
答案 1 :(得分:1)
您需要在runOnUiThread()
方法
activity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), val, Toast.LENGTH_LONG).show();
}
});
答案 2 :(得分:0)
通过查看您的代码,我可以看到异常正在生成,但您已缓存它,因此在运行代码时不会发生可见的强制关闭。
简单介绍布局中的文本框,并尝试将其设置为响应文本。这证实您对JDBC或数据库没有任何问题。
如果成功,那么AsynTask是最好用的。
答案 3 :(得分:0)
试试这个......
try{
timer.join();
}
catch (Exception e) {
e.printStackTrace();
}
我们必须等到线程完成它。