Как исправить исключение 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(), будет выполняться в фоновом потоке.