0

OK、これが私のシナリオです。私のゲームが終了した後、ユーザーはゲームを終了した時間を提供され、その直後にユーザー名入力のために私の dialog.theme アクティビティがポップアップします。名前は sqlite データベースに保存されます。そして今、私の問題....時間はそうではありません。時刻は double 型の変数に格納されます。その値を RezultatVreme.class に送信すると正常に動作します (次に、ユーザーに時間を提示するポップアップ アクティビティで使用します... 入力名ポップアップの直前に発生します)。ここで、同じ値を使用して ImePopup.class に送信し、ユーザーが名前を入力するときにそのクラスを使用して時間値を渡し、それをデータベースに入力します。しかし、それは機能していません。私の名前は問題なく入力されていますが、時間は常に 0 です。double、integer、long で試しましたが、同じ結果になりました。これが私のゲームクラスです その一部です

long tEnd = System.currentTimeMillis();
            long tDelta = tEnd - tStart;
            elapsedSeconds = tDelta / 1000.0;

            Intent i = new Intent(getApplicationContext(), RezultatVreme.class);
            i.putExtra("novoVreme", elapsedSeconds);
            startActivity(i);
            Intent ip = new Intent(getApplicationContext(), ImePopup.class);
            ip.putExtra("score", elapsedSeconds);
            startActivity(ip);

これが私のポップアップクラスです:

public class ImePopup extends Activity implements OnClickListener{

    EditText ime;
    Button ok, odustani;
    double score;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.imepopup);

        ok = (Button) findViewById(R.id.btOK);
        odustani = (Button) findViewById(R.id.btOdustani);
        ime = (EditText) findViewById(R.id.etIme);

        ok.setOnClickListener(this);
        odustani.setOnClickListener(this);
    }


    public void onClick(View arg0) {
        switch (arg0.getId()){
        case R.id.btOK:
            boolean didItWork = true;
            try{
            String name = ime.getText().toString();

            OffDBHelper entry = new OffDBHelper(ImePopup.this);
            entry.open();
            entry.createEntry(name, score);
            entry.close();
            break;
            }catch(Exception e){
                didItWork = false;
                String error = e.toString();
                Dialog d = new Dialog(this);
                d.setTitle("Greska!");
                TextView tv = new TextView(this);
                tv.setText("Greska u upisu");
                d.setContentView(tv);
                d.show();
            }finally{
                if(didItWork){
                    Dialog d = new Dialog(this);
                    d.setTitle("Uspesno!");
                    TextView tv = new TextView(this);
                    tv.setText("Upisali ste se!");
                    d.setContentView(tv);
                    d.show();
                }
            }
        case R.id.btOdustani:

            break;
}
    }
}

そして私の OffDBHelper クラス:

public class OffDBHelper {

    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_SCORE = "score";

    private static final String DATABASE_NAME = "highscores";
    private static final String DATABASE_TABLE = "highscorestable";
    public static final int DATABASE_VERSION = 1;

    private DbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    private static class DbHelper extends SQLiteOpenHelper{

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

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                    KEY_NAME + " TEXT NOT NULL, " +
                    KEY_SCORE + " DOUBLE NOT NULL);"
                    );
        }

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

    }

    public OffDBHelper(Context c){
        ourContext = c;
    }

    public OffDBHelper open() throws Exception{
        ourHelper = new DbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }
    public void close(){
        ourHelper.close();
    }

    public long createEntry(String name, double score) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_NAME, name);
        cv.put(KEY_SCORE, score);
        return ourDatabase.insert(DATABASE_TABLE, null, cv);
    }

    public String getData() {
        String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_SCORE};
        Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
        String result = "";

        int iRow = c.getColumnIndex(KEY_ROWID);
        int iName = c.getColumnIndex(KEY_NAME);
        int iScore = c.getColumnIndex(KEY_SCORE);

        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            result = result + c.getString(iRow) + " " + c.getString(iName) + " " + c.getString(iScore) + "\n";
        }

        return result;


    }
}
4

2 に答える 2

1

そのようにImePopupでDBHelperを呼び出します

OffDBHelper entry = new OffDBHelper(ImePopup.this);
entry.open();
entry.createEntry(name, score);
entry.close();

ただし、変数にデータを書き込むことはないscoreため、常に初期値が 0 になります。

Intent最初から「スコア」を抽出する必要があります

于 2013-03-08T14:34:34.967 に答える
0
double score;
double scoreR;



Bundle extras = getIntent().getExtras(); 
        if(extras !=null) {
           scoreR = extras.getDouble("score", 0);
        }


OffDBHelper entry = new OffDBHelper(ImePopup.this);
            entry.open();
            entry.createEntry(name, scoreR);
            entry.close();
于 2013-03-08T14:47:47.317 に答える