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

如何在两个不同Activity中获取Intent值以更新SQLite数据库?

如何在两个不同Activity中获取MapsActivity传递的Intent值?

我在MapsActivity中通过以下代码实现了点击Marker信息窗口时获取并传递customer_id至Abc.class:

mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 
    @Override 
    public void onInfoWindowClick(Marker marker) { 
        int title = Integer.parseInt(marker.getTitle()); 
        Log.d("Result", String.valueOf(marker)); 
        //pass these value in two diffrent activities to update sqlite database 
        Intent a = new Intent(MapsActivity.this, Abc.class); 
        a.putExtra("customer_id", title); 
        startActivity(a); 
    } 
});

现在需要将同一个customer_id传递至两个不同的Activity来更新SQLite数据库,请问如何在这两个Activity中获取该Intent值?


首先,你得先确保在MapsActivity里把customer_id正确传递给两个目标Activity,然后在每个目标Activity里通过Intent读取这个值就行。下面分步骤给你说明:

1. 先更新MapsActivity的传递逻辑

如果你需要把同一个customer_id传给两个Activity(比如Abc.class和另一个自定义的Def.class),可以在点击事件里创建两个Intent分别启动它们,代码如下:

mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 
    @Override 
    public void onInfoWindowClick(Marker marker) { 
        // 先把marker的title转成customer_id,这里我把变量名改得更语义化了
        int customerId = Integer.parseInt(marker.getTitle()); 
        Log.d("Result", String.valueOf(marker)); 

        // 传递给第一个Activity:Abc.class
        Intent intentAbc = new Intent(MapsActivity.this, Abc.class); 
        intentAbc.putExtra("customer_id", customerId); 
        startActivity(intentAbc); 

        // 传递给第二个Activity:比如Def.class(你换成自己的第二个Activity类名就行)
        Intent intentDef = new Intent(MapsActivity.this, Def.class); 
        intentDef.putExtra("customer_id", customerId); 
        startActivity(intentDef); 
    } 
});

2. 在目标Activity中获取Intent值

不管是Abc.class还是第二个Activity,获取值的逻辑完全一致,只需要在onCreate()方法里读取Intent的额外参数即可:

示例:在Abc.class中获取

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_abc);

    // 读取传递过来的customer_id,第二个参数是默认值(如果没拿到数据就返回这个值)
    int customerId = getIntent().getIntExtra("customer_id", -1); 

    // 先判断是否拿到了有效的ID,再去更新数据库
    if (customerId != -1) {
        // 这里写你的SQLite更新逻辑
        updateCustomerInDatabase(customerId);
    } else {
        Log.e("AbcActivity", "未获取到有效的customer_id");
    }
}

// 示例:数据库更新方法,你替换成自己的实现就行
private void updateCustomerInDatabase(int customerId) {
    // 比如:打开数据库连接,执行更新语句
    // SQLiteDatabase db = yourDbHelper.getWritableDatabase();
    // ContentValues values = new ContentValues();
    // values.put("status", "updated");
    // db.update("customers", values, "customer_id = ?", new String[]{String.valueOf(customerId)});
}

示例:在第二个Activity(比如Def.class)中获取

逻辑和Abc.class完全一样,只是类名和布局对应自己的即可:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_def);

    int customerId = getIntent().getIntExtra("customer_id", -1); 

    if (customerId != -1) {
        updateAnotherTableInDatabase(customerId);
    } else {
        Log.e("DefActivity", "未获取到有效的customer_id");
    }
}

private void updateAnotherTableInDatabase(int customerId) {
    // 这里写第二个Activity对应的数据库更新逻辑
}

小提示

  • 如果你的customer_id可能为0,那默认值别用0,换成Integer.MIN_VALUE这种不会和有效ID冲突的值,避免判断出错。
  • 要是后续在Activity的其他方法里还要用到这个ID,建议在onCreate()里把它存成成员变量,不用每次都调用getIntent()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:37:01