如何在两个不同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
相关产品推荐
相关产品推荐

