Я использую приведенный ниже код. Выдает ошибку в Android Studio. Я видел и другие соответствующие сообщения, и я понимаю, что ошибка может быть в методе doInBackground, но я не могу понять, какое место кода я должен изменить.
Вот код Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.pass);
buttonLogin = (Button) findViewById(R.id.button);
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v) {
System.out.println("IN ONCLICK");
new CheckLogin().execute();
}
});
}
public class CheckLogin extends AsyncTask<Void, Void ,Void>
{
@Override
protected Void doInBackground(Void... voids) {
System.out.println("DOING BACKGROUND");
try {
System.out.println("IN TRY");
Class.forName("com.mysql.jdbc.Driver");
//Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_app?characterEncoding=latin1","root","/*ajdsikijliaj*$lklk%n^T!#@");
String dbName = "db_app";
String dbUserName = "root";
String dbPassword = "/*ajdsikijliaj*$lklk%n^T!#@";
String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" + dbUserName + "&password=" + dbPassword + "&useUnicode=true&characterEncoding=UTF-8";
Connection con = DriverManager.getConnection(connectionString);
String str = "Select * from users";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(str);
rs.next();
if(rs.getString("Username").equals(username.getText()) && rs.getString("Password").equals(password.getText()))
{ System.out.println("EQUAL");
Intent loginIntent = new Intent(MainActivity.this,login.class);
startActivity(loginIntent);
}
else {
System.out.println("WRONG");
}
stmt.close();
}
catch (ClassNotFoundException | SQLException e)
{
System.out.println("In catch");
e.printStackTrace();
}
return null;
}
}
}
Ошибки, с которыми я сталкиваюсь
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.login10, PID: 17730
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:353)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern : %n^
at java.net.URLDecoder.decode(URLDecoder.java:177)
at com.mysql.jdbc.NonRegisteringDriver.parseURL(NonRegisteringDriver.java:605)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:277)
at java.sql.DriverManager.getConnection(DriverManager.java:569)
at java.sql.DriverManager.getConnection(DriverManager.java:237)
at com.example.login10.MainActivity$CheckLogin.doInBackground(MainActivity.java:75)
at com.example.login10.MainActivity$CheckLogin.doInBackground(MainActivity.java:56)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)