额 第一次发帖子 排版可能不太OK 见谅哈
在网上搜了一下,好像是没有具体的关于这方面的内容,有也是直接拿翻译的,所以感觉是从坑里爬出来后,就想写一写给需要的人吧,当然我是初学者,所以有不对的地方尽量提出哦!
(还有我的这个是访问github的graphql哦)
先说一下参考的一些网址把
Apollo GraphQL 的文档 https://www.apollographql.com/docs/android/essentials/queries
(虽然上面网址中有说怎么获取,但是当初忘记去看这个文档了还是很感谢下面这篇文章的 )
获取schema.json文件 https://www.jianshu.com/p/ea9b2fd7f647
Android Apollo GitHub https://github.com/apollographql/apollo-android
(添加依赖最好照github 的来,当然下面也会附上完整的依赖)
1.添加依赖
project中的build
buildscript {
repositories {
google()
jcenter()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }**
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'com.apollographql.apollo:apollo-gradle-plugin:1.0.1-SNAPSHOT'
}
}
repositories {
jcenter()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app中的build
apply plugin: 'com.android.application'
apply plugin: 'com.apollographql.android'
......
repositories {
jcenter()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.apollographql.apollo:apollo-runtime:1.0.1-SNAPSHOT'
compileOnly 'org.jetbrains:annotations:13.0'
testCompileOnly 'org.jetbrains:annotations:13.0'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okio:okio:1.8.0'
}
app中的dependencies 加 空行下面的五个就好啦 当然ok的版本根据自己需要啦
2.生成schema.json文件
详细的可以参考楼主在上面提供的网址
由于我是请求github的,所以服务器地址当然也是github的 附上
https://api.github.com/graphql
当然那篇网址中已经有详细的获取方法了,我再简单描述一下 请求下载记得一定要加头,
Authorization bearer (这里是你自己github的令牌码)
3.在src/main中创建与java同级的文件夹 graphql 下面的都是文件夹 都要创建
graphql/com/apollographql/apollo/sample
在sample文件夹下创建.graphql文件
我是取名ViewerQuery 这个名字可以无所谓 你看你要查什么 就取啥把
ViewerQuery.graphql的内容
query viewer{
viewer{
login
}
}
再将schema.json放入sample文件夹中
4.重新Rebuild一下,便会在app/build/generated/source下生成一个apollp文件夹,里面会生成一个对应查询的类,等会儿的查询就需要用到这个类
5.开始着手代码
public void createClient(){
//创建apollo客户端
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new RequestInterceptor())
.build();
ApolloClient apolloClient = ApolloClient.builder()
.serverUrl(BASE_URL)
.okHttpClient(okHttpClient)
.build();
//创建查询
final ViewerQuery viewerQuery = ViewerQuery.builder()
.build();
apolloClient.query(viewerQuery).enqueue(new ApolloCall.Callback() {
@Override
public void onResponse(@NotNull com.apollographql.apollo.api.Response response) {
String login = response.data().viewer().login();
Log.d("Login",login);
}
@Override
public void onFailure(@NotNull ApolloException e) {
Log.e("ERROR-ApolloQuery",e.getMessage(),e);
}
});
}
private final class RequestInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request=chain.request();
Request compressedRequest = request.newBuilder()
// .header("Content-Encoding","gzip")
.addHeader("Content-Type",CONTENT_TYPE)
.addHeader("Authorization",AUTHORIZATION)
// .method(request.method(),gzip(request.body()))
.build();
return chain.proceed(compressedRequest);
}
// private RequestBody gzip(final RequestBody body){
// return new RequestBody() {
// @Override
// public MediaType contentType() {
// return body.contentType();
// }
//
// @Override
// public long contentLength() throws IOException {
// return -1;
// }
//
// @Override
// public void writeTo(BufferedSink sink) throws IOException {
// BufferedSink gzipSink = Okio.buffer(new GzipSink(sink));
// body.writeTo(gzipSink);
// gzipSink.close();
// }
// };
// }
}
注释掉的部分不太了解,暂时应该是用不上的。
serverUrl(BASE_URL) 就是服务器地址啦
6.差不多就结束了 不过我还有一点问题 希望有人能够解答
每次启动虚拟机,基本都会报这个无法删除这个文件和其上级的文件夹,一定要删了不然就不给跑