Android Studio 简单构建Apollo GraphQL

额 第一次发帖子 排版可能不太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.差不多就结束了 不过我还有一点问题 希望有人能够解答
问题描述
每次启动虚拟机,基本都会报这个无法删除这个文件和其上级的文件夹,一定要删了不然就不给跑

你可能感兴趣的:(Android)