2016-12-03 31 views
0

我在Android Studio中創建了一個遊戲,現在我試圖在數據庫中插入一個分數。我創建了一個SQL腳本,可以很好地創建數據庫,但現在我試圖插入信息,但是我沒有上下文。如何從非活動類中獲取上下文

這是我將對DBAdapter

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

這是我試圖讓背景下的非活性類。

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

我這樣做了:'private Context context;公共世界(上下文環境){狗=新狗(); this.context = context; '但是當我在遊戲結束時更新數據庫時,應用程序立即關閉。我是否需要在遊戲中的每個Java類中傳遞上下文? – JFCM

1

Context您的應用程序內的生活,不屬於某個特定的活動,但是你仍然需要訪問它....

您可以通過在上下文您非活動類方法

public void update_database(Context yourAppContext){ 

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

我這樣做了: 'private Context context; 公共世界(上下文環境){dogstone = new Dog(); this.context = context; }' 但是當我在遊戲結束時更新數據庫時,應用程序立即關閉。我是否需要在遊戲中的每個Java類中傳遞上下文? – JFCM

+0

將上下文傳遞給'update_database()'方法,而不是'World'構造函數。 – Illdapt

相關問題