【问题标题】:why getStringExtra doesn't give the proper output?为什么 getStringExtra 没有给出正确的输出?
【发布时间】:2018-11-09 03:44:46
【问题描述】:

我试图将一些字符串从一个意图传递到另一个意图。但广告说:

键文本应为字符串,但值为 android.text.SpannableString。 已返回默认值。

但我使用字符串作为键而不是它声称的!

这是我的第一个活动的代码:

private int CONTACTS_ACTIVITY_REQUEST = 1001;
public static final String TEXT_KEY = "text";
...

Intent intent = new Intent(this, ContactsActivity.class);
intent.putExtra(TEXT_KEY, text.getText());
startActivityForResult(intent, CONTACTS_ACTIVITY_REQUEST);

我的第二个活动:

Intent intent = this.getIntent();
text = intent.getStringExtra(MainActivity.TEXT_KEY);

谢谢。

附言这是完整的堆栈跟踪:

03-22 14:51:32.975: W/Bundle(1248): Key text expected String but value was a android.text.SpannableString.  The default value <null> was returned. 
03-22 14:51:33.006: W/Bundle(1248): Attempt to cast generated internal exception: 
03-22 14:51:33.006: W/Bundle(1248): java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String 
03-22 14:51:33.006: W/Bundle(1248):     at android.os.Bundle.getString(Bundle.java:1085) 03-22 14:51:33.006: W/Bundle(1248):    at android.content.Intent.getStringExtra(Intent.java:4473) 
03-22 14:51:33.006: W/Bundle(1248):     at com.saeedFri.groupsms.ContactsActivity.onCreate(ContactsActivity.java:39) 
03-22 14:51:33.006: W/Bundle(1248):     at android.app.Activity.performCreate(Activity.java:5133) 
03-22 14:51:33.006: W/Bundle(1248):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
03-22 14:51:33.006: W/Bundle(1248):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
03-22 14:51:33.006: W/Bundle(1248):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
03-22 14:51:33.006: W/Bundle(1248):     at android.app.ActivityThread.access$600(ActivityThread.java:141) 
03-22 14:51:33.006: W/Bundle(1248):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
03-22 14:51:33.006: W/Bundle(1248):     at android.os.Handler.dispatchMessage(Handler.java:99) 
03-22 14:51:33.006: W/Bundle(1248):     at android.os.Looper.loop(Looper.java:137) 
03-22 14:51:33.006: W/Bundle(1248):     at android.app.ActivityThread.main(ActivityThread.java:5103) 
03-22 14:51:33.006: W/Bundle(1248):     at java.lang.reflect.Method.invokeNative(Native Method) 
03-22 14:51:33.006: W/Bundle(1248):     at java.lang.reflect.Method.invoke(Method.java:525) 
03-22 14:51:33.006: W/Bundle(1248):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
03-22 14:51:33.006: W/Bundle(1248):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
03-22 14:51:33.006: W/Bundle(1248):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • "MainActivity.TEXT_KEY" 你不应该在 Activity 中定义 public static 字段或方法 - 这是 Android 中可能出现的最糟糕的做法之一。在辅助类或/res/values/strings.xml 中定义全局值
  • @Squonk Tnx 请谨慎考虑。

标签: android android-intent


【解决方案1】:

改变

intent.putExtra(TEXT_KEY, text.getText());

intent.putExtra(TEXT_KEY, text.getText().toString());

在第一个活动中你需要发送你的值,getText 方法返回Editable,所以如果你想要值你需要使用toString() 方法。

你可以在二等舱处理这个问题

text = intent.getStringExtra(MainActivity.TEXT_KEY).toString();

你需要使用这两种方式之一,

【讨论】:

    【解决方案2】:

    您使用getStringExtra() 方法获得的值是SpannableString,但您正试图将其放入String,这就是为什么它的抛出错误如下...

    java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String
    

    当您使用getStringExtra() 方法检索额外的字符串时,您可以尝试使用toString() 方法,如下所示...

    Intent intent = this.getIntent();
    text = intent.getStringExtra(MainActivity.TEXT_KEY).toString();
    

    【讨论】:

      【解决方案3】:

      在我的案例中得到了非常有趣的 hack。 我按要求做了所有事情,但我错过了用空/空字符串初始化绑定。我有...

      public static final String TITLE = "";
      

      插入

      public static final String TITLE = "Something Here"; // Solution
      

      稍后按照您的意图进行:-

               String title1 = title.getText().toString();
               Intent data = this.getIntent();
               data.putExtra(TITLE, title1);
      

      然后在接收类-

        String TITL = data.getStringExtra(SendingClass.TITLE);
      

      切!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-28
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-31
        相关资源
        最近更新 更多