2016-04-26 12 views
-1

SQLiteを使用して作成され、AndroidPlotを使用してプロットされたデータベースから値を取得するアプリケーションを作成しようとしています。 MainActivity.javaに問題が発生している部分は、次のとおりです。Androidスタジオの配列インデックスが範囲外です

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)); 
    } 
} 

コードの作成中にエラーはありません。ただし、エミュレータで実行すると、 "java.lang.ArrayIndexOutOfBoundsException:length = 0; index = 0"と表示されます。 データベースには、「電圧」という名前の1つの列があり、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; 
    } 
} 
+0

配列にサイズがありません。Number [] seriesNumbers = {};したがって、インデックス0に何かを入れようとするとクラッシュします。 –

+0

通常の配列の代わりに 'ArrayList 'を使います。 Javaの配列は動的ではありません – kit

答えて

4

エラーは、あなたがそれにサイズを与える必要がありますNumber[] seriesNumbers = {};

の宣言です。

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

それを実現しているはずです。魅力的な作品!ありがとう。 – AR06

関連する問題