很明显不是 onActivityResult 的问题啊,你看崩溃 log, 上面写着Caused by: java.lang.IllegalArgumentException: java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long,,应该是你在 onActivityResult 中某个方法中传入参数格式错误,,

解决方案 »

  1.   

    at com.wonder.fengmo.Security.generatePublicKey(Security.java:89)这里 Security.java 89行
      

  2.   

    Caused by: java.lang.IllegalArgumentException: java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long
    传入的key格式不对。
      

  3.   

    第89行那里,请使用 e.printStack(),你自己处理异常之后,我们看不了异常信息了,所以麻烦你加了这段代码之后,再运行出错一次,让我们看看报错信息
      

  4.   

    额,仔细看了看,貌似是用 Illegal 包裹之后打出来了的,那么你把传入的参数 encodedPublishKey 打出来看看是不是这个为 null, 或者你的这个字符串格式有错
      

  5.   

    Caused by: java.lang.IllegalArgumentException: java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long
    传入的key格式不对。
      

  6.   

    恩,打印这份LOG时encodedPublishKey的确为NULL,昨天我将它修改成了一个私匙字符串,但是依然是设备在已登录谷歌账号时进入游戏会崩溃,如果设备注销了谷歌账号则可以进入游戏,但是在支付时调用谷歌方法依然会崩溃有没有可能是私匙打错了什么的??
      

  7.   

    恩,也就是说,这个错误就是encodedPublishKey错误的问题吧
      

  8.   

    楼上的大神,你说的key传入错误是encodedPublishKey还是KEY_FACTORY_ALGORITHM
      

  9.   

    这行代码产生的异常return keyFactory.generatePublic(new X509EncodedKeySepc(decodedKey));
      

  10.   

    更准确一点说,是这个语句new X509EncodedKeySepc(decodedKey)
      

  11.   

    那我就不知道你的encodedPublicKey是怎么获得的了。
    我写过类似代码,用的是RSA加密算法,用的key由openssl工具生成(需要去掉头尾的两行标识)。
      

  12.   

    encodedPublicKey是在onCreate的一个字符串传过来的 ,MII开头的一长串
      

  13.   

    之后的LOG没有了,平台那边不发了
      

  14.   

    那有没有可能是传入的encodedPublishKey字符串传过长导致byte[]越界呢?encodedPublishKey我数了下有390还是490个字符
      

  15.   


    为什么我用家里的电脑试验一下,却是新的函数呢??直接放"RSA会报错
      

  16.   

     
    这个是Base64的解码,"RSA"不是base64编码当然不行进行base64解码。而且decode还有第二个参数,一般是Base64.DEFAULT