我正在开发一个简单的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>
答案 0 :(得分:0)
可能发生重定向,因为服务器端点提供了https
,并且在您的代码中调用了http
。然后,服务器将重定向到https
。只能重定向GET
个请求,因此其他类似POST
的请求将导致错误。