【发布时间】:2021-07-21 11:45:18
【问题描述】:
这是我的 MainActivity.java
我是安卓工作室的新手。我尝试将 android studio 与 mysql 连接,但是当我运行模拟器时显示 androidapp 继续停止。我调试,它将停在 void doInBackground 上。我的代码有什么问题吗?
package de.vogella.mysql.androidmysql;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
TextView text, errorText;
Button show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.textView);
errorText = (TextView) findViewById(R.id.textView2);
show = (Button)findViewById(`enter code here`R.id.button);
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Task retrieveData = (Task) new Task().execute();
}
});
}
class Task extends AsyncTask<Void, Void, Void> {
String records = "", error = "";
/*final TextView textShow = findViewById(R.id.textView);
final TextView textShow2 = findViewById(R.id.textView2);
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
//static final String DB_URL = "jdbc:mysql://" + ConnectURL.DATABASE_URL + "/" + ConnectURL.DATABASE_NAME
@Override
protected void onPreExcute(){
String Xmsg= "Connecting to database...";
textShow.setText(Xmsg);
}*/
@Override
protected Void doInBackground(Void... voids) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn =DriverManager.getConnection("jdbc:mysql://192.168.0.124:3306/android","andro","1234");
stmt = conn.createStatement();
**when i debug the emulator stop here and crashed**
ResultSet resultSet = statement.executeQuery("Select * FROM table_name");
while (rs.next()) {
records += rs.getString(1) + " " + rs.getString(2) + "\n";
}
} catch (Exception e) {
error = e.toString();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
text.setText(records);
if (error != "")
errorText.setText(error);
super.onPostExecute(aVoid);
}
}
}
这是我的activity_main.xml我觉得这里没什么问题
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="24sp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Records"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView2"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
这是我从 logcat 得到的信息
2021-04-28 15:01:32.162 5615-5660/de.vogella.mysql.androidmysql E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: de.vogella.mysql.androidmysql, PID: 5615
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$4.done(AsyncTask.java:415)
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:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/sql/SQLType;
at com.mysql.cj.jdbc.DatabaseMetaData.getInstance(DatabaseMetaData.java:765)
at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1175)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at de.vogella.mysql.androidmysql.MainActivity$Task.doInBackground(MainActivity.java:61)
at de.vogella.mysql.androidmysql.MainActivity$Task.doInBackground(MainActivity.java:40)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList[[zip file "/data/app/~~X8MIj6EwtZt9_UXjh82Wmg==/de.vogella.mysql.androidmysql--7dPP3pspOuT7aIGSh_6jg==/base.apk"],nativeLibraryDirectories=[/data/app/~~X8MIj6EwtZt9_UXjh82Wmg==/de.vogella.mysql.androidmysql--7dPP3pspOuT7aIGSh_6jg==/lib/x86, /system/lib, /system_ext/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.mysql.cj.jdbc.DatabaseMetaData.getInstance(DatabaseMetaData.java:765)
at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1175)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at de.vogella.mysql.androidmysql.MainActivity$Task.doInBackground(MainActivity.java:61)
at de.vogella.mysql.androidmysql.MainActivity$Task.doInBackground(MainActivity.java:40)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
2021-04-28 15:01:32.349 5615-5660/de.vogella.mysql.androidmysql I/Process: Sending signal. PID: 5615 SIG: 9
【问题讨论】:
-
可以分享一下logcat吗
-
是的,当然。我已经上传了