Android 意图字符串extra是SpannbleString,但不是';真的吗
这是我正在使用的广播接收器类:Android 意图字符串extra是SpannbleString,但不是';真的吗,android,string,android-intent,spannablestring,Android,String,Android Intent,Spannablestring,这是我正在使用的广播接收器类: public class AlarmReciever extends BroadcastReceiver { private Context context; private String name; private String description; @Override public void onReceive(Context c, Intent intent) { name = intent.getStringExtra("name");
public class AlarmReciever extends BroadcastReceiver {
private Context context;
private String name;
private String description;
@Override
public void onReceive(Context c, Intent intent) {
name = intent.getStringExtra("name");
description = intent.getStringExtra("description");
context = c;
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(1000);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setContentText(description)
.setSmallIcon(R.drawable.notificationicon)
.setLights(Color.rgb(78, 155, 222), 1000, 1000)
.setAutoCancel(true)
.setContentTitle(name);
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, builder.build());
}
}
我的问题是,当我尝试将意图中的字符串附加值分配给字符串类型的变量时,会出现以下两个错误:
12-30 20:34:45.224 14614-14614/eli.me.jitteralarm W/Bundle:Key name应为字符串,但值为android.text.SpannableString。返回了默认值。
12-30 20:34:45.224 14614-14614/eli.me.jitteralarm W/Bundle:尝试强制转换生成的内部异常:
java.lang.ClassCastException:android.text.SpannableString不能转换为java.lang.String
位于android.os.BaseBundle.getString(BaseBundle.java:923)
位于android.content.Intent.getStringExtra(Intent.java:5349)
在eli.me.jitteralarm.AlarmReceiver.onReceive(AlarmReceiver.java:22)
位于android.app.ActivityThread.HandlerReceiver(ActivityThread.java:2725)
位于android.app.ActivityThread.-wrap14(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-30 20:34:45.224 14614-14614/eli.me.jitteralarm带束:键
说明应为字符串,但值为
android.text.SpannableString。返回了默认值。
12-30 20:34:45.224 14614-14614/eli.me.jitteralarm W/捆绑:尝试
强制转换生成的内部异常:
java.lang.ClassCastException:android.text.SpannableString不能为空
转换为java.lang.String
位于android.os.BaseBundle.getString(BaseBundle.java:923)
位于android.content.Intent.getStringExtra(Intent.java:5349)
在eli.me.jitteralarm.AlarmReceiver.onReceive(AlarmReceiver.java:23)
位于android.app.ActivityThread.HandlerReceiver(ActivityThread.java:2725)
位于android.app.ActivityThread.-wrap14(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我知道getStringExtra的结果是一个SpannableString,但该方法的返回值是一个字符串(在intellij中的autocomplete和文档中)
我在互联网上浏览了一下,发现您可以尝试将其转换为字符串:
name = "" + spannableString;
但当我尝试此操作时,仍然会抛出错误
我尝试过的另一个解决方案是对“spannable string”使用.toString()。当我这样做时,应用程序立即终止,抛出的错误表示该方法不能用于string对象。真奇怪
注意:在调试我的应用程序时,正在发送的通知不会像上面的代码那样有标题或描述。当我尝试转换方法时,标题和描述都是“null”。这是什么原因?这两个错误都表示它将null返回给变量,而不是所需的标题和描述
另外,这是我尝试使用广播接收器的代码。我不认为这是个问题,但以防万一,这是个问题
public void startAlarm(View view) {
EditText nameInput = (EditText) this.findViewById(R.id.nameInput);
EditText descriptionInput = (EditText) this.findViewById(R.id.descriptionInput);
Intent intent = new Intent(this, AlarmReciever.class);
intent.putExtra("name", nameInput.getText());
intent.putExtra("description", descriptionInput.getText());
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pendingIntent);
}
您需要通过
Intent
输入String
值,因为nameInput.getText()
将返回
这是对我有效的解决方案:
Bundle extras = getIntent().getExtras();
String contains = new StringBuilder(extras.getCharSequence("contains")).toString();
spannableString
在代码中的什么位置?它不是。该方法返回一个字符串值,但两个错误指向.getStringExtraline.intent.putExtra(“name”,“abc”);意图。额外(“说明”、“123”);你能试着把数据分成两行吗。然后告诉我错误是否仍然显示我修复了问题,谢谢!你是如何解决的,我的答案中有一个解决方案
Bundle extras = getIntent().getExtras();
String contains = new StringBuilder(extras.getCharSequence("contains")).toString();