public static void SaveWxCloud<T>(T playerData)
{
if (playerData == null) return;
WX.cloud.CallFunction(new CallFunctionParam()
{
name = "upLoadData",
data = JsonUtility.ToJson(playerData),
//data = playerData,
success = (res)=>
{
Debug.Log($"保存{playerData}成功,{res.result}");
},
fail = (res)=>
{
Debug.Log($"保存{playerData}失败,错误原因:{res.errMsg}");
}
});
}
我按教程填的 data = JsonUtility.ToJson(playerData),
出现错误提示 保存HappyBirdStudio.MiniParty.PlayerData失败,错误原因:parameter should be object instead of string;
但如果改成data = playerData,转成小游戏代码后又提示数据为空,但其实数据并不为空。这个异常在调用服务器的uploadData前就抛出了
TypeError: Cannot convert undefined or null to object
at t.keys (<anonymous>)
at fixCallFunctionData (cloud.js? [sm]:7)
at cloud.js? [sm]:9
at Array.forEach (<anonymous>)
at fixCallFunctionData (cloud.js? [sm]:7)
at Object.WX_CloudCallFunction (cloud.js? [sm]:41)
at _WX_CloudCallFunction (webgl.wasm.framework.unityweb.js:11)
at WXCloud_CallFunction_mA2AD4DB862B89E10C6DBD8D1BC918C6A60AD5FD9 (<anonymous>:wasm-function[10017]:0x29f7f8)
at WXWrapper_SaveWxCloud_TisIl2CppFullySharedGenericAny_m8E518C419A96B8392ADA1FA11069DADC41B9042A_gshared (<anonymous>:wasm-function[13217]:0x32b573)
at U3CU3Ec_U3CCreateHeroU3Eb__1_0_mC04785FF5499D3C0CE4D0B519C812FC2C36B413E (<anonymous>:wasm-function[26273]:0x6643f2)
at U3CU3Ec__DisplayClass5_0_U3CGetUserInfoU3Eb__0_m9EDE4B3CE512EE2209869822D6E93B64BF712DE8 (<anonymous>:wasm-function[26279]:0x6647ca)
at RuntimeInvoker_TrueVoid_t4861ACF8F4594C3437BB48B6E56783494B843915_VoidU2A_t104EAEFBD2D237A8C29618913DA9B4D99355E965(void (*)(), MethodInfo const*, void*, void**, void*) (<anonymous>:wasm-function[28756]:0x6f95cb)
at Func_1_Invoke_m35CBC166F464B8A1169583672025E6D64211856C_ClosedInstInvoker(Func_1_tBB8824FA8746333BFFF3AB3CE4A41B58450AF431*, void**, MethodInfo const*) (<anonymous>:wasm-function[15712]:0x3b045d)
at WXSDKManagerHandler__CloudCallFunctionCallback_m8AADBC5ACD828FA354AA33E3897CA87104E7E84F (<anonymous>:wasm-function[11199]:0x2c1521)
at RuntimeInvoker_TrueVoid_t4861ACF8F4594C3437BB48B6E56783494B843915_VoidU2A_t104EAEFBD2D237A8C29618913DA9B4D99355E965(void (*)(), MethodInfo const*, void*, void**, void*) (<anonymous>:wasm-function[28756]:0x6f95cb)
at il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) (<anonymous>:wasm-function[30088]:0x711d16)
at dynCall_iiii (<anonymous>:wasm-function[43020]:0xcd103d)
at invoke_iiii (webgl.wasm.framework.unityweb.js:28)
at il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) (<anonymous>:wasm-function[30072]:0x710db0)
at il2cpp_runtime_invoke (<anonymous>:wasm-function[1247]:0x76358)
at scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) (<anonymous>:wasm-function[42641]:0xcbd523)
at ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) (<anonymous>:wasm-function[40166]:0xc69915)
at MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr) (<anonymous>:wasm-function[31059]:0x76b78a)
at Scripting::SendScriptingMessage(GameObject&, char const*, ScriptingObjectPtr) (<anonymous>:wasm-function[40153]:0xc69339)
at SendMessageString (<anonymous>:wasm-function[39693]:0xc301ed)
at Module._SendMessageString (webgl.wasm.framework.unityweb.js:28)
at Object.SendMessage [as _send] (webgl.wasm.framework.unityweb.js:11)
at Object.send (module-helper.js? [sm]:13)
at Object.success (cloud.js? [sm]:54)
at Object.C.forEach.v.<computed> [as success] (VM190 WAGame.js:1)
at Object.C.forEach.v.<computed> [as success] (VM190 WAGame.js:1)
at Function.C.forEach.v.<computed> (VM190 WAGame.js:1)
at <api cloud.callFunction success callback function>
at Function.<anonymous> (VM190 WAGame.js:1)
at <anonymous>:1:246875
at F (<anonymous>:1:246722)
at <anonymous>:1:246866
at <anonymous>:1:247497
at j (<anonymous>:1:247501)
at <anonymous>:1:287089
我也遇到这个问题了,后来发现参数直接用就行。
[System.Serializable]
public class PlayerData
{
public int player_id;
public string player_name;
}
PlayerData playerData = new PlayerData();
playerData.player_id = 1;
playerData.player_name = "test";
WX.cloud.CallFunction(new CallFunctionParam()
{
name = "setUserData",
data = playerData,//JsonUtility.ToJson(playerData),
success = (res) =>
{
Debug.Log("upload success");
},
fail = (res) =>
{
Debug.Log("upload fail");
Debug.Log(res.errMsg);
}
});