Вот моя основная активность
Код: Выделить всё
package com.example.apicallapp;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
private TextView dataTextView;
private TextView logTextView;
private Button fetchDataButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dataTextView = findViewById(R.id.dataTextView);
logTextView = findViewById(R.id.logTextView);
fetchDataButton = findViewById(R.id.fetchDataButton);
fetchDataButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fetchData();
}
});
}
private void fetchData() {
logTextView.setText("Starting API call...");
RetrofitClient.getApiService().getBasicData().enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
BasicDataResponse basicData = response.body();
if (basicData != null && basicData.getData() != null) {
dataTextView.setText(basicData.getData());
logTextView.append("\nAPI call successful: " + basicData);
showToast("Fetched Data: " + basicData.getData());
} else {
dataTextView.setText("No data received");
logTextView.append("\nAPI call successful: No data received." + basicData);
showToast("Fetched Data: " + basicData);
}
} else {
String errorResponse = "";
try {
errorResponse = response.errorBody().string();
} catch (IOException e) {
e.printStackTrace();
}
dataTextView.setText("Failed to retrieve data");
logTextView.append("\nAPI call failure: " + errorResponse);
}
}
@Override
public void onFailure(Call call, Throwable t) {
dataTextView.setText("Error: " + t.getMessage());
logTextView.append("\nAPI call error: " + t.getMessage());
}
});
}
// Method to display a Toast message
private void showToast(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
}
Код: Выделить всё
package com.example.apicallapp;
import retrofit2.Call;
import retrofit2.http.GET;
public interface ApiService {
@GET("api/basic/")
Call getBasicData();
}
Код: Выделить всё
package com.example.apicallapp;
public class BasicDataResponse {
public String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
Код: Выделить всё
package com.example.apicallapp;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
private static final String BASE_URL = "https://6bf0-98-97-42-40.ngrok-free.app/";
private static Retrofit retrofit = null;
public static ApiService getApiService() {
if (retrofit == null) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(logging);
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
}
return retrofit.create(ApiService.class);
}
}
2024-05-27 11:01:35.647 6711-6730 EGL_emulation com.example.apicalllapp D app_time_stats: avg= 9471,29 мс мин = 1,48 мс макс = 397533,56 мс count = 42
27.05.2024 11:01:35.887 6711-6791 okhttp.OkHttpClient com.example.apicallapp I --> GET https://6bf0-98 -97-42-40.ngrok-free.app/api/basic/
2024-05-27 11:01:35.887 6711-6791 okhttp.OkHttpClient com.example.apicallapp I --> END GET
2024-05-27 11:01:35.953 6711-6791 TrafficStats com.example.apicallapp D tagSocket(96) с statsTag=0xffffffff, statsUid=-1
2024-05-27 11:01:36.202 6711 -6791 okhttp.OkHttpClient com.example.apicallapp I
Подробнее здесь: https://stackoverflow.com/questions/785 ... g-api-data