Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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 Studio中的数组索引超出范围_Java_Android Studio_Android Emulator_Android Sqlite - Fatal编程技术网

Java Android Studio中的数组索引超出范围

Java Android Studio中的数组索引超出范围,java,android-studio,android-emulator,android-sqlite,Java,Android Studio,Android Emulator,Android Sqlite,我正在尝试创建一个应用程序,它从使用SQLite创建并使用AndroidPlot绘制的数据库中获取值。MainActivity.java中出现问题的部分如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this); da

我正在尝试创建一个应用程序,它从使用SQLite创建并使用AndroidPlot绘制的数据库中获取值。MainActivity.java中出现问题的部分如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);

    databaseAccess.open();
    List<String> voltages = databaseAccess.getQuotes();
    databaseAccess.close();

    Number[] seriesNumbers = {};
    for(i = 0; i < voltages.size(); i++){
        seriesNumbers[i] = Integer.parseInt(voltages.get(i));
    }
}
生成代码时没有错误。但是,在emulator上运行时,它会声明java.lang.ArrayIndexOutOfBoundsException:length=0;索引=0。 数据库有一列,名为“voltages”,包含10个条目。DatabaseAccess.java代码如下所示:

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class DatabaseAccess {
private SQLiteOpenHelper openHelper;
private SQLiteDatabase database;
private static DatabaseAccess instance;

/**
 * Private constructor to aboid object creation from outside classes.
 *
 * @param context
 */
private DatabaseAccess(Context context) {
    this.openHelper = new DatabaseOpenHelper(context);
}

/**
 * Return a singleton instance of DatabaseAccess.
 *
 * @param context the Context
 * @return the instance of DabaseAccess
 */
public static DatabaseAccess getInstance(Context context) {
    if (instance == null) {
        instance = new DatabaseAccess(context);
    }
    return instance;
}

/**
 * Open the database connection.
 */
public void open() {
    this.database = openHelper.getWritableDatabase();
}

/**
 * Close the database connection.
 */
public void close() {
    if (database != null) {
        this.database.close();
    }
}

/**
 * Read all quotes from the database.
 *
 * @return a List of quotes
 */
public List<String> getQuotes() {
    List<String> list = new ArrayList<>();
    Cursor cursor = database.rawQuery("select * from voltages", null);
    cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            list.add(cursor.getString(0));
            cursor.moveToNext();
        }
        cursor.close();
        return list;
    }
}

错误出现在数字[]序列号={}的声明中

你必须给它一个尺寸

Number[] seriesNumbers = new Number[voltages.size()];

数组没有大小:Number[]seriesNumber={};因此,如果您试图在索引0处放置某些内容,它将崩溃。请使用ArrayList而不是常规数组。Java中的数组不是动态的,我们应该意识到这一点。工作起来很有魅力!谢谢