Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android ArrayAdapter在插入时崩溃_Java_Android_Sqlite_Android Studio_Android Arrayadapter - Fatal编程技术网

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