1

我在这里遇到了另一个关于 android 的问题...我正在尝试使用该代码连接到我的 mysql 数据库:

  public void testDB() {
    TextView tv = (TextView)this.findViewById(R.id.textView1);
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, user, pass);
        /* System.out.println("Database connection success"); */

        String result = "Database connection success\n";
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("select * from users");
        ResultSetMetaData rsmd = rs.getMetaData();

        while(rs.next()) {
            result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
            result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
            result += rsmd.getColumnName(3) + ": " + rs.getString(3) + "\n";
        }
        tv.setText(result);
    }
    catch(Exception e) {
        e.printStackTrace();
        tv.setText(e.toString());
    }   

}

在 AVD 中,我收到此错误:

10-23 16:49:08.103: W/System.err(12939): java.sql.SQLException: Unable to connect to any hosts due to exception: android.os.NetworkOnMainThreadException

我认为库中有问题,这是真的吗?但是我在bluestack模拟器上尝试了这个,我认为使用android姜饼并且连接效果很好......有人知道我该怎么做吗?

4

4 回答 4

2

异常信息非常丰富:您正在主线程中执行不允许的网络操作。本文是后台操作指南。

于 2012-10-23T14:58:24.303 回答
2

你得到一个NetworkOnMainThreadException。使用 Honeycomb 和 forward,您不能在主线程上执行任何网络任务,这意味着您需要将代码移到单独的线程中。我建议使用AsyncTask

于 2012-10-23T14:57:15.627 回答
1

这是因为您正在主线程中进行网络操作,请考虑使用AsyncTaskfor 网络操作。

实现示例AsyncTaskhttp ://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/

在 中进行网络操作doInBackground

于 2012-10-23T14:56:36.363 回答
1
 java.sql.SQLException: Unable to connect to any hosts due to exception: android.os.NetworkOnMainThreadException

所有网络调用都应该在单独的线程上,而不是在主线程上。您需要使用 AsynchTask 进行网络调用。

这是关于如何为此目的编写 asynchtask 的android 教程。

于 2012-10-23T14:56:37.407 回答