Android Retrofit с перенаправлением - PullRequest
0 голосов
/ 23 сентября 2018

Я занимаюсь разработкой простого приложения для 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>

1 Ответ

0 голосов
/ 23 сентября 2018

Перенаправление могло произойти, потому что конечная точка сервера предоставила https, а в вашем коде вы называете http.Тогда сервер перенаправит на https.Только GET запросы могут быть перенаправлены, поэтому другие, такие как POST, приведут к ошибке.

...