GVKun编程网logo

Base64:java.lang.IllegalArgumentException:非法字符

35

如果您对Base64:java.lang.IllegalArgumentException:非法字符感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Base64:java.lang.Illega

如果您对Base64:java.lang.IllegalArgumentException:非法字符感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Base64:java.lang.IllegalArgumentException:非法字符的各种细节,此外还有关于 java.lang.IllegalArgumentException、android – 未指定的顶级例外:java.lang.IllegalArgumentException:已添加、Android 异常处理:java.lang.IllegalArgumentException(..、Android:java.lang.IllegalArgumentException:未知颜色错误的实用技巧。

本文目录一览:

Base64:java.lang.IllegalArgumentException:非法字符

Base64:java.lang.IllegalArgumentException:非法字符

我正在尝试在用户注册后发送确认电子邮件。我为此使用JavaMail库和Java 8 Base64 util类。

我以以下方式对用户电子邮件进行编码:

byte[] encodedEmail = Base64.getUrlEncoder().encode(user.getEmail().getBytes(StandardCharsets.UTF_8));Multipart multipart = new MimeMultipart();InternetHeaders headers = new InternetHeaders();headers.addHeader("Content-type", "text/html; charset=UTF-8");String confirmLink = "Complete your registration by clicking on following"+ "\n<a href=''" + confirmationURL + encodedEmail + "''>link</a>";MimeBodyPart link = new MimeBodyPart(headers,confirmLink.getBytes("UTF-8"));multipart.addBodyPart(link);

在哪里confirmationURL

private final static String confirmationURL = "http://localhost:8080/project/controller?command=confirmRegistration&ID=";

然后以这种方式在ConfirmRegistrationCommand中对此进行解码:

    String encryptedEmail = request.getParameter("ID");    String decodedEmail = new String(Base64.getUrlDecoder().decode(encryptedEmail), StandardCharsets.UTF_8);    RepositoryFactory repositoryFactory = RepositoryFactory            .getFactoryByName(FactoryType.MYSQL_REPOSITORY_FACTORY);    UserRepository userRepository = repositoryFactory.getUserRepository();    User user = userRepository.find(decodedEmail);    if (user.getEmail().equals(decodedEmail)) {        user.setActiveStatus(true);        return Path.WELCOME_PAGE;    } else {        return Path.ERROR_PAGE;    }

当我尝试解码时:

http://localhost:8080/project/controller?command=confirmRegistration&ID=[B@6499375d

我正在java.lang.IllegalArgumentException: Illegal base64 character 5b

我尝试使用基本的编码/解码器(而不是URL编码),但没有成功。

解决了:

问题是下一个-在该行中:

 String confirmLink = "Complete your registration by clicking on following"+ "\n<a href=''" + confirmationURL + encodedEmail + "''>link</a>";

我在字节数组上调用toString,因此我应该执行以下操作:

String encodedEmail = new String(Base64.getEncoder().encode(                user.getEmail().getBytes(StandardCharsets.UTF_8)));

感谢 Jon SkeetByteHamster

答案1

小编典典

您的编码文字为[B@6499375d。那不是Base64, 编码时 出了点问题。那个解码代码看起来不错。

使用以下代码将byte []转换为字符串,然后再将其添加到URL:

String encodedEmailString = new String(encodedEmail, "UTF-8");// ...String confirmLink = "Complete your registration by clicking on following"    + "\n<a href=''" + confirmationURL + encodedEmailString + "''>link</a>";

 java.lang.IllegalArgumentException

java.lang.IllegalArgumentException

  问题描述:java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class cn.etouch.ecalendar.waterfallview.StaggeredGridView$GridListSavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view''s id is id/lv. Make sure other views do not use the same id.

问题出现情况分析:

android 5.0及以下版本如果出现这个问题,不要以为真的是id重复了。

我的项目情况是这样的在一个activity中有四个fagment ,F1,F2,F3,F4,在F2和F3的切换过程中,F4其实也已经初始化了,我在F4的布局中使用了自定义了一个ListView,它的id为lv.

之所以报错说id相同,大约是F4的上一次状态被保留下来了。

问题解决方案:

自定义的Listview的方法重写

   @Override
    protected void onRestoreInstanceState(Parcelable state) {
            super.onRestoreInstanceState(state); }

      修改为:

        @Override
    protected void onRestoreInstanceState(Parcelable state) {
        try {
            super.onRestoreInstanceState(state);
        }catch (Exception e) {}
        state=null;
      }
 

 

android – 未指定的顶级例外:java.lang.IllegalArgumentException:已添加

android – 未指定的顶级例外:java.lang.IllegalArgumentException:已添加

我是 Android的新手,试图启动正在构建和部署的项目.但是每次尝试从eclipse启动应用程序时,我会收到以下错误:
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lcom/.../model/AvailabilityRequest$DAY_TIME_PREFERENCE;
[2012-02-06 17:32:11 - main-app] Dx     at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[2012-02-06 17:32:11 - main-app] Dx     at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[2012-02-06 17:32:11 - main-app] Dx     at com.android.dx.command.dexer.Main.processClass(Main.java:486)
...
[2012-02-06 17:32:11 - main-app] Dx     at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
[2012-02-06 17:32:11 - main-app] Dx 1 error; aborting
[2012-02-06 17:32:11 - main-app] Conversion to Dalvik format Failed with error 1

我为这个愚蠢的事情杀了大量的时间.显然,这是已知的问题,但对我来说没有任何效果.
我拥有的:

操作系统 – OS X,这很重要我认为;
IDE – eclipse 3.7.1
ADT – 版本:15.0.1.v201111031820-219398
构建工具 – Maven

到目前为止我已经尝试过
– 属性 – > Java Build Path->除去Android x.y.z之外的所有库的库,然后Maven->更新项目配置,也清理项目;
– 魔法关闭并重新开启日食;
– 删除和重新创建项目及其库的舞蹈(根据错误消息的文本,有一些重复的源,它们位于主项目中使用的2个库之一).

之后的一个变体(通常是第一个)它开始工作,但我可以花20分钟使其工作或几个小时…,今天我根本无法做到这一点.

任何想法将不胜感激.

解决方法

如果您的Eclipse类路径包含多个相同名称/包的类,ADT将抛出一个异常.在这种情况下,它遇到Maven依赖关系中的AvailabilityRequest类的多个实例.

您可以通过查找哪些类路径依赖关系在其中包含相同的类文件来解决此问题(按Ctrl-Alt-T并输入AvailabilityRequest将执行此操作).

然后,您可以在m2e POM编辑器中打开POM,然后转到“依赖关系层次”选项卡.这将允许您选择无关的依赖关系,您可以通过右键单击并选择“排除Maven Artifact …”来排除这些依赖关系,这将自动添加<排除>元素到您的POM.这将从Eclipse类路径中删除重复的JAR,并允许您构建项目.

此外,您应该注意添加到POM中的依赖关系.

Android 异常处理:java.lang.IllegalArgumentException(..

Android 异常处理:java.lang.IllegalArgumentException(..

对以下错误:

java.lang.RuntimeException: java.lang.IllegalArgumentException: File /data/data/com.alex.datasave/files/user.txt contains a path separator


原先代码:

fis = this.context.openFileInput("/data/data/com.alex.datasave/files/user.txt");


正确代码:

File file = new File("/data/data/com.alex.datasave/files/user.txt");
fis = new FileInputStream(file);


注意: 
1.FileInputStream  与 openFileInput 


补充知识:

public abstract FileOutputStream openFileOutput (String name, int mode)

Since:  API Level 1

Open a private file associated with this Context''s application package for writing. Creates the file if it doesn''t already exist.

Parameters
name The name of the file to open; can not contain path separators.
mode Operating mode. Use 0 or MODE_PRIVATE for the default operation, MODE_APPEND to append to an existing file, MODE_WORLD_READABLE andMODE_WORLD_WRITEABLE to control permissions.
Returns
  • FileOutputStream Resulting output stream.

如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法。
FileInputStream inStream = this.getContext().openFileInput("user.txt");
Log.i("FileTest", readInStream(inStream));
readInStream()的方法请看本页下面备注。


或者直接使用文件的绝对路径:
File file = new File("/data/data/com.alex.datasave/files/user.txt");
FileInputStream inStream = new FileInputStream(file);
Log.i("FileTest", readInStream(inStream));
注意:上面文件路径中的“com.alex.datasave”为应用所在包,当你在编写代码时应替换为你自己应用使用的包。
对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限

Android:java.lang.IllegalArgumentException:未知颜色错误

Android:java.lang.IllegalArgumentException:未知颜色错误

从this post我们可以看出你应该写

holder.itemView.cardView
    .setCardBackgroundColor(ContextCompat.getColor(getActivity(),R.color.ColorLightBlack))

您正在尝试使用 parseColor,它以十六进制字符串作为参数。但是调用 toString() 可能不会转换为十六进制。

,

R.color.ColorLightBlack 是 Android 系统分配的整数值。您正在尝试将此值传递给需要字符串的 parseColor 方法。即使您在 R.color.ColorLightBlack 上使用 toString,该值仍然是 Integer,因此您会收到错误消息。

您可以像这样更新代码:

if (arrList[position].color != null){
holder.itemView.cardView.setCardBackgroundColor(Color.parseColor(arrList[position].color)) }
else { 
holder.itemView.cardView.setCardBackgroundColor(R.color.ColorLightBlack)) 
} 

今天关于Base64:java.lang.IllegalArgumentException:非法字符的分享就到这里,希望大家有所收获,若想了解更多关于 java.lang.IllegalArgumentException、android – 未指定的顶级例外:java.lang.IllegalArgumentException:已添加、Android 异常处理:java.lang.IllegalArgumentException(..、Android:java.lang.IllegalArgumentException:未知颜色错误等相关知识,可以在本站进行查询。

本文标签: