带有重定向的Android改造

时间:2018-09-23 10:04:11

标签: android google-apps-script google-sheets retrofit okhttp3

我正在开发一个简单的Android应用,其中我使用Google电子表格作为数据源。为了进行通信,我正在使用实现doPost方法的google app脚本,因为我的应用程序正在向工作表发送一些数据,并且还希望一些数据作为响应。问题是,我总是在errorBody()中得到关于重定向的html响应,而不是json响应。

我还为OkHttpClient设置了对我的翻新服务启用的重定向,但是结果仍然相同。

我正在与Insomnia rest client进行调试,当我在那里设置重定向时,一切都可以在这里正常工作。

如果有人遇到相同的问题并已解决,请提供帮助。

编辑:

这是我的代码:

public class Connector {

private static final String BASE_URL = "https://script.googleusercontent.com/";
private static final Object LOCK = new Object();
private static CallTaxiService service;
private static final String TAG = "Connector";

private static CallTaxiService getService()
{
    if (service == null)
    {
        synchronized(LOCK) {
            Log.d(TAG, "creating instance");
            service = buildService();
        }
    }
    return service;
}

private static CallTaxiService buildService()
{
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(new OkHttpClient.Builder().followRedirects(true)
                    .followSslRedirects(true).build())
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    return retrofit.create(CallTaxiService.class);
}




public static void syncData(List<TaxiServiceAppData> data, Callback<Response> callback)
{
    Call<Response> call = getService().sendData(data);
    Log.d(TAG, "syncing data");
    call.enqueue(callback);
}

private interface CallTaxiService {
    @Headers({"Content-type: application/json"})
    @POST("endpoint_url")
    Call<Response> sendData(@Body List<TaxiServiceAppData> data);
}

}

这是我的称呼方式:

            Connector.syncData(taxiServiceAppData, new retrofit2.Callback<com.adrisoft.calltaxi.model.Response>() {
            @Override
            public void onResponse(Call<com.adrisoft.calltaxi.model.Response> call, Response<com.adrisoft.calltaxi.model.Response> response) {
                com.adrisoft.calltaxi.model.Response data = response.body();
                if (data != null) {
                    newCities = data.getCities();
                    newTaxis = data.getTaxis();
                    updateDb();
                    prefs.saveSyncTime();
                    isSyncRunning = false;
                    callback.onSuccess();
                } else {
                    try {
                        Log.d(TAG, "Sync failed ... no data available. Error: " + response.errorBody().string());
                    } catch (Exception ex) {

                    }

                    callback.onFailure();
                }
            }

            @Override
            public void onFailure(Call<com.adrisoft.calltaxi.model.Response> call, Throwable t) {
                Log.d(TAG, "Sync request failed.");
                isSyncRunning = false;
                callback.onFailure();
            }
        });

并且恰好在日志“同步失败...无可用数据...”中,我从errorBody()获取了此信息:

<HTML>
<HEAD>
<TITLE>Temporary Redirect</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Temporary Redirect</H1>
The document has moved <A HREF="https://script.google.com/endpoint_url">here</A>.
</BODY>
</HTML>

1 个答案:

答案 0 :(得分:0)

可能发生重定向,因为服务器端点提供了https,并且在您的代码中调用了http。然后,服务器将重定向到https。只能重定向GET个请求,因此其他类似POST的请求将导致错误。