Модификация 2 Как сделать один и тот же запрос несколько раз - PullRequest
0 голосов
/ 14 февраля 2019
public void makeGetRequest() {


    Retrofit.Builder builder = new Retrofit.Builder().baseUrl("https://desolate-beach-17272.herokuapp.com");
    Retrofit retrofit = builder.build();


    RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);


    Call<ResponseBody> call = retrofitInterface.downloadFileByUrl("downloadFile/beach.jpg");


    call.enqueue(new Callback<ResponseBody>() {
        @SuppressLint("StaticFieldLeak")

        // returns the response if everything is okay
        @Override
        public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {

            try {
                Log.d("Success" , " " + response.body().bytes().length);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.d("FAIL", "oops");

        }
    });

У меня есть этот код, и он получает request на мой сервер с помощью метода async.Я хочу сделать один и тот же запрос несколько раз.Например, я хочу сделать get request 100 раз.Я не хочу использовать наблюдаемые или другие внешние библиотеки, если это возможно.Кто-нибудь может мне помочь с этим?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы можете сделать вызов несколько раз, просто посмотрите код ниже, где я использовал методы для этой цели.В методе onResponse после выполнения операции с данными, полученными с сервера, вы можете сделать еще один вызов того же API, используя переменную sizeOfCall и уменьшая ее до тех пор, пока она не станет равной нулю.Ниже приведен полный код для него.

public class RequestActivity extends AppCompatActivity {

    int sizeOfCall = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_request);

      callAPI();
    }

 private void callAPI(){
    Retrofit.Builder builder = new Retrofit.Builder().baseUrl("https://desolate-beach-17272.herokuapp.com");
    Retrofit retrofit = builder.build();
    RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);
    Call<ResponseBody> call = retrofitInterface.downloadFileByUrl("downloadFile/beach.jpg");

    // Call API
    makeGetRequest(call);
}

 private void makeGetRequest(Call<ResponseBody> call) {

call.enqueue(new Callback<ResponseBody>() {

   @SuppressLint("StaticFieldLeak")

    // returns the response if everything is okay
    @Override
    public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {

        try {
            Log.d("Success", " " + response.body().bytes().length);
            // Perform your operations here and call API againg after that
            sizeOfCall--;
            if (sizeOfCall > 0) {
                callAPI();
                } else {
                 // No more calls needed
                 }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }


            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.d("FAIL", "oops");

            }
        });
    }
}
0 голосов
/ 14 февраля 2019

Создайте широковещательный приемник и поместите в него свой запрос на модернизацию.Теперь вызывайте его с помощью диспетчера тревог.

public class YourBroadCastReciever extends BroadcastReceiver{



    @Override
    public void onReceive(Context context, Intent intent) {

            yourRetrofitCode();

    }

    private void yourRetrofitCode(){
        Retrofit.Builder builder = new Retrofit.Builder().baseUrl("https://desolate-beach-17272.herokuapp.com");
    Retrofit retrofit = builder.build();


    RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);


    Call<ResponseBody> call = retrofitInterface.downloadFileByUrl("downloadFile/beach.jpg");


    call.enqueue(new Callback<ResponseBody>() {
        @SuppressLint("StaticFieldLeak")

        // returns the response if everything is okay
        @Override
        public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {

            try {
                Log.d("Success" , " " + response.body().bytes().length);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.d("FAIL", "oops");

        }
    });

    }
}

Теперь звоните с помощью этого кода:

 Intent sendDeviceInfoIntent = new Intent(this, YourBroadCastReciever.class);
       PendingIntent yourintent= PendingIntent.getBroadcast(this, 0, sendDeviceInfoIntent, 0);
        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()+1000, 60000, yourintent);

, так что каждые 5 минут это будет вызывать ваш широковещательный приемник, и это также будет работать в фоновом режиме

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