Как вызвать метод из mainActivity, который находится в другом классе?

В общем, есть такой класс, в котором есть метод который необходим для отправки POST-запросов с некоторыми параметрами, его нужно каким-то образом вызвать из активити. Как это сделать, я не знаю, уже несколько дней ломаю голову..

package ru.geokrasnodar.gk_tracker;
import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class easyLevel {
    // one instance, reuse
    private final OkHttpClient httpClient = new OkHttpClient();

    private void sendPost() throws Exception {

        // form parameters
        RequestBody formBody = new FormBody.Builder()
                .add("username", "abc")
                .add("password", "123")
                .add("custom", "secret")
                .build();

        Request request = new Request.Builder()
                .url("https://httpbin.org/post")
                .addHeader("User-Agent", "OkHttp Bot")
                .post(formBody)
                .build();

        try (Response response = httpClient.newCall(request).execute()) {

            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

            // Get response body
            System.out.println(response.body().string());
        }

    }
}

В манифесте прописал так

<uses-permission android:name="android.permission.INTERNET" />

Что можно сделать в данной ситуации?


Ответы (1 шт):

Автор решения: Nickolai Bondarenko

Решил проблему так - сделал метод публичным

public class easyLevel {
    public static void sendPost() throws Exception {
        final OkHttpClient httpClient = new OkHttpClient();
        // параметры формы
        RequestBody formBody = new FormBody.Builder()
                .add("latitude", "45")
                .add("longitude", "38")
                .add("velocity", "10")
                .add("distance", "500")
                .build();

        Request request = new Request.Builder()
                .url("https://geokrasnodar.ru/post.php")
                .addHeader("User-Agent", "OkHttp Bot")
                .post(formBody)
                .build();

        try (Response response = httpClient.newCall(request).execute()) {

            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

            // Вывести ответ в консоль
            System.out.println(response.body().string());
        }
    }
}

А из mainActiity вызвал его таким образом

public void onClickStartPost(View view) { // кнопка, при нажатии на которую должна начинаться передача данных на сервер
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (gpsCall) {
                        try {
                            easyLevel.sendPost();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }

В результате чего при нажатии на кнопку срабатывает метод во второстепенном потоке и происходит передача данных на сервер спасибо за совет, всё заработало)

→ Ссылка