我正在测试一个小型 Android 应用程序,它所做的只是连接到 Microsoft Azure SQL 数据库以提取数据并进行处理。我刚开始使用连接代码并解决了所有错误,但现在应用程序在加载后崩溃/停止工作。
package com.example.azureconnectionstringtest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new DownloadDataTask().execute();
}
private class DownloadDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
String connectionString = "jdbc:sqlserver://ocgiy0eg0n.database.windows.net" + ";" +
"database=MyDatabaseName " + ";" +
"user=MyUserName" + ";" +
"password=MyPassword";
Connection connection = null; // For making the connection
Statement statement = null; // For the SQL statement
ResultSet resultSet = null; // For the result set, if applicable
try {
// Ensure the SQL Server driver class is available.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// Establish the connection.
connection = DriverManager.getConnection(connectionString);
String sql = "Select * from Master_Product_List";
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
if(resultSet.next()) {
//TO DO data processing....
}
} catch (Exception ex) {
Toast.makeText(getApplicationContext(), ex.toString(), Toast.LENGTH_LONG).show();
}
return null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
下面是我的 logcat:当我运行应用程序时出现此错误:不幸的是 AppName 已停止。
04-14 13:33:40.200: E/AndroidRuntime(1016): FATAL EXCEPTION: AsyncTask #1
04-14 13:33:40.200: E/AndroidRuntime(1016): java.lang.RuntimeException: An error occured while executing doInBackground()
04-14 13:33:40.200: E/AndroidRuntime(1016): at android.os.AsyncTask$3.done(AsyncTask.java:299)
04-14 13:33:40.200: E/AndroidRuntime(1016): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
04-14 13:33:40.200: E/AndroidRuntime(1016): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
04-14 13:33:40.200: E/AndroidRuntime(1016): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
04-14 13:33:40.200: E/AndroidRuntime(1016): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-14 13:33:40.200: E/AndroidRuntime(1016): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-14 13:33:40.200: E/AndroidRuntime(1016): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-14 13:33:40.200: E/AndroidRuntime(1016): at java.lang.Thread.run(Thread.java:856)
04-14 13:33:40.200: E/AndroidRuntime(1016): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
04-14 13:33:40.200: E/AndroidRuntime(1016): at android.os.Handler.<init>(Handler.java:197)
04-14 13:33:40.200: E/AndroidRuntime(1016): at android.os.Handler.<init>(Handler.java:111)
04-14 13:33:40.200: E/AndroidRuntime(1016): at android.widget.Toast$TN.<init>(Toast.java:324)
04-14 13:33:40.200: E/AndroidRuntime(1016): at android.widget.Toast.<init>(Toast.java:91)
04-14 13:33:40.200: E/AndroidRuntime(1016): at android.widget.Toast.makeText(Toast.java:238)
04-14 13:33:40.200: E/AndroidRuntime(1016): at com.example.azureconnectionstringtest.MainActivity$DownloadDataTask.doInBackground(MainActivity.java:56)
04-14 13:33:40.200: E/AndroidRuntime(1016): at com.example.azureconnectionstringtest.MainActivity$DownloadDataTask.doInBackground(MainActivity.java:1)
04-14 13:33:40.200: E/AndroidRuntime(1016): at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-14 13:33:40.200: E/AndroidRuntime(1016): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-14 13:33:40.200: E/AndroidRuntime(1016): ... 4 more
04-14 13:33:40.280: W/Trace(1016): Unexpected value from nativeGetEnabledTags: 0
04-14 13:33:40.360: W/Trace(1016): Unexpected value from nativeGetEnabledTags: 0
04-14 13:33:41.760: W/Trace(1016): Unexpected value from nativeGetEnabledTags: 0
04-14 13:33:41.860: W/Trace(1016): Unexpected value from nativeGetEnabledTags: 0
04-14 13:33:42.622: W/Trace(1016): Unexpected value from nativeGetEnabledTags: 0
04-14 13:33:42.622: W/Trace(1016): Unexpected value from nativeGetEnabledTags: 0
04-14 13:33:42.710: W/Trace(1016): Unexpected value from nativeGetEnabledTags: 0
04-14 13:33:43.091: W/Trace(1016): Unexpected value from nativeGetEnabledTags: 0
04-14 13:33:43.091: I/Choreographer(1016): Skipped 91 frames! The application may be doing too much work on its main thread.
04-14 13:33:53.800: I/Process(1016): Sending signal. PID: 1016 SIG: 9