我试图从库libproximitybecon创建一个对象作为功能“ getforObserved”的输入。该对象的创建是通过函数“ getObservedBody”完成的,但字段“ id”无效: 我遇到此错误:未处理的信标服务响应:Response {protocol = h2,code = 400,message =,url = ...“
JSONObject object = new JSONObject();
try {
object=getObservedBody(beacon.getId(),"*");
} catch (JSONException e) {
e.printStackTrace();
}
Log.i(TAG,object.toString());
client.getForObserved(getBeaconCallback,object,"AIzaSyAOH0j4JgZxZTa7XTAYpPZBGCFxJEkVyGU");
private JSONObject getObservedBody(byte[] advertisement, String namespace)
throws JSONException {
//byte[] a = Arrays.copyOfRange(advertisement, 2, 18);
int packetLength = 16;
//String id =Utils.base64Encode(advertisement).toString();
int offset = advertisement.length - packetLength;
String id = Base64.encodeToString(advertisement,
offset, packetLength, Base64.NO_WRAP);
Log.i(TAG,"actualID: "+id);
Log.i(TAG,"from adv: "+advertisement);
return new JSONObject()
.put("observations", new JSONArray()
.put(new JSONObject()
.put("advertisedId", new JSONObject()
.put("type", "EDDYSTONE")
.put("id", id)
)
)
)
.put("namespacedTypes", new JSONArray()
.put(namespace)
);
}
}
答案 0 :(得分:0)
使用您发布到服务器的JSON格式不正确,Google拒绝了它并发送了400响应。尽管看不到代码为Base64编码并作为id字段发送的字节数组beacon.getId()
的内容,但我看不到任何明显错误的内容。这可能代表无效的Eddystone实例标识符。
我将通过以下方式开始调试:
beacon.getId()
转换为十六进制字符串并记录下来。完成上述操作后,如果仍然没有发现明显的问题,请将这两个问题的结果添加到您的问题中。