gpt4 book ai didi

android - Google 跟踪代码管理器空容器

转载 作者:行者123 更新时间:2023-11-30 01:20:01 24 4
gpt4 key购买 nike

我正在尝试遵循此处描述的内容:https://developers.google.com/tag-manager/android/v4/#init这就是我所拥有的:

TagManager tagManager = TagManager.getInstance(this);
tagManager.setVerboseLoggingEnabled(true);


PendingResult<ContainerHolder> pending =
tagManager.loadContainerPreferNonDefault("GTM-XXXXXX",
R.raw.gtm);


pending.setResultCallback(new ResultCallback<ContainerHolder>() {
@Override
public void onResult(ContainerHolder containerHolder) {
ContainerHolderSingleton.setContainerHolder(containerHolder);
container = containerHolder.getContainer();
Log.d("NICK","Inside onResult...") ;
if (!containerHolder.getStatus().isSuccess()) {
Log.e("CuteAnimals", "failure loading container");

return;
}

ContainerLoadedCallback.registerCallbacksForContainer(container);
containerHolder.setContainerAvailableListener(new ContainerLoadedCallback());

}
}, 3000, TimeUnit.MILLISECONDS);


Log.d("NICK","Value: "+container.getString("test_value));

发生的是上面 Log 行的 NullPointerException 因为 container 为空:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nick.app/com.nick.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.android.gms.tagmanager.Container.getString(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.android.gms.tagmanager.Container.getString(java.lang.String)' on a null object reference

我为谷歌标签管理器启用了日志记录,我得到了在我看来是“正常”的行为:

05-16 11:53:04.865 22585-22662/com.nick.app V/GoogleTagManager: Deleted 0 expired items
05-16 11:53:04.867 22585-22585/com.nick.app V/GoogleTagManager: Attempting to load a container from the resource ID 2131034112 (com.nick.app:raw/gtm)
05-16 11:53:04.888 22585-22585/com.nick.app V/GoogleTagManager: The container was successfully loaded from the resource (using JSON file format)
05-16 11:53:04.903 22585-22664/com.nick.app V/GoogleTagManager: Attempting to load resource from disk
05-16 11:53:04.925 22585-22664/com.nick.app V/GoogleTagManager: loadAfterDelay: containerId=GTM-XXXXXXX delay=40721307
05-16 11:53:04.925 22585-22664/com.nick.app D/GoogleTagManager: Setting previous container version: NQ$0
05-16 11:53:04.929 22585-22664/com.nick.app V/GoogleTagManager: The Disk resource was successfully read.

而且我在 onResult 中的日志语句从未显示,这可以解释为什么 container 为空,因为这是唯一会发生任何初始化的位置。 onResult 是不是应该到达, container 应该被初始化?我对如何正确实现这件事感到有些困惑。

最佳答案

加载 ContainerHolder 是异步发生的,因此在您当前尝试从中记录值时尚未为其分配值。

您链接到的站点具有以下有关 onResult() 的文档。

The onResult method will be called as soon as one of the following happens:

  1. a saved container is loaded
  2. if there is no saved container, a network container is loaded
  3. the specified timeout occurs

这意味着在 onResult(...) 被调用之前您不能访问 container,因为这是它被赋值的地方。您可以将日志语句移动到该方法中以测试检索值,并在此时对容器执行您需要执行的任何其他操作。

public void onResult(ContainerHolder containerHolder) {
ContainerHolderSingleton.setContainerHolder(containerHolder);
container = containerHolder.getContainer();

Log.d("NICK","Inside onResult...") ;
if (!containerHolder.getStatus().isSuccess()) {
Log.e("CuteAnimals", "failure loading container");
return;
}

ContainerLoadedCallback.registerCallbacksForContainer(container);
containerHolder.setContainerAvailableListener(new ContainerLoadedCallback());

// do whatever you want with the container at this point
Log.d("NICK","Value: " + container.getString("test_value));
}

关于android - Google 跟踪代码管理器空容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37258453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com