How to disable GZipContent in Cloud Endpoints builder in Android

前端 未结 3 777
迷失自我
迷失自我 2021-02-09 06:30

I want to disable GZipContent for a Google Cloud Endpoints class so that a POST can work on the local development server.

The latest GPE release generates this endpoint

相关标签:
3条回答
  • 2021-02-09 06:56

    I'm not 100% why Dan's answer didn't work for me, but this GitHub project's code solved it for me.

    /*
     * TODO: Need to change this to 'true' if you're running your backend locally using
     * the DevAppServer. See
     * http://developers.google.com/eclipse/docs/cloud_endpoints for more
     * information.
     */
    protected static final boolean LOCAL_ANDROID_RUN = false;
    
    /*
     * The root URL of where your DevAppServer is running (if you're running the
     * DevAppServer locally).
     */
    protected static final String LOCAL_APP_ENGINE_SERVER_URL = "http://localhost:8080/";
    
    /*
     * The root URL of where your DevAppServer is running when it's being
     * accessed via the Android emulator (if you're running the DevAppServer
     * locally). In this case, you're running behind Android's virtual router.
     * See
     * http://developer.android.com/tools/devices/emulator.html#networkaddresses
     * for more information.
     */
    protected static final String LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID = "http://10.0.2.2:8080";
    
    /**
     * Updates the Google client builder to connect the appropriate server based
     * on whether LOCAL_ANDROID_RUN is true or false.
     *
     * @param builder Google client builder
     * @return same Google client builder
     */
    public static <B extends AbstractGoogleClient.Builder> B updateBuilder(
            B builder) {
        if (LOCAL_ANDROID_RUN) {
            builder.setRootUrl(LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID
                    + "/_ah/api/");
        }
    
        // only enable GZip when connecting to remote server
        final boolean enableGZip = builder.getRootUrl().startsWith("https:");
    
        builder.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
            public void initialize(AbstractGoogleClientRequest<?> request)
                    throws IOException {
                if (!enableGZip) {
                    request.setDisableGZipContent(true);
                }
            }
        });
    
        return builder;
    }
    
    0 讨论(0)
  • 2021-02-09 06:58

    For those that are Googling for the error I saw, it was java.io.EOFException, but only in the development server. Here's how I was able to fix this, using the example stated in the OP's question:

    Myendpoint myendpointClient = new Myendpoint.Builder(
                    AndroidHttp.newCompatibleTransport(),
                    new GsonFactory(),
                    credential).build();
    EndpointService svcCall = myendpointClient.endpointService("firstArg");
    // Note, I didn't call "execute()", as normal!
    svcCall.setDisableGZipContent(true);
    // This is also a handy place to set http headers, etc
    svcCall.getRequestHeaders().set("x-oddballhdr","OddballValue");
    // It's now time to call execute()
    svcCall.execute();
    

    That may be a bit simpler than the other helpful answers.

    0 讨论(0)
  • 2021-02-09 07:05

    You can use:

    builder.setGoogleClientRequestInitializer(new TictactoeRequestInitializer() {
         protected void initializeTictactoeRequest(TictactoeRequest<?> request) {
             request.setDisableGZipContent(true);
         }
       });
    

    Replace TictactoeRequest with the appropriate class for your application.

    0 讨论(0)
提交回复
热议问题