我是新手,所以请原谅我的代码(请提出建议)
我正在尝试创建一个应用程序,在给定一组数据的情况下添加新联系人,并完全更新联系人中与雇主或雇员相关的每个字段。
我知道可以从 Intent 中获取信息,并且需要特定的 key 来获取该信息。
我知道我可以使用 Intents.Intent.NAME
和其他类似的常量作为更通用字段的键。我注意到这些常量都是小写的,并且正是您所期望的。 Intents.Intent.NAME
返回“名称”。我读到这是 Android 编程遵循的约定。
例如,当尝试更新地址时,我使用 Intents.Intent.POSTAL
作为键和一个字符串,该字符串包含按顺序包含街道、城市、州、邮政编码和国家/地区的地址。这会将所有这些信息更新到“街道”字段中。
我尝试过许多字符串,这些字符串对于城市、州等来说都是合理的键,但它们似乎都不起作用。我还尝试在街道、城市、州、邮政编码和国家/地区字符串之间输入“\n”,看看它们是否会自动跳转到下一个文本字段(作为解决方法)。不幸的是,“街道”字段是一个多行字段,这也不起作用。
即使尝试更新人名的前缀和后缀,用作键的合理字符串似乎也不起作用。
总的来说,我在更新以下字段时遇到了麻烦,因为我不知道它们各自的键:
- 前缀(“名称”类别的一部分)
- 后缀(“名称”类别的一部分)
- 网址(“更多项目”)
- 日期/Activity (“更多项目”)
- 城市/州/邮政编码/国家/地区(“地址”类别)
这是我目前的代码,我已将其设置为将此方法应用于单击按钮。我提供了许多测试用例来证明我的观点。 我找不到更新这些字段所需的 key 。如果有任何方法可以收集有关字段在从 Intent 更新时检查数据的位置的信息,请告诉我。如果有其他方法可以更完美地更新联系信息,请告诉我。感谢您的帮助!
Intent insertIntent = new Intent(Intents.Insert.ACTION);
insertIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
insertIntent.putExtra("name", "This T. Works");
insertIntent.putExtra("name_given", "Thiss");
insertIntent.putExtra("name_middle", "Doess");
insertIntent.putExtra("name_family", "Nott");
// All working properly
insertIntent.putExtra(ContactsContract.Intents.Insert.EMAIL, "testing@testrun.com");
insertIntent.putExtra(ContactsContract.Intents.Insert.PHONE, "(098) 765-4321");
insertIntent.putExtra(ContactsContract.Intents.Insert.COMPANY, "TEST INC.");
insertIntent.putExtra(Intents.Insert.SECONDARY_PHONE, "(123) 456-7890");
insertIntent.putExtra(Intents.Insert.JOB_TITLE, "Tester");
insertIntent.putExtra(Intents.Insert.IM_HANDLE, "@tester");
// Not working at all... No "City" constant
insertIntent.putExtra("postal_city", "Testopolis1");
insertIntent.putExtra("city", "Testopolis2");
insertIntent.putExtra("City", "Testopolis3");
// Not working at all... No "State" constant
insertIntent.putExtra("postal_state", "Testopolis1");
insertIntent.putExtra("state", "Testopolis2");
insertIntent.putExtra("State", "Testopolis3");
// Not working at all... No "Zip" constant
insertIntent.putExtra("zip", "12345");
insertIntent.putExtra("ZIP", "11231");
insertIntent.putExtra("Zip", "12134");
insertIntent.putExtra("zipcode", "12314");
insertIntent.putExtra("zip_code", "12341");
insertIntent.putExtra("zipCode", "12434");
insertIntent.putExtra("postal_code", "14234");
insertIntent.putExtra("post_code", "11234");
insertIntent.putExtra("postCode", "12234");
insertIntent.putExtra("postalCode", "12334");
insertIntent.putExtra("postalcode", "12344");
// The "Postal" constant that puts everything into the "Street" field
insertIntent.putExtra(ContactsContract.Intents.Insert.POSTAL, "1234 TestRun Drive\n Testopolis5\n Testerland\n 55421\n USA");
startActivity(insertIntent);
最佳答案
您可以创建一个实现 Parcelable 的数据类界面。 之后,您可以将整个对象从一个 Activity 移动到另一个 Activity ,保留所有类方法和功能。
例如,
首先,创建一个实现 Parcelable
的数据类。
public class Property implements Parcelable {
...
}
在第一个 Activity 中创建您的 Intent 对象,并使用 putExtra
方法将整个类添加为额外内容。
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
intent.putExtra("Property", property);
startActivity(intent);
现在您处于第二个 Activity 中,您需要收集 intent
对象并提取已转换为 parcel
的属性类。
//collect our intent
Intent intent = getIntent();
Property property = intent.getParcelableExtra("Property");
查看教程 Transfer Data between Activities with Android Parcelable了解更多详情。
关于java - 如何查找另一个应用程序中字段的 Intent 键(尝试添加额外的联系信息但找不到该键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50384056/