如何在Android的Cloud Endpoints构build器中禁用GZipContent

我想为Google Cloud Endpoints类禁用GZipContent,以便POST可以在本地开发服务器上工作。

最新的GPE版本生成此端点生成器:

public static final class Builder extends AbstractGoogleJsonClient.Builder { public Builder(HttpTransport transport, JsonFactory jsonFactory, HttpRequestInitializer httpRequestInitializer) { super( transport, jsonFactory, ...); } 

Google文档build议像这样使用它:

 Myendpoint.Builder endpointBuilder = new Myendpoint.Builder( AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential); 

有谁知道如何禁用端点GZipContent?

谢谢。

Solutions Collecting From Web of "如何在Android的Cloud Endpoints构build器中禁用GZipContent"

您可以使用:

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

TictactoeRequestreplace为您的应用程序的相应类。

我不是100%为什么丹的答案不适合我,但这个GitHub项目的代码为我解决了。

 /* * 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; } 

对于那些谷歌search错误,我看到,这是java.io.EOFException,但只在开发服务器。 以下是我能够解决这个问题的方法,使用OP问题中提到的例子:

 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(); 

这可能比其他有用的答案简单一些。