线程没有在android中运行

时间:2013-09-19 09:53:32

标签: java android mysql multithreading android-asynctask

我正在尝试使用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();
        }
    });

    }

当我运行程序时,线程没有启动/运行。我没有得到任何例外。请帮帮我。

4 个答案:

答案 0 :(得分:2)

您正在线程中显示Toast。你应该在ui线程上更新ui。

内部线程的run方法使用runOnUiThreadrunOnUiThread是您的活动类的一种方法。添加@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()方法

上调用Toast
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();
                }

我们必须等到线程完成它。