Chromecast Android发送器连接到接收器时的NPE

Chromecast Android发送器连接到接收器时的NPE,android,chromecast,Android,Chromecast,在我的android sender应用程序中,选择Chromecast接收器后,当应用程序执行apiClient.connect(),logcat会显示NullPointerException的以下堆栈跟踪: 02-16 13:55:10.130: E/AndroidRuntime(7780): FATAL EXCEPTION: main 02-16 13:55:10.130: E/AndroidRuntime(7780): java.lang.NullPointerException 02-1

在我的android sender应用程序中,选择Chromecast接收器后,当应用程序执行
apiClient.connect()
,logcat会显示NullPointerException的以下堆栈跟踪:

02-16 13:55:10.130: E/AndroidRuntime(7780): FATAL EXCEPTION: main
02-16 13:55:10.130: E/AndroidRuntime(7780): java.lang.NullPointerException
02-16 13:55:10.130: E/AndroidRuntime(7780):     at com.google.android.gms.internal.dg.a(Unknown Source)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at com.google.android.gms.internal.dw.w(Unknown Source)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at com.google.android.gms.internal.dw$f.onServiceConnected(Unknown Source)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at com.google.android.gms.internal.dy$a$a.onServiceConnected(Unknown Source)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1202)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1219)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at android.os.Handler.handleCallback(Handler.java:725)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at android.os.Looper.loop(Looper.java:158)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at android.app.ActivityThread.main(ActivityThread.java:5751)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at java.lang.reflect.Method.invokeNative(Native Method)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at java.lang.reflect.Method.invoke(Method.java:511)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
02-16 13:55:10.130: E/AndroidRuntime(7780):     at dalvik.system.NativeStart.main(Native Method)
我相信我已经正确地设置了ApicClient,因为我实际上是从HelloWorld示例复制了它的代码

下面是调用apiClient.connect的代码。Receiver类只是一个在应用程序中传递内容的POJO类。侦听器是一个内部类的实例,它扩展并实现了所有需要的侦听器

public void launch(Receiver receiver, Activity activity) {
    String receiverName = null;
    if (receiver != null) {
        receiverName = receiver.name;
    }
    Log.d(TAG, "::launch(" + receiverName + ")");
    try {
        unlaunch();
        launchedReceiver = receiver;
        castDevice = launchedReceiver.castDevice;
        Builder optionsBuilder = Cast.CastOptions.builder(castDevice,
                                                          listeners);
        CastOptions options = optionsBuilder.build();
        GoogleApiClient.Builder apiBuilder = new GoogleApiClient.Builder(activity);
        apiBuilder.addApi(Cast.API, options)
                  .addConnectionCallbacks(listeners)
                  .addOnConnectionFailedListener(listeners);
        apiClient = apiBuilder.build();
        apiClient.connect();
    } catch (Exception e) {
        Log.e(TAG, "exception launching receiver", e);
    }
}

public void unlaunch() {
    String receiverName = null;
    if (launchedReceiver != null) {
        receiverName = launchedReceiver.name;
    }
    Log.d(TAG, "::launch(" + receiverName + ")");
}
从堆栈跟踪中搜索各种短语到目前为止还没有找到任何有用的结果


有人对此有想法吗?我花了几个小时试了试东西,但到目前为止运气不好。我将继续进行实验,但我可以使用一两个指针来指示该如何操作。

我也有同样的问题——同样与Google Play services 4.2有关。我的应用程序确实使用Chromecast,但在我的情况下,崩溃发生在应用程序启动时(甚至没有尝试连接Chromecast设备)

虽然我还没有在测试设备上看到这一点,但问题首先出现在用户从我的应用程序的旧版本(不使用Google Play服务)升级到新版本(用于Chromecast支持)时。这发生在两个不同设备(手机和平板电脑)上的同一用户身上。在这两种情况下,他都能够通过卸载和重新安装应用程序来恢复。这可能已经清除了应用程序设置/缓存等中使其正常工作的内容

附件是下面由我的异常处理捕获的堆栈跟踪(异常与原始问题中的异常完全相同):


您可以添加更多的日志吗,或者这就是异常的全部内容吗?另外,请发邮件给你的发件人,这样我们就可以看到流量了。这是例外情况日志中的内容。它发生在应用程序调用apiClient.connect()后一两秒钟,日志中只有常见的背景噪音,直到NPE stacktrace。当我试图发布调用apiClient.connect()的代码时,堆栈溢出表示它太大。我如何发布代码,大约25行?请向您的发件人展示,您可以更新您的原始帖子,以便有空间添加发件人代码我已编辑原始帖子,以显示调用apiClient.connect()的代码。根据源代码,没有足够的信息来查看这是如何发生的,看起来,发生这种情况的唯一方法是,如果您选择的设备不是真正的强制转换设备。你能核实一下吗?是的,情况是这样的(有些)。这个问题(至少在我的例子中)与构建媒体路由选择器有关。我有:builder.addControlCategory(CastMediaControlIntent.categoryForCast(AppId());builder.addControlCategory(MediaControlIntent.CATEGORY\u LIVE\u AUDIO);只是想澄清一下,当时没有人试图连接到任何cast设备。似乎在与显示MediaRouteButton的UI相关的代码路径中,内部使用了“坏”MediaRouteSelector(可能由Play Services使用)。删除builder.addControlCategory(MediaControlIntent.CATEGORY\u LIVE\u AUDIO)修复了该问题。
[ java.lang.NullPointerException ] nulljava.lang.NullPointerException
    at com.google.android.gms.internal.dg.a(Unknown Source)
    at com.google.android.gms.internal.dw.w(Unknown Source)
    at com.google.android.gms.internal.dw$f.onServiceConnected(Unknown Source)
    at com.google.android.gms.internal.dy$a$a.onServiceConnected(Unknown Source)
    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1097)
    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1114)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4962)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
    at dalvik.system.NativeStart.main(Native Method)