【问题标题】:Android startActivityForResult not returning on calendar dataAndroid startActivityForResult 未返回日历数据
【发布时间】:2012-11-24 04:09:52
【问题描述】:
   The code Written below works for me

                Intent intent = new Intent(Intent.ACTION_EDIT);
                intent.setType("vnd.android.cursor.item/event");
                intent.putExtra("title", "Hi this me");
                intent.putExtra("description", "Some description");
                intent.putExtra("beginTime", eventStartInMillis);
                intent.putExtra("endTime", eventEndInMillis);
                startActivityForResult(intent, 1);

我的问题是我无法在 OnActivityResult 中备份 android 日历数据,我不知道为什么请帮我解决这个问题。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == 1) {

     if(resultCode == RESULT_OK){

      String result=data.getStringExtra("title");

}


And i am getting data.getExtras() is null !!!!!

【问题讨论】:

  • 您需要哪些数据?到目前为止,你得到了什么?根据上面的代码,你只是得到了标题。
  • 但是捆绑额外内容 = data.getExtras();正在返回 null
  • 我明白了。谢谢(你的)信息。我只是问,因为它没有写在你的问题中。
  • 您检查过您的请求代码吗?
  • 是的,但同样的问题我认为日历可能不会提供他们的数据

标签: android events android-intent calendar


【解决方案1】:

您可以使用此代码:

public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
 if (resultCode == Activity.RESULT_OK) {
        Bundle extras = data.getExtras();
        String title=extras.getString("title");
        String description=extras.getString("description");
        String beginTime=extras.getString("beginTime");
        String endTime=extras.getString("endTime");

【讨论】:

  • 但是Bundle extras = data.getExtras();正在返回 null
【解决方案2】:

问题是您将数据直接放入意图并通过 Bundle 检索它。

试试这个:

像这样创建一个捆绑对象:

Intent i = new Intent("yourFullyQualifiedClassName");

 Bundle extras = new Bundle();
 extras.putString("title", "Hi this me");
 extras.putString("description", "Some description");
 i.putExtras(extras);

然后像这样从包中检索数据:

Bundle bundle = data.getExtras();

bundle.getString("title");

希望这能解决您的问题。

【讨论】:

  • 但是Bundle bundle = getIntent().getExtras();正在返回 null
  • @mitenjoshi 我给了你一些笼统的答案。将 getIntent() 替换为“数据”,因为意图可直接作为方法中的数据使用。
  • 是的,我用那个实现了,但还是一样
  • 然后给我看你的完整代码。编辑您的问题或分享显示您的代码的链接。在没有大小写的情况下,如何在 switch 语句中进入 if 条件?奇怪。
【解决方案3】:

这是因为你是通过startActivityForResult从Activity A将数据传递给你启动的Activity(Activity B)。onActivityResult()只会得到Activity B传递的数据,而不是Activity A传递的数据。

这是一个关于 android 意图的不错的教程。

http://www.vogella.com/articles/AndroidIntent/article.html

还有这个网站

http://saigeethamn.blogspot.jp/2009/08/android-developer-tutorial-for_31.html

【讨论】:

  • 但我使用相同的 startactivityforresult 获得了联系数据,但无法获得我不知道的日历数据!!
  • if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData();光标 c = managedQuery(contactData, null, null, null, null); if (c.moveToFirst()) { 字符串名称 = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); System.out.println("联系人姓名是" + name);此代码提供联系数据
【解决方案4】:

这是因为结果代码总是返回 0 在日历隐式意图的 android 日历活动结果中尝试在 onActivity 结果中使用 RESULT_CANCEL

public void onActivityResult(int reqCode, int resultCode, Intent data) {

super.onActivityResult(reqCode, resultCode, data);

switch (reqCode) {

如果(结果代码 == Activity.RESULT_CANCEL)

您必须查看Next Event ID 它会起作用 希望对你有帮助..

去吧

【讨论】:

    【解决方案5】:

    如果你查看官方文档: http://developer.android.com/reference/android/app/Activity.html#setResult(int, android.content.Intent) 您将看到您在 onActivityResult() 中获得的 Intent 实际上取决于您正在调用的 Activity。更具体地说,它取决于被调用的 Activity 是否使用 setResult(int, android.content.Intent) 和带有附加功能的 Intent。

    通过快速互联网搜索,您使用的代码似乎是用于在日历中添加事件,但这并不一定意味着您将从日历应用程序中获取事件数据。 Perhups 你必须在之后查询日历才能获得它们。

    至于联系人应用程序,它在Contacts Provider Guide 中明确说明,如果您使用 startActivityForResult,您可以在 onActivityResult() 中获取联系人数据。在日历提供者指南中没有这样的声明,因此可能不支持。

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 2011-12-14
      • 2017-01-27
      • 1970-01-01
      • 2016-03-27
      • 2019-02-20
      相关资源
      最近更新 更多