Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 意图字符串extra是SpannbleString,但不是';真的吗_Android_String_Android Intent_Spannablestring - Fatal编程技术网

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();