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

NetworkOnMainThreadExceptionが発生しています。Honeycomb以降では、メインスレッドでネットワークタスクを実行できません。つまり、コードを別のスレッドに移動する必要があります。AsyncTaskをお勧めします。

于 2012-10-23T14:57:15.627 に答える
2

例外は非常に有益です。許可されていないメインスレッドでネットワーク操作を行っています。この記事は、バックグラウンド操作のガイドです。

于 2012-10-23T14:58:24.303 に答える
1

これは、メインスレッドでネットワーク操作を行っているため、ネットワーク操作にAsyncTaskforを使用することを検討してください。

AsyncTask実装 例:http: //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を使用する必要があります。

これは、この目的のために非同期タスクを作成する方法に関するAndroidチュートリアルです。

于 2012-10-23T14:56:37.407 に答える