Установить таймаут в дооснащении Android? - PullRequest
0 голосов
/ 28 сентября 2018

На самом деле я посылаю текстовый файл через Retrofit на мой сервер, и все работает нормально, я даже ловлю метод onFailure, если вроде нет соединения.

Но проблема возникает, когда я выхожу изЗона Wi-Fi, затем я отправляю файл и повторно вхожу в зону Wi-Fi, файл будет отправляться, но активирован метод onFailure.

Так как я могу отправить как тайм-аут для метода onResponse или чего-то в этом роде?

Вот мой метод sendPost из Activity:

 @SuppressLint("DefaultLocale")
    public void sendPost() {
        @SuppressLint({"SdCardPath", "DefaultLocale"}) final File file = new File("/data/data/com.example.igardini.visualposmobile/files/"+String.format("%03d", Integer.valueOf(nTerminalino))+"_"+nTavoli.getText().toString()+".txt");

        MultipartBody.Builder builder = new MultipartBody.Builder();
        builder.setType(MultipartBody.FORM);

        RequestBody fbody = RequestBody.create(MediaType.parse("text/*"), file); builder.addFormDataPart(String.format("%03d", Integer.valueOf(nTerminalino))+"_"+nTavoli.getText().toString(), file.getName(),fbody);

        MultipartBody requestBody = builder.build();

        APIService apiService = ApiUtils.getAPIService(ipCASSA);

        Call<Void> call = apiService.savePost(requestBody);

        call.enqueue(new Callback<Void>() {
            @Override
            public void onResponse(@NonNull Call<Void> call, @NonNull Response<Void> response) {
                if (response.isSuccessful()) {
                    Log.i("RESPONSE: ", response.toString());
                    Print();
                    file.delete();
                    dialogLoading.dismiss();
                    Runtime.getRuntime().gc();
                } else {
                        //
                }
            }

            @Override
            public void onFailure(@NonNull Call<Void> call, @NonNull Throwable t) {
                Log.e("TAG", t.toString());
                MediaPlayer mpFound = MediaPlayer.create(pterm.this,R.raw.errorsound);
                mpFound.start();
                Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                if (v.hasVibrator()) {
                    v.vibrate(6000);
                } else {
                    //
                }
                new GlideToast.makeToast(pterm.this, "CONNESSIONE FALLITA!", GlideToast.LENGTHLONG, GlideToast.FAILTOAST).show();
                dialogLoading.dismiss();
            }
        });
    }

Пока здесь есть класс ApiUtils:

class ApiUtils {

    private ApiUtils() {}



    static APIService getAPIService(String ipCASSA) {

        String BASE_URL = "http://"+ipCASSA+"/WebQuery/";

        return RetrofitClient.getClient(BASE_URL).create(APIService.class);
    }
}

А вот класс RetrofitClient:

public class RetrofitClient {

    private static Retrofit retrofit = null;

    public static Retrofit getClient(String baseUrl) {
        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

А вот и APIService

public interface APIService {

    @POST("UPD.aspx?CART=PTERM")
    Call<Void> savePost(@Body RequestBody text);
}

1 Ответ

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

Просто добавьте, как показано ниже

OkHttpClient okHttpClient = new OkHttpClient.Builder()  
        .connectTimeout(1, TimeUnit.MINUTES)
        .readTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(15, TimeUnit.SECONDS)
        .build();

Retrofit.Builder builder = new Retrofit.Builder()  
        .baseUrl("http://10.0.2.2:3000/")
        .client(okHttpClient)
        .addConverterFactory(GsonConverterFactory.create());

, также вы можете проверить это easy tutorial .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...