如何在存入Firestore的地址各信息段之间添加空格分隔?
解决方案
你的代码问题在于拼接地址字段时未添加分隔符,导致多字段内容直接连为一体。结合你原代码只有所有字段全部填写完成才会执行存储的逻辑,有两种修改方案可选:
方案1:仅添加空格分隔符,保持存储单个地址字符串
直接使用格式化字符串生成带空格的完整地址,无需多个if判断拼接,代码更简洁:
@Override public void onClick(View v) { String userName = name.getText().toString().trim(); String userAddress = address.getText().toString().trim(); String userCity = city.getText().toString().trim(); String userCode = postalCode.getText().toString().trim(); String userNumber = phoneNumber.getText().toString().trim(); if (!userName.isEmpty() && !userAddress.isEmpty() && !userCity.isEmpty() && !userCode.isEmpty() && !userNumber.isEmpty()){ // 直接用格式化字符串拼接,各字段之间加空格 String final_address = String.format("%s %s %s %s %s", userName, userCity, userAddress, userCode, userNumber); Map<String,String> map = new HashMap<>(); map.put("userAddress",final_address); firestore.collection("CurrentUser").document(auth.getCurrentUser().getUid()) .collection("Address").add(map).addOnCompleteListener(new OnCompleteListener<DocumentReference>() { @Override public void onComplete(@NonNull Task<DocumentReference> task) { if (task.isSuccessful()){ Toast.makeText(AddAddressActivity.this, "Address Added", Toast.LENGTH_SHORT).show(); } } }); }else { Toast.makeText(AddAddressActivity.this, "Kindly Fill All Fields", Toast.LENGTH_SHORT).show(); } }
方案2(更推荐):分字段存储到Firestore
Firestore本身支持多字段存储,无需提前把所有信息拼成一个字符串。分开存储后后续需要单独提取手机号、邮编等信息时无需拆分地址字符串,灵活度更高:
@Override public void onClick(View v) { String userName = name.getText().toString().trim(); String userAddress = address.getText().toString().trim(); String userCity = city.getText().toString().trim(); String userCode = postalCode.getText().toString().trim(); String userNumber = phoneNumber.getText().toString().trim(); if (!userName.isEmpty() && !userAddress.isEmpty() && !userCity.isEmpty() && !userCode.isEmpty() && !userNumber.isEmpty()){ Map<String,String> map = new HashMap<>(); // 每个字段单独存入Map map.put("userName", userName); map.put("userCity", userCity); map.put("userAddress", userAddress); map.put("postalCode", userCode); map.put("phoneNumber", userNumber); firestore.collection("CurrentUser").document(auth.getCurrentUser().getUid()) .collection("Address").add(map).addOnCompleteListener(new OnCompleteListener<DocumentReference>() { @Override public void onComplete(@NonNull Task<DocumentReference> task) { if (task.isSuccessful()){ Toast.makeText(AddAddressActivity.this, "Address Added", Toast.LENGTH_SHORT).show(); } } }); }else { Toast.makeText(AddAddressActivity.this, "Kindly Fill All Fields", Toast.LENGTH_SHORT).show(); } }
后续需要展示完整地址时,再从Firestore取出各字段,按需求拼接即可,还可以自定义分隔符(比如逗号、换行等)适配不同展示场景。
内容的提问来源于stack exchange,提问作者Mr Rats
相关产品推荐
相关产品推荐

