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

Android应用开发求助:传递用户名至Place Picker Intent更新员工工作地点

完成员工工作地点更新流程的完整方案

你已经成功把用户名传入Place Picker Intent了,这步走得很稳!接下来咱们一步步把剩下的流程补全,实现从地点选择到数据库更新的完整闭环:


1. 接收Place Picker返回的地点数据

当管理员选好目标地点后,系统会把结果返回给你的Activity,你需要在回调方法里处理这些数据:

传统onActivityResult写法(适配旧版本)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 先校验请求码和结果状态
    if (requestCode == YOUR_PLACE_PICKER_REQUEST_CODE && resultCode == RESULT_OK) {
        // 获取选中的地点详情
        Place selectedPlace = PlacePicker.getPlace(this, data);
        String placeAddress = selectedPlace.getAddress().toString();
        LatLng placeLatLng = selectedPlace.getLatLng();
        
        // 取出之前传入的目标员工用户名
        String targetUsername = getIntent().getStringExtra("EXTRA_TARGET_USERNAME");
        
        // 触发数据库更新操作
        updateUserWorkLocation(targetUsername, placeAddress, placeLatLng);
    }
}

Jetpack Activity Result API写法(推荐,已替代onActivityResult)

先在Activity/Fragment里注册回调:

private final ActivityResultLauncher<Intent> placePickerLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == RESULT_OK && result.getData() != null) {
            Place selectedPlace = PlacePicker.getPlace(this, result.getData());
            String placeAddress = selectedPlace.getAddress().toString();
            LatLng placeLatLng = selectedPlace.getLatLng();
            
            // 取出目标员工用户名
            String targetUsername = getIntent().getStringExtra("EXTRA_TARGET_USERNAME");
            
            updateUserWorkLocation(targetUsername, placeAddress, placeLatLng);
        }
    }
);

启动Place Picker时直接调用launcher:

Intent pickerIntent = new PlacePicker.IntentBuilder().build(this);
pickerIntent.putExtra("EXTRA_TARGET_USERNAME", targetEmployee.getUsername()); // 你已经完成的传参步骤
placePickerLauncher.launch(pickerIntent);

2. 实现数据库更新逻辑

根据你使用的数据库框架,编写对应的更新方法:

例子1:Room本地数据库

假设你有UserDao接口:

@Dao
public interface UserDao {
    @Query("UPDATE users SET work_address = :address, work_lat = :latitude, work_lng = :longitude WHERE username = :username")
    void updateWorkLocation(String username, String address, double latitude, double longitude);
}

在Repository/ViewModel里执行更新(注意:Room操作必须在后台线程):

public void updateUserWorkLocation(String username, String address, LatLng latLng) {
    new Thread(() -> {
        userDao.updateWorkLocation(username, address, latLng.latitude, latLng.longitude);
        // 通过LiveData通知UI刷新,或者直接调用Adapter的刷新方法
        userLiveData.postValue(getUpdatedUserList());
    }).start();
}

例子2:Firebase实时数据库

public void updateUserWorkLocation(String username, String address, LatLng latLng) {
    DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("users").child(username);
    
    Map<String, Object> updates = new HashMap<>();
    updates.put("workAddress", address);
    updates.put("workLat", latLng.latitude);
    updates.put("workLng", latLng.longitude);
    
    userRef.updateChildren(updates)
        .addOnSuccessListener(aVoid -> {
            Toast.makeText(getApplicationContext(), "地点更新成功", Toast.LENGTH_SHORT).show();
            // 刷新RecyclerView列表
            userManagerAdapter.notifyDataSetChanged();
        })
        .addOnFailureListener(e -> {
            Toast.makeText(getApplicationContext(), "更新失败:" + e.getMessage(), Toast.LENGTH_SHORT).show();
        });
}

3. 刷新RecyclerView的UI显示

更新数据库后,需要让列表立刻显示最新的工作地点:

  • 如果你用LiveData观察数据列表,数据更新后UI会自动刷新
  • 手动管理数据的话,直接调用userManagerAdapter.notifyDataSetChanged(),或者更高效的notifyItemChanged(targetPosition)(如果知道该员工在列表中的位置)

小提醒

  • 别忘了在AndroidManifest.xml里配置Place Picker需要的权限:ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION,以及Google Maps API密钥
  • 注意:旧版Place Picker已被官方弃用,推荐迁移到新版Place Selection API,核心逻辑(传参→取地点→更新数据库)是一致的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:27:36