2017-02-26 4 views
-1

私のゲームに上位10のハイスコアを追加しようとしています。スコアと難しさを、これまでのところ、私は非常にどのようにこのデータベース作品を理解していないが、いくつかのチュートリアルの後、私はこのこのSQLiteデータベースが機能しないのはなぜですか?

public class DBHandler extends SQLiteOpenHelper { 

private static final int DATABASE_VERSION = 1; 

private static final String DATABASE_NAME = "highscores"; 

private static final String TABLE_DETAIL = "scores"; 

private static final String KEY_ID = "id"; 
private static final String KEY_TIME = "time"; 
private static final String KEY_DIFFICULTY = "difficutly"; 


public DBHandler(Context context){ super(context, DATABASE_NAME, null, DATABASE_VERSION);} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_HIGHSCORES_TABLE = "CREATE TABLE " + TABLE_DETAIL + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY, " 
      + KEY_TIME + " TEXT, " 
      + KEY_DIFFICULTY + " TEXT)"; 
    db.execSQL(CREATE_HIGHSCORES_TABLE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_DETAIL);  

    onCreate(db);           
} 
// Adding new score 
public void addScore(int score) { 

    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 

    values.put(KEY_TIME, score); // score value 

    // Inserting Values 
    db.insert(TABLE_DETAIL, null, values); 

    db.close(); 

} 

// Getting All Scores 
public String[] getAllScores() { 

    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_DETAIL; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 

    int i = 0; 

    String[] data = new String[cursor.getCount()]; 

    while (cursor.moveToNext()) { 

     data[i] = cursor.getString(1); 

     i = i++; 

    } 
    cursor.close(); 
    db.close(); 
    // return score array 
    return data; 
} 
} 

を行ってそしてここにクラスできた - ハイスコアは2つだけで作られています私はアプリケーションで高得点でページを開くと

public class highscores extends Activity {  

private ListView scorebox; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    DBHandler db = new DBHandler(this); 
    scorebox = (ListView) findViewById(R.id.scorebox); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.highscores); 
    Log.d("Insert: ", "Inserting .."); 
    db.addScore(9000); 
    Log.d("Reading: ", "Reading all contacts.."); 
} 
} 

からデータベースを制御したいこと - それは空白になって、どのようにそれが何かを表示させるために、私は、このコマンドdb.addScore(9000);にしようとしたが、それはしていません作業。たぶん私はデータベースにそのデータを表示する場所を教えていないでしょうか?

+0

'String CREATE_HIGHSCORES_TABLE =" CREATE TABLE "+ TABLE _DETAIL + "(" '' TABLE'の後ろに**スペース**がありません –

+0

スペースを追加しましたが、それほど変更されませんでしたが、ページは開きますが空白になります – Mik

+0

必要な場合は、いくつかのデータを取得します。 –

答えて

0

編集ハイスコアクラス

public class highscores extends Activity {  
    private ListView scorebox; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.highscores); 
    DBHandler db = new DBHandler(this); 
    scorebox = (ListView) findViewById(R.id.scorebox); 
    Log.d("Insert: ", "Inserting .."); 
    db.addScore(9000); 
    Log.d("Reading: ", "Reading all contacts.."); 
    ArrayList<String>ar=new ArrayList<>(); 
    ar=db.getAllScores(); 
    ArrayAdapter<String>ar=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,s); 
    scorebox.setAdapter(ar); 
} 
} 

今すぐあなたのDBHandlerクラスの編集getAllScoresで()メソッドこのように

public ArrayList getAllScores() { 

// Select All Query 
String selectQuery = "SELECT * FROM " + TABLE_DETAIL; 

SQLiteDatabase db = this.getWritableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, null); 

// looping through all rows and adding to list 


ArrayList<String>data=new ArrayList<>(); 

while (cursor.moveToNext()) { 

    data.add(cursor.getString(1)); 


} 
cursor.close(); 
db.close(); 
// return score array 
return data; 
} 
+0

はありがとう追加最終的には、まず、ArrayAdapter ar = new ArrayAdapter (これはandroid.R.layout.simple_list_item_1、s);でエ​​ラーが発生しました。arは既に使用されていて、sは見つかりませんでしたが管理しました自分自身と対処する – Mik

0

あなたが

CD/DD、このコマンドを使用することができ、デバイスを使用している場合は、あなたがエミュレータを使用している場合は、DBファイルを引っ張ることができ、テーブルが作成されているかどうか確認してください:\ Androidの\ SDK \プラットフォームを-tools //アンドロイドSDKパス

adbのシェル-d

のrun-as com.pkg.pkgname

猫/data/data/com.pkg.pkgname/databases/highscores>/SDカード/最高スコア

dbファイルをデバイスのSDカードにコピーします。 Sqlite browserを使用すると、dbファイルを開いてテーブルが作成されているかどうかを確認できます。 また、アプリをアンインストールして、もう一度

それをインストール
+0

私はエミュレータを使用していますが、データベースが作成されていることを確認しました。データフォルダ内のハイスコア、ハイスコア - ジャーナルファイルが表示される – Mik

0

使用これはあなたのリストビューであなたのスコアをリストする

public class highscores extends Activity {  

    private ListView scorebox; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.highscores); 
     DBHandler db = new DBHandler(this); 
     scorebox = (ListView) findViewById(R.id.scorebox); 
     Log.d("Insert: ", "Inserting .."); 
     db.addScore(9000); 
     Log.d("Reading: ", "Reading all contacts.."); 
     String []s=db.getAllScores(); 
     ArrayAdapter<String>ar=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,s); 
     scorebox.setAdapter(ar); 
    } 
    } 
+0

エラーが発生しました:java.lang.NullPointerException:nullオブジェクトリファレンスで仮想メソッド 'java.lang.String java.lang.Object.toString()'を呼び出そうとしています私はコメントでそれを書くのcouldntので – Mik

+0

ポストフルlogcat –

+0

または使用ArrayListの代わりの文字列 –

関連する問題