· 5 years ago · Mar 11, 2021, 06:16 AM
1package com.example.pixabay;
2
3import androidx.appcompat.app.AppCompatActivity;
4
5import android.os.Bundle;
6import android.util.Log;
7import android.view.View;
8import android.widget.EditText;
9import android.widget.ImageView;
10
11import com.squareup.picasso.Picasso;
12
13import retrofit2.Call;
14import retrofit2.Callback;
15import retrofit2.Retrofit;
16import retrofit2.converter.gson.GsonConverterFactory;
17import retrofit2.http.GET;
18import retrofit2.http.Query;
19
20public class MainActivity extends AppCompatActivity {
21
22 String API_URL = "https://pixabay.com/";
23 String q = "bad dog";
24 String key = "14665819-68f588184b6da862b4927160a";
25 String image_type = "photo";
26 Picasso picasso;
27
28 interface PixabayAPI {
29 @GET("/api") // метод запроса (POST/GET) и путь к API
30 // пример содержимого веб-формы q=dogs+and+people&key=MYKEY&image_type=photo
31 Call<Response> search(@Query("q") String q, @Query("key") String key, @Query("image_type") String image_type);
32 // Тип ответа, действие, содержание запроса
33 }
34 @Override
35 protected void onCreate(Bundle savedInstanceState) {
36 super.onCreate(savedInstanceState);
37 setContentView(R.layout.activity_main);
38 picasso = new Picasso.Builder(this).build();
39 }
40
41 public void startSearch(String text) {
42 // вызывается, когда пользователь вводит текст и нажимает кнопку поиска
43
44 // создаём экземпляр службы для обращения к API
45 // можно использовать экземпляр для нескольких API сразу
46 Retrofit retrofit = new Retrofit.Builder()
47 .baseUrl(API_URL) // адрес API сервера
48 .addConverterFactory(GsonConverterFactory.create())
49 .build();
50
51 // создаём обработчик, определённый интерфейсом PixabayAPI выше
52 PixabayAPI api = retrofit.create(PixabayAPI.class);
53
54 // указываем, какую функцию API будем использовать
55 Call<Response> call = api.search(text, key, image_type);
56
57 Callback<Response> callback = new Callback<Response>() {
58 @Override
59 public void onResponse(Call<Response> call, retrofit2.Response<Response> response) {
60
61 // класс Response содердит поля, в которые будут записаны
62 // результаты поиска по картинкам
63 Response r = response.body(); // получили ответ в виде объекта
64 displayResults(r.hits);
65 Log.d("mytag", "hits:" + r.hits.length); // сколько картинок нашлось
66 }
67
68 @Override
69 public void onFailure(Call<Response> call, Throwable t) {
70 // обрабатываем ошибку, если она возникла
71 Log.d("mytag", "Error: " + t.getLocalizedMessage());
72 }
73 };
74 call.enqueue(callback); // ставим запрос в очередь
75
76 }
77
78 public void displayResults(Hit[] hits) {
79 // вызывается, когда появятся результаты поиска
80 ImageView iv = findViewById(R.id.image);
81 picasso.load(hits[0].previewURL).into(iv);
82
83
84 }
85
86 public void onSearchClick(View v) {
87 EditText etSearch = findViewById(R.id.text);
88 String text = etSearch.getText().toString();
89 startSearch(text);
90
91 }
92}