当从Android SyncAdapter调用服务方法时,gRPC失败

时间:2015-12-17 23:47:10

标签: android grpc

我花了一些时间才发现只有在我尝试使用SyncAdapter的gRPC客户端时才会出现以下错误:

No functional channel service provider found. Try adding a dependency on the grpc-okhttp or grpc-netty artifact

设置与官方教程Transferring Data Using Sync Adapters完全相同。

我使用与grpc-java中的example相同的设置生成了gRPC代码。 <{1}}依赖示例不是必需的,因为compile 'com.squareup.okhttp:okhttp:2.2.0'被修改为自包含。

当从主活动调用gRPC服务方法时,它可以正常工作。

我怀疑compile 'io.grpc:grpc-okhttp:0.9.0'必须以某种方式初始化,但不知道如何。

1 个答案:

答案 0 :(得分:1)

我决定阅读gRPC的代码。我用来创建频道的代码是:

mChannel = ManagedChannelBuilder.forAddress(mHost, mPort)
        .usePlaintext(true).build();

通用ManagedChannelBuilder类的工作方式是动态加载所有扩展ManageChannelBoulder的类,并选择优先级最高的类。然后在静态变量中记住所选择的类。

似乎在SyncAdapter的通话中,okhttp的相应构建器不可用。我通过硬编码选择的构建器来修复它:

mChannel = OkHttpChannelBuilder.forAddress(mHost, mPort)
        .usePlaintext(true).build();

我希望拯救某人的晚上。