【发布时间】:2014-02-16 20:12:42
【问题描述】:
在我的 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)
我相信我已经正确设置了 apiClient,因为我实际上是从 HelloWorld 示例中复制了它的代码。
这是调用 apiClient.connect 的代码。 Receiver 类只是一个 POJO,它在应用程序中传递东西。 listeners 是一个内部类的实例,它扩展并实现了所有需要的监听器。
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 + ")");
}
到目前为止,从堆栈跟踪中搜索各种短语并没有发现任何有用的信息。
任何机构对此有想法?我已经花了几个小时尝试了一些东西,但到目前为止还没有运气。我将继续进行实验,但我可以使用一两个指针来确定该去哪里。
【问题讨论】:
-
你能添加更多的日志,还是你有例外?另外,请发布您的发件人,以便我们了解流程。
-
这就是异常日志中的内容。它发生在应用程序调用 apiClient.connect() 之后的一两秒,并且在 NPE 堆栈跟踪之前,日志中只有通常的背景噪音。
-
当我尝试发布调用 apiCLient.connect() 的代码时,堆栈溢出说它太大了。如何发布代码,大约 25 行?
-
请显示您的发件人,您可以更新您的原始帖子以便有空间添加发件人代码
-
我已经编辑了原始帖子以显示调用 apiClient.connect() 的代码。
标签: android chromecast