我花了一些时间才发现只有在我尝试使用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'
必须以某种方式初始化,但不知道如何。
答案 0 :(得分:1)
我决定阅读gRPC的代码。我用来创建频道的代码是:
mChannel = ManagedChannelBuilder.forAddress(mHost, mPort)
.usePlaintext(true).build();
通用ManagedChannelBuilder类的工作方式是动态加载所有扩展ManageChannelBoulder
的类,并选择优先级最高的类。然后在静态变量中记住所选择的类。
似乎在SyncAdapter
的通话中,okhttp的相应构建器不可用。我通过硬编码选择的构建器来修复它:
mChannel = OkHttpChannelBuilder.forAddress(mHost, mPort)
.usePlaintext(true).build();
我希望拯救某人的晚上。