Как вызвать метод из 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();
}
В результате чего при нажатии на кнопку срабатывает метод во второстепенном потоке и происходит передача данных на сервер спасибо за совет, всё заработало)