Java Android中的SQL数据库不起作用
我正在尝试创建一个包含3列的数据库,分别为:name、wins、loss。 数据表应该只有一行-只有一个播放器。 我试着这么做,但它不工作,应用程序总是崩溃。 我有两个活动和一个普通班。在主活动中,它检查玩家的名字是否在数据库中,如果没有,它会要求玩家输入他的名字。 在第二个活动(GameActivity)中,它假设向我显示他的名字以及他在电脑上赢了多少次和输了多少次。这里有两个按钮,添加赢和添加输,每个按钮都应该增加赢或输的数量。 sql数据库类扩展SQLiteOpenHelper 主要活动Java Android中的SQL数据库不起作用,java,android,sql,database,android-sqlite,Java,Android,Sql,Database,Android Sqlite,我正在尝试创建一个包含3列的数据库,分别为:name、wins、loss。 数据表应该只有一行-只有一个播放器。 我试着这么做,但它不工作,应用程序总是崩溃。 我有两个活动和一个普通班。在主活动中,它检查玩家的名字是否在数据库中,如果没有,它会要求玩家输入他的名字。 在第二个活动(GameActivity)中,它假设向我显示他的名字以及他在电脑上赢了多少次和输了多少次。这里有两个按钮,添加赢和添加输,每个按钮都应该增加赢或输的数量。 sql数据库类扩展SQLiteOpenHelper 主要活动
SQLGameTable db;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.leaderboards);
db = new SQLGameTable(this);
if(db.getName() == "")
{
final Score score = new Score("", 0, 0);
Button send = (Button) findViewById(R.id.btnSend);
final EditText et = (EditText) findViewById(R.id.editText1);
send.setVisibility(android.view.View.VISIBLE);
et.setVisibility(android.view.View.VISIBLE);
send.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
String name = et.getText().toString();
score.setName(name);
}
});
db.addPlayer("Daniel", score.getWins(), score.getLoses());
send.setVisibility(android.view.View.INVISIBLE);
et.setVisibility(android.view.View.INVISIBLE);
}
final Intent i = new Intent(this, GameActivity.class);
btn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
startActivity(i);
}
});
}
配子活动
Button aWin, aLose;
SQLGameTable scoreTable;
TextView tv1, tv3, tv4;
Score score;
String name;
int win=0, lose=0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
scoreTable = new SQLGameTable(this);
aWin = (Button) findViewById(R.id.button1);
aLose = (Button) findViewById(R.id.button2);
tv1 = (TextView) findViewById(R.id.textView1);
tv3 = (TextView) findViewById(R.id.textView3);
tv4 = (TextView) findViewById(R.id.textView4);
name = scoreTable.getName();
win = scoreTable.getWin();
lose = scoreTable.getLose();
tv1.setText(name + "");
tv3.setText(win + "");
tv4.setText(lose + "");
aLose.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
lose++;
scoreTable.reset();
scoreTable.addPlayer(name, win, lose);
lose = scoreTable.getLose();
tv4.setText("" + (lose));
}
});
aWin.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
win++;
scoreTable.reset();
scoreTable.addPlayer(name, win, lose);
win = scoreTable.getWin();
tv3.setText("" + (win));
}
});
}
SQLGameTable扩展了SQLiteOpenHelper
public static String DATABASE_NAME = "highscores";
public static String TABLE_NAME = "scores";
public static String KEY_ID = "id";
public static String KEY_NAME = "name";
public static String KEY_WIN = "win";
public static String KEY_LOSE = "lose";
public SQLGameTable(Context c)
{
super(c, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db)
{
String sql = "CREATE TABLE IF NOT EXISTS scores (id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING, win INTEGER, lose INTEGER)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
}
public void addPlayer(String name, int win, int lose)
{
ContentValues values = new ContentValues();
values.put(KEY_NAME, name);
values.put(KEY_WIN, win);
values.put(KEY_LOSE, lose);
SQLiteDatabase db = getWritableDatabase();
db.insert(TABLE_NAME, null, values);
db.close();
}
public void reset()
{
SQLiteDatabase db = getWritableDatabase();
db.delete(TABLE_NAME, null, null);
db.close();
}
public String getName()
{
String sql = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.rawQuery(sql, null);
int row = c.getColumnIndex(KEY_NAME);
db.close();
return c.getString(row);
}
public int getWin()
{
String sql = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.rawQuery(sql, null);
int row = c.getColumnIndex(KEY_WIN);
db.close();
return Integer.parseInt(c.getString(row));
}
public int getLose()
{
String sql = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.rawQuery(sql, null);
int row = c.getColumnIndex(KEY_LOSE);
db.close();
return Integer.parseInt(c.getString(row));
}
定义
无效
。你的logcat怎么说?你能给我们一个堆栈跟踪吗?在我点击按钮启动另一个活动后,它崩溃了,上面写着“不幸的是,APP_NAME已经停止”。堆栈跟踪是什么,我该怎么做?你不这么做,它会自然而然地发生。这是logcat报道的。我希望您已经在IDE配置中设置了logcat视图。。。