4

我正在尝试从活动中获取输入的数据。在我的主屏幕上,我开始了这样的活动:

Intent myIntent = new Intent(this, ContactInfo.class);
startActivityForResult(myIntent, AppState.ACTIVITY_CONTACT_INFO);

在活动中,当用户点击保存按钮时,我会触发以下操作:

Intent intent = new Intent();
TextView tvName = (TextView) findViewById(R.id.txtContactName);
intent.putExtra("Name", tvName.getText());

if (getParent() == null) {
    setResult(Activity.RESULT_OK, intent);
} else {
    getParent().setResult(Activity.RESULT_OK, intent);
}
finish();

在原始活动中,我捕捉到onActivityResult这样的事件:

String contactName = (String) data.getExtras().get("Name");

然而,这条线爆炸了java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String。我也尝试getStringExtra过同样的结果。

我错过了什么?

4

2 回答 2

13

TextView.getText()不返回字符串,而是SpannableString你看到的。改为使用getText().toString()

于 2012-06-14T22:03:38.313 回答
4

有一个类似的问题,出现错误的地方,android.text.SpannableString 不能被强制转换为 java.lang.String

这是因为 getText() 最后需要有一个 'toString()'。如果没有这个 'toString()',它会在 Android 4.x 上崩溃,但可以在 Android 2.x 上运行。

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
TextView viewTxt;  // Continue and complete this yourself.

String tmpStr = (String) viewTxt.getText().toString();
于 2013-12-11T02:21:28.557 回答