gpt4 book ai didi

java - Apollo 客户端无法连接到 GraphQL 服务器(http 调用执行失败)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:55 25 4
gpt4 key购买 nike

我正在尝试设置一个简单的 Android 应用程序,该应用程序通过使用 Java GraphQL 的 Springboot 应用程序连接到我本地主机上设置的 GraphQL 服务器。使用 GraphiQL 我可以很好地查询。问题是当我尝试使用 Apollo Client 在我的应用程序中进行相同的查询时,出现以下错误

“com.apollographql.apollo.exception.ApolloNetworkException:无法执行 http 调用”

我用了this tutorial通过 Springboot 设置 GraphQL 服务器并定义 GraphQL 模式。我依赖于 this tutorial帮助设置应用程序。

早些时候我尝试通过我的网络浏览器访问服务器,但我会收到一条错误消息

“出现意外错误(类型=错误请求,状态=400)。所需的字符串参数“查询”不存在”

所以我尝试了 Postman 并将在 GraphiQL 中工作的相同查询发送到本地主机并返回错误。这是使用 GET 请求完成的,所以我尝试了 POST,它像在 GraphiQL 中一样工作得很好。所以我认为出于某种原因,我通过 Springboot 设置的 GraphQL 服务器不适用于 GET 请求。我不知道这是否是因为我在设置时搞砸了,或者这就是 GraphQL 处理查询的方式,但如果有人能就此启发我,我将不胜感激。

无论如何,我设置了一个断点并单步执行应用程序,发现 Apollo 也通过 GET 请求发送查询,我假设这就是问题的根源。 我做了一个错误并误读了代码,我了解到它肯定不会发送 GET 请求,但问题仍然存在,我不确定为什么。

这是主要 Activity

private static final String BASE_URL = 
"http://xxx.xxx.xxx.xxx:8080/graphql";
private static final String TAG = "MainActivity";
private TextView textBox;
private Button queryButton;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textBox = (TextView) findViewById(R.id.plainbox);
queryButton = (Button) findViewById(R.id.queryButton);


OkHttpClient okHttpClient = new OkHttpClient.Builder().build();

ApolloClient apolloClient = ApolloClient.builder()
.serverUrl(BASE_URL)
.okHttpClient(okHttpClient)
.build();

BookByIdQuery bookQuery = BookByIdQuery.builder()
.id("book-1")
.build();

queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

apolloClient.query(bookQuery).enqueue(new ApolloCall.Callback<BookByIdQuery.Data>() {

@Override
public void onResponse(@NotNull Response<BookByIdQuery.Data> dataResponse){
Log.d(TAG, "Got Response: \n" + dataResponse.toString());
textBox.setText(dataResponse.data().toString());
}

@Override
public void onFailure(@NotNull ApolloException a){
Log.d(TAG, "Failed, ApolloException " + a);
}
}); // end apolloClient query

这是 graphQL 查询文件。

query BookById($id : ID) {
Book: bookById(id : $id){
name
author{
firstName
lastName
}
}}

所以在这一点上我有点不知所措。有没有办法使用 POST 而不是 GET 请求通过 Apollo Client 发送我的查询?还是让 GraphQL 服务器接受 GET 请求更好、更可行?

我只是对为什么 ApolloClient 始终无法进行 http 调用感到困惑,不幸的是,该错误的描述性不强,所以我有点困惑。

老实说,我认为 GET 请求会工作得很好,甚至会更受欢迎,因为我只是请求返回数据,而不是尝试添加任何东西。感谢你们提供的任何帮助,在此先致谢!

e: 讨论一下,问题可能是因为我正在尝试使用 http 而不是 https 进行连接吗?

最佳答案

首先,确保添加 INTERNET允许 AndroidManifext.xml , 在 <application 之上 block

<uses-permission android:name="android.permission.INTERNET"/>

如果这不能解决问题,请尝试 Build -> Clean Project .

如果仍然无效,请在设备上卸载应用,然后重新安装

关于java - Apollo 客户端无法连接到 GraphQL 服务器(http 调用执行失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57317233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com