Mengintegrasikan Activity
Pada class
MainActivity
, modifikasi kode sehingga menjadi berikut:public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getName(); private ImageView iconImage; private TextView jokeText; private JokesService service; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iconImage = findViewById(R.id.image_icon); jokeText = findViewById(R.id.text_joke); service = ServiceGenerator.createService(JokesService.class); Button moreButton = findViewById(R.id.button_more); } }
Joke akan ditampilkan ketika aplikasi pertama kali dijalankan dan ketika tombol ditekan. Kedua hal ini menggunakan logika yang sama. Sehingga untuk memudahkan, dibuatlah sebuah method yang menangani request ke REST API.
Tambahkan sebuah method
moreJoke()
dan panggil menggunakan methodenqueue
dari library Retrofit. Pada methodenqueue
, terdapat dua buah callback untuk kondisi sukses dan gagal.private void moreJoke() { Call<Joke> jokeResponse = service.getRandomJoke(); jokeResponse.enqueue(new Callback<Joke>() { @Override public void onResponse(Call<Joke> call, Response<Joke> response) { ... } @Override public void onFailure(Call<Joke> call, Throwable t) { ... } }); }
Pada callback kondisi sukses, tambahkan logika untuk menampilkan response ke dalam UI. Untuk gambar, akan digunakan library
Picasso
untuk menampilkan gambar yang bersumber dari internet.Joke joke = response.body(); Picasso.get().load(joke.getIconUrl()).into(iconImage); jokeText.setText(joke.getValue());
Catatan: Untuk menggunakan library
Picasso
tambahkan dependency ke dalam build gradle.implementation 'com.squareup.picasso:picasso:2.71828'
Sedangkan pada kondisi gagal, tambahkan logika berikut untuk memberitahukan user jika terjadi kesalahan.
Log.e(TAG, t.toString()); String message = "Failed to get more joke, please check your connection." Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
Panggil method
moreJoke()
di dalam methodonCreate()
@Override protected void onCreate(Bundle savedInstanceState) { ... ... moreJoke(); ... }
Tombol More Joke belum memiliki aksi untuk melakukan logika. Tambahkan event click dengan menggunakan logika kode berikut di dalam method
onCreate()
@Override protected void onCreate(Bundle savedInstanceState) { ... moreButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); }
Panggil method
moreJoke()
pada event click tombol More Joke