我花了一些时间才发现只有当我尝试从 SyncAdapter 使用 gRPC 客户端时才会导致以下错误:
No functional channel service provider found. Try adding a dependency on the grpc-okhttp or grpc-netty artifact
Run Code Online (Sandbox Code Playgroud)
设置与官方教程使用同步适配器传输数据完全一样。
我已经使用与grpc-java 中的示例相同的设置生成了 gRPC 代码。compile 'com.squareup.okhttp:okhttp:2.2.0'示例中的依赖项不是必需的,因为compile 'io.grpc:grpc-okhttp:0.9.0'已修改为自包含。
当从主活动调用 gRPC 服务方法时,它工作正常。
我怀疑grpc-okhttp必须以某种方式初始化,但不知道如何初始化。
我决定阅读gRPC的代码。我用来创建频道的代码是:
mChannel = ManagedChannelBuilder.forAddress(mHost, mPort)
.usePlaintext(true).build();
Run Code Online (Sandbox Code Playgroud)
通用 ManagedChannelBuilder 类的工作方式是动态加载所有扩展类ManageChannelBoulder并选择具有最高优先级的类。然后所选的类将被记住在静态变量中。
似乎在调用SyncAdapter适当的 okhttp 构建器时不可用。我通过对所选的构建器进行硬编码来修复它:
mChannel = OkHttpChannelBuilder.forAddress(mHost, mPort)
.usePlaintext(true).build();
Run Code Online (Sandbox Code Playgroud)
我希望能拯救某人的夜晚。
| 归档时间: |
|
| 查看次数: |
1061 次 |
| 最近记录: |