当前位置:编程学习 > JAVA >>

JAVA推送IOS报错

由于项目需要,要从java后端推送消息到IOS客户端。
使用JAVAPNS,从网上搜索代码如下:
public static void main(String[] args) throws Exception {
try {
  String deviceToken = "e6050f8208e210fe167f7644cb032d2cc9d4ce8a0ea";

  PayLoad payLoad = new PayLoad();
  payLoad.addAlert("IOS推送测试");
  payLoad.addBadge(4);
  payLoad.addSound("default");

  PushNotificationManager pushManager = PushNotificationManager.getInstance();
  pushManager.addDevice("iPhone", deviceToken);

  //Connect to APNs
  String host= "gateway.sandbox.push.apple.com";
  int port = 2195;
  String certificatePath= "D:\\北京中行推送\\BOC_POC.p12";
  String certificatePassword= "123456";
  pushManager.initializeConnection(host,port, certificatePath,certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);

  //Send Push
  Device client = pushManager.getDevice("iPhone");
  pushManager.sendNotification(client, payLoad);
  pushManager.stopConnection();

  pushManager.removeDevice("iPhone");
 }
 catch (Exception e) {
  e.printStackTrace();
 }

}
运行以上代码报:

og4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
java.lang.StringIndexOutOfBoundsException: String index out of range: 44
at java.lang.String.substring(String.java:1935)
at javapns.back.PushNotificationManager.getMessage(Unknown Source)
at javapns.back.PushNotificationManager.sendNotification(Unknown Source)
at com.test.client.PushTest.pushMessage(PushTest.java:32)
at com.test.client.PushTest.main(PushTest.java:45)
求大神解决啊!看了下代码是getMessage的这几行代码报错:
 for (int j = 0; j < paramString.length(); j += 2)
    {
      localObject = paramString.substring(j, j + 2);
      k = Integer.parseInt((String)localObject, 16);
      arrayOfByte[(i++)] = (byte)k;
    }
想问问大家推送都是怎么做的?以上写法有问题吗? java ios --------------------编程问答-------------------- 就当看你这段代码,就有Bug了
for (int j = 0; j < paramString.length(); j += 2)
    {
      localObject = paramString.substring(j, j + 2);
      k = Integer.parseInt((String)localObject, 16);
      arrayOfByte[(i++)] = (byte)k;
    }
其中这行代码paramString.substring(j, j + 2);
可能存在超出下标的风险,如paramString.length() == 3时,第二次循环时,j+2会等于4,超出下标报错(StringIndexOutOfBoundsException) --------------------编程问答--------------------
引用 1 楼 zxhcloth 的回复:
就当看你这段代码,就有Bug了
for (int j = 0; j < paramString.length(); j += 2)
    {
      localObject = paramString.substring(j, j + 2);
      k = Integer.parseInt((String)localObject, 16);
    ……
所以我很纳闷了,都像这样写难道不会出现这个问题? --------------------编程问答-------------------- 这样写肯定会出问题啊,条件改下
j < paramString.length()
改成
j + 2 < paramString.length()
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,