com.google.cloud.firestore.FirestoreException: io.grpc.Manag



我正试图从我的android项目访问云Firestore。我只是按照谷歌提供的指南做的。https://cloud.google.com/firestore/docs/create-database-server-client-library

val firestoreOptions = FirestoreOptions.getDefaultInstance().toBuilder()
.setProjectId("my_project_id")
.setCredentials(GoogleCredentials.fromStream(inputStream))
.build()
val db: Firestore = firestoreOptions.service

当firestoreOptions。服务被使用,我得到这个错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testing/com.example.testing.ui.activity.MainActivity}: com.google.cloud.firestore.FirestoreException: io.grpc.ManagedChannelProvider$ProviderNotFoundException: No functional channel service provider found. Try adding a dependency on the grpc-okhttp, grpc-netty, or grpc-netty-shaded artifact
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: com.google.cloud.firestore.FirestoreException: io.grpc.ManagedChannelProvider$ProviderNotFoundException: No functional channel service provider found. Try adding a dependency on the grpc-okhttp, grpc-netty, or grpc-netty-shaded artifact
at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:90)
at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:80)
at com.google.cloud.ServiceOptions.getRpc(ServiceOptions.java:564)
at com.google.cloud.firestore.FirestoreOptions.getFirestoreRpc(FirestoreOptions.java:358)
at com.google.cloud.firestore.FirestoreImpl.<init>(FirestoreImpl.java:79)
at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:71)
at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:64)
at com.google.cloud.ServiceOptions.getService(ServiceOptions.java:544)
at com.example.testing.ui.activity.MainActivity.onCreate(MainActivity.kt:85)
at android.app.Activity.performCreate(Activity.java:8305)
at android.app.Activity.performCreate(Activity.java:8284)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loopOnce(Looper.java:201) 
at android.os.Looper.loop(Looper.java:288) 
at android.app.ActivityThread.main(ActivityThread.java:7872) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 
Caused by: java.io.IOException: io.grpc.ManagedChannelProvider$ProviderNotFoundException: No functional channel service provider found. Try adding a dependency on the grpc-okhttp, grpc-netty, or grpc-netty-shaded artifact
at com.google.cloud.firestore.spi.v1.GrpcFirestoreRpc.<init>(GrpcFirestoreRpc.java:142)
at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:88)
at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:80) 
at com.google.cloud.ServiceOptions.getRpc(ServiceOptions.java:564) 
at com.google.cloud.firestore.FirestoreOptions.getFirestoreRpc(FirestoreOptions.java:358) 
at com.google.cloud.firestore.FirestoreImpl.<init>(FirestoreImpl.java:79) 
at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:71) 
at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:64) 
at com.google.cloud.ServiceOptions.getService(ServiceOptions.java:544) 
at com.example.testing.ui.activity.MainActivity.onCreate(MainActivity.kt:85) 
at android.app.Activity.performCreate(Activity.java:8305) 
at android.app.Activity.performCreate(Activity.java:8284) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loopOnce(Looper.java:201) 
at android.os.Looper.loop(Looper.java:288) 
at android.app.ActivityThread.main(ActivityThread.java:7872) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 
Caused by: io.grpc.ManagedChannelProvider$ProviderNotFoundException: No functional channel service provider found. Try adding a dependency on the grpc-okhttp, grpc-netty, or grpc-netty-shaded artifact
at io.grpc.ManagedChannelProvider.provider(ManagedChannelProvider.java:45)
at io.grpc.ManagedChannelBuilder.forAddress(ManagedChannelBuilder.java:39)
at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel(InstantiatingGrpcChannelProvider.java:351)
at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.$r8$lambda$uvhXwQKV1b6n5wSR9q5C4LYdHSs(Unknown Source:0)
at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider$$ExternalSyntheticLambda0.createSingleChannel(Unknown Source:2)
at com.google.api.gax.grpc.ChannelPool.<init>(ChannelPool.java:107)
at com.google.api.gax.grpc.ChannelPool.create(ChannelPool.java:85)

这是我在build.gradle中使用的firestore依赖项

implementation ('com.google.cloud:google-cloud-firestore:3.9.3')

我已经尝试添加grpc依赖到我的项目根据各种来源的建议…

implementation 'io.grpc:grpc-okhttp:1.30.0'
implementation 'io.grpc:grpc-netty:1.30.0'
implementation 'io.grpc:grpc-netty-shaded:1.30.0'
implementation 'io.grpc:grpc-api:1.44.1'

但这似乎不起作用。我对grpc一无所知。

我熟悉Google Cloud,包括Firestore,但我不是Java开发人员,我几乎完全不熟悉Gradle,所以请原谅下面的幼稚代码。以下内容适合我。

我使用--authorize-session的Cloud Shell,因为它提供:

  • 授权w/Google Cloud:
  • Java
  • Gradle
gcloud cloud-shell ssh --authorize-session

:

Q="75904235"
PROJECT="$(whoami)-$(date +%y%m%d)-${Q}"
REGION="us-west1" # Or your preferred
gcloud projects create ${PROJECT}
gcloud app create 
--region=${REGION} 
--project=${PROJECT}
gcloud firestore databases create 
--region=${REGION} 
--project=${PROJECT}

:

mkdir -p ${Q}/src/main/java/stackoverflow
cd ${Q}
gradle

Withbuild.gradle:

plugins {
id "application"
}
apply plugin : "java" 
ext {
javaMainClass = "stackoverflow.FirestoreExample"
}
application {
mainClassName = javaMainClass
}
repositories { 
mavenCentral() 
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
implementation "com.google.cloud:google-cloud-firestore:3.9.3"
implementation "io.grpc:grpc-netty-shaded:1.54.0"
}

:FirestoreExample.java:

package stackoverflow;
import com.google.api.core.ApiFuture;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.firestore.DocumentReference;
import com.google.cloud.firestore.Firestore;
import com.google.cloud.firestore.FirestoreOptions;
import com.google.cloud.firestore.QueryDocumentSnapshot;
import com.google.cloud.firestore.QuerySnapshot;
import com.google.cloud.firestore.WriteResult;
import com.google.common.collect.ImmutableMap;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.*;
public class FirestoreExample {
public static void main(String[] args) {
// Replace with value of ${PROJECT}
String projectId = "...";
try {
FirestoreOptions firestoreOptions =
FirestoreOptions.getDefaultInstance().toBuilder()
.setProjectId(projectId)
.setCredentials(GoogleCredentials.getApplicationDefault())
.build();
Firestore db = firestoreOptions.getService();
DocumentReference docRef = db.collection("users").document("alovelace");
Map<String, Object> data = new HashMap<>();
data.put("first", "Ada");
data.put("last", "Lovelace");
data.put("born", 1815);
ApiFuture<WriteResult> result = docRef.set(data);
System.out.println("Update time : " + result.get().getUpdateTime());
} catch (Exception e) {
e.printStackTrace();
}
}
}

相关内容

最新更新