Как вынести подключение бд в отдельный поток???

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
ValertonGT
Сообщения: 2
Зарегистрирован: 29 фев 2016, 10:03

Как вынести подключение бд в отдельный поток???

Сообщение ValertonGT » 04 мар 2016, 11:39

Как вынести подключение бд в отдельный поток???
Вот код программы:

import android.os.Bundle;
import android.view.View;
import android.app.Activity;
import android.widget.Button;
import android.widget.TextView;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MainActivity extends Activity {

TextView textView;
Button button;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

textView = (TextView) findViewById(R.id.textView);
button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

try {
Connection conn = null;
String url = "jdbc:jtds:sqlserver://localhost:.../databaseName=master";
String name = "...";
String password = "...";

try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

try {
conn = DriverManager.getConnection(url, name, password);
textView.setText("я подключился");
} catch (SQLException e) {
e.printStackTrace();
textView.setText("какой-то косяк");
}

} catch (Exception e) {
e.printStackTrace();
}
}

});
}
}


Вот что она выдает на выходе:

03-04 08:59:28.556 28929-28929/com.example.ls.connection_ms_sql W/System.err: android.os.NetworkOnMainThreadException
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.net.InetAddress.getByName(InetAddress.java:305)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.net.InetSocketAddress.<init>(InetSocketAddress.java:105)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.net.InetSocketAddress.<init>(InetSocketAddress.java:90)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:279)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:251)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:331)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.sql.DriverManager.getConnection(DriverManager.java:179)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.sql.DriverManager.getConnection(DriverManager.java:213)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at com.example.ls.connection_ms_sql.MainActivity$1.onClick(MainActivity.java:43)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at android.view.View.performClick(View.java:4770)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at android.view.View$PerformClick.run(View.java:19801)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at android.os.Looper.loop(Looper.java:135)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5261)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:939)
03-04 08:59:28.568 28929-28929/com.example.ls.connection_ms_sql W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:734)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Как вынести подключение бд в отдельный поток???

Сообщение Foenix » 07 мар 2016, 20:33

разберись с try, они у тебя бестолково расставлены
а выносить в отдельный поток нужно не подключение, а работу с базой данных. Тут вариантов много - от асинктаска до всяких там хэндлеров. Загугли NetworkOnMainThreadException и выбери для себя что-нибудь, тут не так все просто.
И форматируй код на форуме.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить