Как исправить исключение NetworkOnMainThreadException?

Я новичок в приложении для Android. разработка, и я пытаюсь разработать приложение. что может достичь MS SQL 2008 R2 с JTDS.

Я использовал базу данных sqllite для создания строки подключения.

я получаю android os.NetworkOnMainThreadException ошибка, ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ мой код ниже,

private void giris() {

    DB db = new DB(this);
    db.open();
    Cursor c = db.Query();
    String ipAdresi = null, Port = null, veriTabaniAdi = null, kullaniciAdi = null, sifre = null;

    while (c.moveToNext()) {
        ipAdresi = c.getString(c.getColumnIndex("IpAdresi"));
        Port = c.getString(c.getColumnIndex("PORT"));
        kullaniciAdi = c.getString(c.getColumnIndex("KullaniciAdi"));
        sifre = c.getString(c.getColumnIndex("Sifre"));
    }

    url = "jdbc:jtds:sqlserver://" + ipAdresi + ":" + Port + ";databaseName=";
    driver = "net.sourceforge.jtds.jdbc.Driver";
    userName = kullaniciAdi;
    password = sifre;
    db.close();
    ResultSet results = null;
    try {
        EditText txtTest = (EditText)findViewById(R.id.editTextip);
        EditText txtName = (EditText)findViewById(R.id.editTextport);
        String user = txtTest.getText().toString();
        String pass = txtName.getText().toString();

        Class.forName(driver).newInstance();
        Connection conn = DriverManager.getConnection(url, userName, password);
        Statement statement = conn.createStatement();
        results = statement.executeQuery("Select * From Kullanıcı where KULLANICI = '" + user + "' and SIFRE = '"+ pass + "'");

        if(!results.next())
        {
            Toast.makeText(this, "Hoşgeldiniz ", Toast.LENGTH_SHORT).show();
            try {
                Class d = Class.forName("com.example.endustrinetbistro.Girismenu");
                Intent intent = new Intent(this, d);
                startActivity(intent);
            } catch (ClassNotFoundException e) {
                Toast.makeText(this, "Hata : " + e.toString(),
                        Toast.LENGTH_SHORT).show();
            }
        }
        else
        {
          do{
                Toast.makeText(this, "Hata : " + "Kullanıcı Adınız, Şifreniz veya Baglantı Ayarlarınızda Bir Sorun var ", Toast.LENGTH_SHORT)
                .show();
          }while(results.next());
        }
    } catch (Exception e) {
        Toast.makeText(this, "Hata : " + e.toString(), Toast.LENGTH_SHORT)
                .show();
    }


}

}

1 ответ

Решение

Всегда используйте асинхронную задачу для переноса вызовов БД или сетевых вызовов. Эти вызовы могут занять много времени для обработки и будет возможность заблокировать пользовательский интерфейс приложения, если он запускается из основного потока. В асинхронной задаче все, что вы делаете в методе doInBackground(), будет выполняться в фоновом потоке.

Другие вопросы по тегам