Android studio + SQL server / база данных
Привет,
Я новичок и хочу подключить свое приложение к серверу MSSql. Я перепробовал множество решений от google но ничего не сделал :/
Я плохо знаю английский.
Что я уже пробовал:
Это моя основная деятельность.
import android.content.Intent; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class MainActivity extends AppCompatActivity { SQLConnection connectionClass; EditText edtuserid,edtpass; Button btnlogin; ProgressBar pbbar; TextView txtView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtView = (TextView) findViewById(R.id.txtView1); connectionClass = new SQLConnection(); //the class file edtuserid = (EditText) findViewById(R.id.edtuserid); edtpass = (EditText) findViewById(R.id.edtpass); btnlogin = (Button) findViewById(R.id.btnlogin); pbbar = (ProgressBar) findViewById(R.id.pbbar); pbbar.setVisibility(View.GONE); btnlogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DoLogin doLogin = new DoLogin(); // this is the Asynctask doLogin.execute(""); } }); } public class DoLogin extends AsyncTask<String,String,String> { Boolean isSuccess = false; String userid = edtuserid.getText().toString(); String password = edtpass.getText().toString(); String z = ""; @Override protected void onPreExecute() { pbbar.setVisibility(View.VISIBLE); } @Override protected void onPostExecute(String r) { pbbar.setVisibility(View.GONE); Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show(); if(isSuccess) { Intent i = new Intent(MainActivity.this, Connection.class); startActivity(i); finish(); } } @Override protected String doInBackground(String... params) { if(userid.trim().equals("")|| password.trim().equals("")) z = "Please enter User Id and Password"; else { try { Connection con = SQLConnection.CONN(); if (con == null) { z = "Error in connection with SQL server"; txtView.setText(z); } else { String query = "SELECT * FROM *****"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); if(rs.next()) { z = "Login successfull"; txtView.setText(z); isSuccess=true; } else { z = "Invalid Credentials"; txtView.setText(z); isSuccess = false; } } } catch (Exception ex) { isSuccess = false; z = "Exceptions" + " "+ ex.getMessage() ; txtView.setText(z); } } return z; } } }
Это мой класс связи
import android.os.StrictMode; import android.util.Log; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class SQLConnection { private static final String LOG = "DEBUG"; private static String ip = "*****"; private static String port = "*****"; private static String classs = "net.sourceforge.jtds.jdbc.Driver"; private static String db = "*****"; private static String un = "*****"; private static String password = "*****"; public static Connection CONN() { Connection conn = null; String ConnURL = null; StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); try { Class.forName(classs); ConnURL = "jdbc:jtds:sqlserver://" + ip +":"+port+";" + "databaseName=" + db + ";user=" + un + ";password=" + password + ";"; conn = DriverManager.getConnection(ConnURL); } catch (SQLException e) { Log.d(LOG, e.getMessage()); } catch (ClassNotFoundException e) { Log.d(LOG, e.getMessage()); } return conn; } }
CHill60
Так что же происходит, когда вы запускаете свой код?
Member 13905541
Я нажимаю кнопку "Войти" и ничего. Он все время загружается
Member 13905541
Я неправильно написал код? или что-то не так с SQL server ?
David Crow
Что произошло, когда вы прошли через каждую строку кода с помощью отладчика?
Member 13905541
Хм я точно не помню потому что теперь я из своего дома а компьютер с Android Studio стоит у меня в офисе :/
APK работает нормально.Когда я не ставлю Acc/Pass, покажите мне "пожалуйста, введите идентификатор пользователя и пароль", но когда я ставлю случайный или правильный Acc/Pass и нажимаю "войти", индикатор выполнения начинает загружаться и никогда не останавливается :/
Member 13905541
Я удалил Порт из ConnURL и получил несколько ошибок
В приложении для android эти ошибки появились.
1.только исходный поток, создавший иерархию представлений, может касаться своих представлений.
2.Ошибка в соединении с SQL server.
На этом отладчике.
1.D/DEBUG: сетевая ошибка IOException: отказано в подключении
David Crow
"1.только исходный поток, создавший иерархию представлений, может касаться своих представлений."
Ты не можешь позвонить setText()
в doInBackground()
.
Member 13905541
Я удалил весь код setText (), и теперь на экране появляется надпись "Ошибка в связи с SQL server". "D/DEBUG: сетевая ошибка IOException: отказано в соединении" на Debug+Logcat
David Crow
Исключение говорит вам, что не так: соединение отказано. Правильный ли адрес? Видеть здесь для того, как он должен быть отформатирован. Вы предоставляете соответствующие учетные данные для входа в систему? Работает ли SQL Server на правильном порту?
Member 13905541
Когда я устанавливаю APK на свой телефон и пытаюсь войти в систему , приложение все время выходит из строя.