Member 13905541 Ответов: 0

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 на свой телефон и пытаюсь войти в систему , приложение все время выходит из строя.

0 Ответов