Dictionary Object (Scripting Runtime Library)

本文通过实例展示了如何使用VBA中的Scripting.Dictionary对象进行键值对的增删查改操作,包括添加键值对、检查键是否存在、获取所有键和值等常用方法。

Add Method:

Dim d   ' Create a variable.

Set d =CreateObject("Scripting.Dictionary")

d.Add "a","Athens"   ' Add some keys anditems.

d.Add "b","Belgrade"

d.Add "c","Cairo"

Exists Method:

Function KeyExistsDemo

  Dim d, msg   ' Create somevariables.

   Set d= CreateObject("Scripting.Dictionary")

  d.Add "a", "Athens"  ' Add some   keys and items.

  d.Add "b", "Belgrade"

  d.Add "c", "Cairo"

  If d.Exists("c") Then

      msg = "Specified key exists."

  Else

      msg = "Specified key doesn't exist."

  End If

  KeyExistsDemo = msg

End Function

Items Method:

Function DicDemo

  Dim a, d, i, s   ' Create somevariables.

  Set d = CreateObject("Scripting.Dictionary")

  d.Add "a", "Athens"  ' Add some keys and items.

  d.Add "b", "Belgrade"

  d.Add "c", "Cairo"

  a = d.Items   ' Get theitems.

  For i = 0 To d.Count -1 ' Iterate the array.

      s = s & a(i) &"<BR>" ' Create return string.

  Next

  DicDemo = s

End Function

Keys Method:

Function DicDemo

   Dim a, d, i   ' Create some variables.

   Set d =CreateObject("Scripting.Dictionary")

   d.Add"a", "Athens"   ' Addsome keys and items.

   d.Add"b", "Belgrade"

   d.Add"c", "Cairo"

   a = d.Keys   ' Get the keys.

   For i = 0 Tod.Count -1 ' Iterate the array.

      s = s &a(i) & "<BR>" ' Return results.

   Next

   DicDemo = s

End Function

Remove Method:

Dim a, d   ' Createsome variables.

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"   ' Add some keys and items.

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

...

d.Remove("b")   ' Remove second pair.

RemoveAll Method:

Dim a, d, i   'Create some variables.

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"   ' Add some keys and items.

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

...

a = d.RemoveAll  ' Clear the dictionary.

 

 

GetDeviceId Error! UnityEngine.Debug:LogError (object) AppLog.AppLog:GetDeviceId () AppLogService:GetDeviceId () EditorUtil:GetDeviceId () HttpManager:InitTTNetHttpManager () TTNetHttp.TTNetHttpManager:RealInit () TTNetHttp.TTNetHttpManager:TryInit () TTNetHttp.TTNetHttpManager:SendRequest (TTNetHttp.TTNetHttpRequest) TTNetHttp.TTNetHttpRequest:Send () HttpManager/<_Send>d__14:MoveNext () System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<System.ValueTuple`3<int, string, LitJson.JsonData>>:Start<HttpManager/<_Send>d__14> (HttpManager/<_Send>d__14&) HttpManager:_Send (TTNetHttp.TTNetHttpRequest) HttpManager/<CommonSend>d__31:MoveNext () System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<System.ValueTuple`3<int, string, LitJson.JsonData>>:Start<HttpManager/<CommonSend>d__31> (HttpManager/<CommonSend>d__31&) HttpManager:CommonSend (string,HTTPMethods,string,LitJson.JsonData,System.Collections.Generic.Dictionary`2<string, string>) HttpManager/<Send>d__12:MoveNext () System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<System.ValueTuple`3<int, string, LitJson.JsonData>>:Start<HttpManager/<Send>d__12> (HttpManager/<Send>d__12&) HttpManager:Send (string,HTTPMethods,LitJson.JsonData,System.Collections.Generic.Dictionary`2<string, string>) HttpManager/<Send>d__10:MoveNext () System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<System.ValueTuple`3<int, string, LitJson.JsonData>>:Start<HttpManager/<Send>d__10> (HttpManager/<Send>d__10&) HttpManager:Send (string,HTTPMethods,LitJson.JsonData) CommonNetProxy/<UpdateSdk>d__4:MoveNext () System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start<CommonNetProxy/<UpdateSdk>d__4> (CommonNetProxy/<UpdateSdk>d__4&) CommonNetProxy:UpdateSdk (bool,System.Action`3<int, string, LitJson.JsonData>,int) MenuBars:CheckUpdateSdk (string,System.Action`1<LitJson.JsonData>,int) SdkUpgradeManager:_CheckUpdateForUrl (System.Action`2<SdkFile, LitJson.JsonData>,SdkUpgradeManager/UpdateSDKType) SdkUpgradeManager:_CheckUpdate (Syste
最新发布
03-16
<think>好的,我现在需要帮助用户解决Unity中的GetDeviceId错误,并且用户提到了需要查看堆栈跟踪(stacktrace)。首先,我应该回忆一下Unity中获取设备ID的常见方法,以及可能引发错误的原因。通常,Unity使用`SystemInfo.deviceUniqueIdentifier`来获取设备唯一标识符,但有时候可能会因为权限问题、平台差异或者Unity版本问题导致错误。 接下来,用户提到错误信息中包含了堆栈信息不全的情况,比如引用[1]中的`Missing stacktrace information`,这表明用户可能在日志中没有获得完整的堆栈跟踪,难以定位问题。根据引用[2]和[3],运行命令时添加`--stacktrace`参数可以获取更详细的错误信息,这可能适用于Android编译时的Gradle错误,但Unity中的错误可能需要不同的处理方式。 然后,我需要考虑用户的具体错误场景。用户可能在尝试获取设备ID时遇到了异常,但日志中没有足够的堆栈信息。这时候,按照引用[1]的建议,可能需要通过Unity的设置或代码调试来获取更多信息。例如,在Unity Editor中启用详细的日志输出,或者在构建时包含调试符号。 另外,引用[4]提到在切换Android平台时可能需要调整Player Settings,比如颜色空间设置。虽然这与设备ID错误无直接关联,但说明平台设置可能会影响功能,因此需要检查Android平台的权限设置是否包含`READ_PHONE_STATE`,这是获取设备ID所必需的权限。 综合以上信息,解决步骤可能包括: 1. 确保Android权限正确配置。 2. 在Unity中启用详细日志和调试符号。 3. 在代码中添加异常处理,捕获并打印详细错误信息。 4. 如果使用第三方插件,检查其兼容性和配置。 5. 更新Unity版本或相关插件,修复已知问题。 此外,用户可能需要通过adb查看设备日志,或者使用Unity的Debug.LogError输出更详细的信息。如果堆栈跟踪仍然不全,可能需要使用符号文件(symbols)来解析地址。 需要验证这些步骤是否全面,是否覆盖了可能的错误原因,同时确保建议的方法适用于用户的环境,比如Unity版本和目标平台(Android/iOS)。最后,生成相关问题,帮助用户进一步排查其他潜在问题。</think>### 解决Unity GetDeviceId错误的步骤 #### 1. **检查Android权限配置** - **问题背景**: 在Android平台上获取设备ID需要`READ_PHONE_STATE`权限。若未声明此权限,调用`SystemInfo.deviceUniqueIdentifier`可能抛出错误。 - **解决方法**: 1. 在Unity中打开`Player Settings` → `Android` → `Other Settings` → `Configuration`。 2. 在`Write Permission`列表中添加`android.permission.READ_PHONE_STATE`[^4]。 #### 2. **启用详细日志和调试符号** - **获取完整堆栈跟踪**: - 在Unity Editor中,通过`Edit → Project Settings → Player → Other Settings`,将`Scripting Define Symbols`添加`ENABLE_LOG`(若需要更详细日志)。 - 构建时勾选`Development Build`和`Script Debugging`,以保留调试信息[^1][^2]。 - **命令行构建时附加参数**: ```bash Unity.exe -executeMethod BuildPipeline.BuildPlayer -logFile - --stacktrace ``` #### 3. **代码层异常处理** - 在调用`SystemInfo.deviceUniqueIdentifier`时添加`try-catch`块,捕获并输出异常: ```csharp try { string deviceId = SystemInfo.deviceUniqueIdentifier; Debug.Log("Device ID: " + deviceId); } catch (System.Exception e) { Debug.LogError("获取设备ID失败: " + e.Message + "\n" + e.StackTrace); } ``` - 此方法可帮助定位异常类型(如权限拒绝、平台不支持等)。 #### 4. **检查第三方插件兼容性** - **问题场景**: 若使用第三方插件(如Firebase、AdMob)获取设备ID,需确认: 1. 插件是否支持当前Unity版本。 2. 插件是否与Android API Level兼容。 3. 插件是否要求额外配置(如`AndroidManifest.xml`中的权限声明)。 - **验证方法**: - 暂时移除插件,测试基础功能是否正常。 - 查看插件文档或更新日志中的已知问题。 #### 5. **更新Unity版本和SDK工具** - **已知问题**: Unity旧版本可能存在设备ID相关的Bug(如Android 12+适配问题)。 - **操作步骤**: 1. 升级Unity至最新LTS版本。 2. 在Unity Hub中更新Android SDK、NDK和JDK工具链。 3. 清除项目缓存目录(`Library`、`Temp`)后重新构建。 #### 6. **通过adb查看设备日志** - **适用场景**: 若Unity Editor日志信息不全,可通过Android调试工具`adb`获取详细日志: ```bash adb logcat -s Unity ``` - 此命令会过滤Unity相关日志,帮助定位底层错误(如JNI调用失败)[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值