You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将传递到BowlerActivity的League ID存入SQLite关联Bowler

我明白你卡在哪了——已经成功拿到leagueId并显示在界面上,但就是没法把这个ID和新创建的Bowler绑定并存进数据库。咱们一步步来解决这个问题:


1. 先把leagueId变成BowlerActivity的全局成员变量

你之前在onCreate里把leagueId当成局部变量处理,导致其他方法(比如创建Bowler的逻辑)没法访问它。先调整类的成员变量定义:

public class BowlerActivity extends AppCompatActivity {
    // 新增这个全局变量,让整个类的方法都能拿到当前联赛ID
    private int currentLeagueId;
    // 你原来的其他成员变量...
    private BowlerAdapter mAdapter;
    private List<Bowler> bowlersList = new ArrayList<>();
    // ...

然后在onCreate里给这个变量赋值:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_bowler);
    
    // 获取并保存联赛ID到全局变量
    currentLeagueId = getIntent().getIntExtra("leagueId", 1);
    // 显示到TextView的逻辑保留
    TextView myText = findViewById(R.id.tvLeagueId);
    myText.setText(String.valueOf(currentLeagueId));
    
    // 你的其他初始化代码...
}

2. 补全/修改showBowlerDialog方法,传递联赛ID

你的showBowlerDialog方法看起来没写完,假设它是弹出输入框让用户填写Bowler名字的对话框。在对话框的确认按钮点击时,要把输入的名字和currentLeagueId一起传给创建方法:

private void showBowlerDialog(boolean isUpdate, Bowler existingBowler, int position) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    LayoutInflater inflater = getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.dialog_add_bowler, null);
    builder.setView(dialogView);

    final EditText etBowlerName = dialogView.findViewById(R.id.et_bowler_name);

    // 编辑模式下填充已有名字
    if (isUpdate && existingBowler != null) {
        etBowlerName.setText(existingBowler.getName());
    }

    builder.setTitle(isUpdate ? "Edit Bowler" : "Add Bowler")
           .setPositiveButton(isUpdate ? "Update" : "Save", new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which) {
                   String bowlerName = etBowlerName.getText().toString().trim();
                   if (!bowlerName.isEmpty()) {
                       if (isUpdate) {
                           updateBowler(bowlerName, position);
                       } else {
                           // 新增时传入全局的联赛ID
                           createBowler(bowlerName, currentLeagueId);
                       }
                   }
               }
           })
           .setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss());

    builder.create().show();
}

3. 修改createBowler方法,接收并使用联赛ID

原来的createBowler只接收名字,现在要加上联赛ID参数,调用数据库插入方法时一起传进去:

private void createBowler(String bowlerName, int leagueId) {
    // 调用更新后的插入方法,传入名字和联赛ID
    long id = db.insertBowler(bowlerName, leagueId);
    Bowler newBowler = db.getBowler(id);
    if (newBowler != null) {
        bowlersList.add(0, newBowler);
        mAdapter.notifyDataSetChanged();
        toggleEmptyBowlers();
    }
}

4. 更新DatabaseHelper的insertBowler方法

确保你的bowler表有league_id字段,然后修改插入逻辑把联赛ID存入数据库:

public long insertBowler(String bowlerName, int leagueId) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(COLUMN_BOWLER_NAME, bowlerName);
    // 新增这行,把联赛ID存入对应字段
    values.put(COLUMN_LEAGUE_ID, leagueId);

    long id = db.insert(TABLE_BOWLERS, null, values);
    db.close();
    return id;
}

额外优化:只显示当前联赛的Bowler

如果需要BowlerActivity只展示当前联赛的选手,记得修改getAllBowlers方法,加上联赛ID的筛选条件:

public List<Bowler> getAllBowlers(int leagueId) {
    List<Bowler> bowlers = new ArrayList<>();
    String selectQuery = "SELECT * FROM " + TABLE_BOWLERS + 
                        " WHERE " + COLUMN_LEAGUE_ID + " = ? " +
                        " ORDER BY " + COLUMN_BOWLER_NAME + " ASC";

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, new String[]{String.valueOf(leagueId)});

    if (cursor.moveToFirst()) {
        do {
            Bowler bowler = new Bowler();
            bowler.setId(cursor.getInt(cursor.getColumnIndex(COLUMN_BOWLER_ID)));
            bowler.setName(cursor.getString(cursor.getColumnIndex(COLUMN_BOWLER_NAME)));
            bowler.setLeagueId(cursor.getInt(cursor.getColumnIndex(COLUMN_LEAGUE_ID)));
            bowlers.add(bowler);
        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return bowlers;
}

然后在BowlerActivity的onCreate里调用这个方法:

bowlersList.addAll(db.getAllBowlers(currentLeagueId));

内容的提问来源于stack exchange,提问作者Robert Vogl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:23