Я занимаюсь разработкой простого приложения для Android, в котором в качестве источника данных я использую электронную таблицу Google.Для связи я использую скрипт приложения Google, который реализует метод doPost, потому что мое приложение отправляет некоторые данные на лист, а также хочет получить данные в ответ.Проблема заключается в том, что вместо ответа json я всегда получаю html-ответ о перенаправлении в errorBody ().
Я также установил OkHttpClient с включенными перенаправлениями для моей службы дооснащения, но результат все тот же.
Я работаю с клиентом Insomnia rest для отладки, и когда я устанавливаю там перенаправления, все работает там нормально.
Если у кого-то возникла такая же проблема и она была решена, пожалуйста, помогите.
Редактировать:
Вот мой код:
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>