Android アプリ用の SQLite データベースをいじっています。複数のプレーヤーを含む「プレーヤー」テーブルと、シューティングやリバウンドなどの各プレーヤーのスキル ポイントを持つ 1 対多の「スキル」テーブルがあります。
テキストボックスに実際に入力し、プレーヤーをデータベースに挿入するためのアクティビティがアプリに 1 つあります。ユーザーが「プレイヤーの追加」ボタンを押すと、「プレイヤー」テーブルに行が挿入され、「プレイヤー」テーブルを参照する外部キーを持つ「スキル」テーブルに行が挿入されます。これらの挿入の後、クエリを実行して、「skills」テーブルから「Shooting」の値を読み取り、それをトースト通知に入れることができるかどうかを確認しました。それはうまくいきました。私が使用したコードは次のとおりです。
SQLiteDatabase db2 = dbHelper.getReadableDatabase();
String[] projection = { "shooting" };
String sortOrder = "shooting" + " DESC";
Cursor c = db2.query(
"skills", // The table to query
projection, // The columns to return
null, // The columns for the WHERE clause
null, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);
c.moveToFirst();
int shooting = c.getInt(c.getColumnIndexOrThrow("shooting"));
Toast.makeText(this, "" + shooting, Toast.LENGTH_SHORT).show();
これが機能していることを確認した後、それをコメントアウトし、プレーヤーとスキルが挿入された後にアプリを「名簿」アクティビティに切り替えるインテントを入れました。「名簿」アクティビティでは、各プレイヤーの「射撃」スキルを取得したいと考えています。上記とまったく同じコード (他のアクティビティから動作) を使用すると、次のようなエラーが表示されます。
06-16 15:59:42.602: E/AndroidRuntime(31537): java.lang.RuntimeException: アクティビティ ComponentInfo を開始できません {com.silveray.messaround/com.silveray.messaround.Roster}: java.lang.IllegalArgumentException: 列「射撃」は存在しない
SQL Create ステートメントに「shooting」列が含まれていることを知っているのに、「shooting」列が存在しないと言っている理由がわかりません。別のアクティビティから同じコードを使用して、まったく同じ列を読み取ることさえできました。
読んでくれてありがとう。何か案は?
編集: これは名簿アクティビティの完全なコードです。
public class Roster extends Activity {
int teamID = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_roster);
// CHECK ROSTER
DatabaseContract dbContract = new DatabaseContract();
DatabaseContract.DbHelper dbHelper = dbContract.new DbHelper(this);
SQLiteDatabase dbCheck = dbHelper.getReadableDatabase();
Intent intent = getIntent();
int ID = intent.getIntExtra("ID", 1);
teamID = ID;
String stringID = String.valueOf(ID);
String[] projection = { "_id, playerFirstName, playerLastName, playerPosition" };
String sortOrder = "playerFirstName" + " ASC";
Cursor c = dbCheck.query(
"player",
projection,
null,
null,
null,
null,
sortOrder
);
c.moveToFirst();
int rowsAffected = c.getCount();
if (rowsAffected < 1) {
TextView rosterList = (TextView) findViewById(R.id.txtListRoster);
rosterList.setText("Your team doesn't have any players!");
c.close();
dbCheck.close();
} else {
String players = "";
for (int l = 0; l < rowsAffected; l++) {
String playerName = c.getString(c.getColumnIndexOrThrow("playerFirstName"));
String playerLastName = c.getString(c.getColumnIndexOrThrow("playerLastName"));
String position = c.getString(c.getColumnIndexOrThrow("playerPosition"));
int playerID = c.getInt(c.getColumnIndexOrThrow("_id"));
String player_ID = String.valueOf(playerID);
String pos = "";
if (position.equals("Point Guard")) {
pos = "PG";
} else if (position.equals("Shooting Guard")) {
pos = "SG";
} else if (position.equals("Small Forward")) {
pos = "SF";
} else if (position.equals("Power Forward")) {
pos = "PF";
} else if (position.equals("Center")) {
pos = "C";
}
SQLiteDatabase db2 = dbHelper.getReadableDatabase();
String[] projection2 = { "shooting" };
String sortOrder2 = "shooting" + " DESC";
Cursor c2 = db2.query(
"skills",
projection2,
null,
null,
null,
null,
sortOrder2
);
c2.moveToFirst();
//** Everything works until this line:
int shooting = c2.getInt(c.getColumnIndexOrThrow("shooting"));
players += playerName + " " + playerLastName + " (" + pos + ") Shooting: ";
if (l != (rowsAffected - 1)) {
players += "\n";
}
TextView rosterList = (TextView) findViewById(R.id.txtListRoster);
rosterList.setText(players);
if (l != (rowsAffected - 1)) {
c.moveToNext();
}
c2.close();
}
c.close();
dbCheck.close();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.roster, menu);
return true;
}
public void addPlayer(View view) {
Intent goToAddPlayer = new Intent(this, AddPlayer.class);
goToAddPlayer.putExtra("ID", teamID);
this.startActivity(goToAddPlayer);
this.finish();
return;
}
}