我最近一直在设置移动应用程序以使用我的流星服务器。作为其中的一部分,我必须从android传递流星网络应用程序数据。不幸的是我收到一个错误,告诉我我传递的java对象“将被序列化为null
”。我该如何防止这种情况?
JSONObject json = new JSONObject();
try{
json.put("Foo", "1");
json.put("Blah", 0);
}catch (JSONException e){
}
Object[] object = new Object[1];
object[0] = json;
System.out.println(object + ", " + object[0] + ", " + object[0].toString());
mMeteor.call("xxx", object, new ResultListener() {
@Override
public void onSuccess(String result) {
}
@Override
public void onError(String error, String reason, String details) {
}
});
}
@Override
public void onError(String error, String reason, String details) {
}
});
Android / Meteor界面库函数
public void callWithSeed(final String methodName, final String randomSeed, final Object[] params, final ResultListener listener) {
// create a new unique ID for this request
final String callId = uniqueID();
// save a reference to the listener to be executed later
if (listener != null) {
mListeners.put(callId, listener);
}
// send the request
final Map<String, Object> data = new HashMap<String, Object>();
data.put(Protocol.Field.MESSAGE, Protocol.Message.METHOD);
data.put(Protocol.Field.METHOD, methodName);
data.put(Protocol.Field.ID, callId);
if (params != null) {
data.put(Protocol.Field.PARAMS, params);
}
if (randomSeed != null) {
data.put(Protocol.Field.RANDOM_SEED, randomSeed);
}
send(data);
}
答案 0 :(得分:0)
我遇到了同样的问题,我的第一个错误是传递CharSequence
而不是String
作为参数(您的Object[]
),而我的另一个错误是传递了{{1 }}作为另一个参数(我通过发送Object[]
来解决此问题,例如:String
)不要忘记在服务器端处理此问题,您将收到String.valueOf(your_object_list)
而不是{ {1}}。
答案 1 :(得分:0)
将JSONArray
转换为List
,将JSONObject
转换为HashMap
,然后将其传递,而不是原始的JSONObject
或JSONArray
。
在嵌套JSONObject
和JSONArray
的情况下,您可以编写一个递归函数进行转换,也可以使用GSON库进行转换。
有关转换的更多详细信息,this SO post可能会有所帮助。