Java Android ArrayAdapter在插入时崩溃
在Java Android ArrayAdapter在插入时崩溃,java,android,sqlite,android-studio,android-arrayadapter,Java,Android,Sqlite,Android Studio,Android Arrayadapter,在autoCompleteTextView中从数据库插入数据时,应用程序崩溃 我有两门课 第一,考试班 public class Test extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); final DataBaseHelper
autoCompleteTextView
中从数据库插入数据时,应用程序崩溃
我有两门课
第一,考试班
public class Test extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
final DataBaseHelper myDb = new DataBaseHelper(this);
final String [] myData = myDb.SelectAllData();
final AutoCompleteTextView autoCom = findViewById(R.id.stations);
ArrayAdapter arrayAdapter=new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, myData);
autoCom.setAdapter(arrayAdapter);
}}
第二,DataBaseHelper类
public class DataBaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "stations";
private static final String TABLE_STATIONS = "stations";
public DataBaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
public String[] SelectAllData() {
try {
String arrData[] = null;
SQLiteDatabase db;
db = this.getReadableDatabase();
String strSQL = "SELECT name FROM " + TABLE_STATIONS;
Cursor cursor = db.rawQuery(strSQL, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
arrData = new String[cursor.getCount()];
int i = 0;
do {
arrData[i] = cursor.getString(0);
i++;
} while (cursor.moveToNext());
}
}
cursor.close();
return arrData;
} catch (Exception e) {
return null;
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}}
问题
我相信您的问题是,您将遇到一个找不到表的错误,因为数据库不包含表。但是,您的应用程序正在捕获异常,并且没有采取任何操作,因此应用程序似乎无法工作
如果你要补充
e.printStackTrace()代码>
在返回null
之前,日志将包含类似的内容:-
2020-01-10 11:32:17.856 E/SQLiteLog: (1) no such table: stations
2020-01-10 11:32:17.856 W/System.err: android.database.sqlite.SQLiteException: no such table: stations (code 1 SQLITE_ERROR): , while compiling: SELECT name FROM stations
2020-01-10 11:32:17.859 W/System.err: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
2020-01-10 11:32:17.859 W/System.err: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:986)
2020-01-10 11:32:17.859 W/System.err: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
2020-01-10 11:32:17.859 W/System.err: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1443)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1382)
2020-01-10 11:32:17.860 W/System.err: at a.so59673151notable.DataBaseHelper.SelectAllData(DataBaseHelper.java:27)
2020-01-10 11:32:17.860 W/System.err: at a.so59673151notable.MainActivity.onCreate(MainActivity.java:14)
- 当然,这可能不是您需要的模式,它只是一个示例。你可以参考
第二部分
由于数据库已经创建,DataBaseHelper的onCreate方法将不会运行,因为它在创建数据库时只运行一个方法。因此,您需要删除数据库。在制定最简单的方法时,应:-
删除/清除应用程序的数据
卸载应用程序
之后,您可以重新运行应用程序
更多
要从数据库中获取数据,您需要将数据添加到数据库中,因此您需要向DataBaseHelper类中添加一个方法,如下所示(假设是上面创建的基本表):-
你可能想读一读
然后,您可以在测试类中获得如下内容:-
final DataBaseHelper myDb = new DataBaseHelper(this); //<<<<< EXISTING LINE
myDb.insertStation("MyFirstStation");
myDb.insertStation("MySecondStation");
final String [] myData = myDb.SelectAllData(); //<<<<< EXISTING LINE
这将导致(安装应用程序后的第一次运行):-
如果可以的话,请张贴stacktrace,这会很有帮助。
public long insertStation(String name) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name",name);
return db.insert(TABLE_STATIONS,null,cv);
}
final DataBaseHelper myDb = new DataBaseHelper(this); //<<<<< EXISTING LINE
myDb.insertStation("MyFirstStation");
myDb.insertStation("MySecondStation");
final String [] myData = myDb.SelectAllData(); //<<<<< EXISTING LINE
final DataBaseHelper myDb = new DataBaseHelper(this);
myDb.insertStation("MyFirstStation");
myDb.insertStation("MySecondStation");
final String [] myData = myDb.SelectAllData();
for (String s: myData) {
Log.d("STATIONINFO","Station Name is " + s);
}
2020-01-10 11:49:42.321 D/STATIONINFO: Station Name is MyFirstStation
2020-01-10 11:49:42.321 D/STATIONINFO: Station Name is MySecondStation