2016-12-03 8 views
0

Android Studioでゲームを作成しましたが、スコアをデータベースに挿入しようとしています。 SQLを使ってデータベースを作成するスクリプトを作成しましたが、今は情報を挿入しようとしていますが、コンテキストはありません。これは私がコンテキストを取得しようとしている非アクティビティクラスです非アクティビティクラスからコンテキストを取得するには

public class DBAdapter { 

private SQLiteDatabase database; 
private ScriptSQL dbHelper; 
private String[] allColumns = {ScriptSQL.ID, ScriptSQL.PONTUACAO}; 

public DBAdapter(Context ctx) { 
    dbHelper = new ScriptSQL(ctx); 
} 

public void open() throws SQLException { 
    database = dbHelper.getWritableDatabase(); 
} 

public void openRead() throws SQLException { 
    database = dbHelper.getReadableDatabase(); 
} 

public void close() { 
    dbHelper.close(); 
} 

public Score createScore(String pontuacao) { 
    ContentValues values = new ContentValues(); 
    values.put(dbHelper.PONTUACAO, pontuacao); 
    long insertId = database.insert(dbHelper.TABLE_NAME, null, values); 
    // To show how to query 
    Cursor cursor = database.query(dbHelper.TABLE_NAME, allColumns, dbHelper.ID + " = " + insertId, null, null, null, null); 
    cursor.moveToFirst(); 
    return cursorToScore(cursor); 
} 

これは私のDBAdapterです。

World.java

public class World { 

static final int WORLD_WIDTH = 10; //largura 
static final int WORLD_HEIGHT = 13; //altura 
static final int SCORE_INCREMENT = 10; //incremento do score 
static final float TICK_INITIAL = 0.8f; //velocidade inicial do jogo 
static final float TICK_DECREMENT = 0.2f; //velocidade de decremento 

public Dog dog; 
public Elements element; 
public boolean EndGame = false; 
public int score = 0; 

static int put_element = 0; 
public List<Elements> elements = new ArrayList<Elements>(); 
Random random = new Random(); 
float timeTick = 0; 
static float tick = TICK_INITIAL; 

public World(){ 
    dog = new Dog(); 
} 

/*...*/ 

DBAdapter datasource; 
private Context context; 

public void update_database(){ 

    datasource = new DBAdapter(context.getApplicationContext()); 

    try { 
     datasource.open(); 
     String point = Integer.toString(score); 
     Score c = datasource.createScore(point); 
     datasource.close(); 

    } 
    catch (SQLException ex) { } 

} 

問題は、ライン上にある:

データソース=新しいDBAdapter(context.getApplicationContext())。

これもやってみましたが、これは非アクティビティクラスなのでエラーです。

datasource = new DBAdapter(this);

どうすればよいですか?

+0

重複した質問 –

答えて

0

非アクティビティクラスのコンストラクタのコンテキストを渡します。あなたのアプリケーション内で

+0

私はこのようにしました: 'プライベートコンテキストコンテキスト。パブリックワールド(コンテキストコンテキスト){dog = new Dog(); this.context = context; } 'しかし、ゲームの最後にデータベースを更新すると、アプリはすぐに終了します。ゲームのすべてのJavaクラスでコンテキストを渡す必要がありますか? – JFCM

1

Context生活非アクティビティクラスパスコンテキストを初期化し、特定の活動に属していない、しかし、あなたはまだそれにアクセスする必要がありますが....

あなたのコンテキストに渡すことができます非アクティビティクラスメソッド

public void update_database(Context yourAppContext){ 

    datasource = new DBAdapter(yourAppContext); 
    //Other Stuff........ 
} 
+0

私はこうしました: 'プライベートコンテキストコンテキスト。 public world(コンテキストコンテキスト){ dog = new Dog(); this.context = context; } ' しかし、ゲームの最後にデータベースを更新すると、すぐにアプリが終了します。ゲームのすべてのJavaクラスでコンテキストを渡す必要がありますか? – JFCM

+0

コンテキストを 'world'コンストラクタではなく' update_database() 'メソッドに渡します。 – Illdapt

関連する問題