我正在尝试将一些String从一个意图传递到另一个意图。但是adt说:
密钥文本期望String但值是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);
感谢。
P.S。这是完整的堆栈跟踪:
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)
答案 0 :(得分:17)
变化
intent.putExtra(TEXT_KEY, text.getText());
到
intent.putExtra(TEXT_KEY, text.getText().toString());
在第一个活动中,您需要发送您的值getText
方法返回Editable
,因此如果您想要值,则需要使用toString()
方法。
您可以使用
处理第二课程text = intent.getStringExtra(MainActivity.TEXT_KEY).toString();
你需要使用这两种方式中的一种,
答案 1 :(得分:3)
您使用getStringExtra()
方法获得的值为SpannableString
,但您尝试将其置于String
中,这就是为什么它的投掷错误如下所示...... < / p>
java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String
使用toString()
方法检索字符串extra时,可以尝试使用getStringExtra()
方法,如下所示...
Intent intent = this.getIntent();
text = intent.getStringExtra(MainActivity.TEXT_KEY).toString();
答案 2 :(得分:0)
在我的案例中有非常有趣的技巧。 我按照要求进行了所有操作,但是通过空/空字符串初始化绑定而错过了它。我有...
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);
Chears!