You are on page 1of 6

LAPORAN PRAKTIKUM

PENGEMBANGAN APLIKASI MOBILE


SEMESTER GENAP 2021/2022

NAMA : Muhammad Davin Fadillah


NIM : 205150700111003
KELAS : Pengembangan Aplikasi Mobile – TI D

PROGRAM STUDI TEKNOLOGI INFORMASI


JURUSAN SISTEM INFORMASI
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
MALANG
2022
BAB / MODUL PRAKTIKUM : Modul 6 Recycleview
TANGGAL PRAKTIKUM : 5 April 2022

1. Dari hasil tutorial pembuatan aplikasi slot game yang telah dipelajari sebelumnya pada
perkuliahan (https://youtu.be/KRFzB62J7lw), lakukan penggabungan antara project slot
game dengan project praktikum ini (tahapan Prosedur / Pelaksanaan Praktikum).Sehingga
akan didapatkan hasil aplikasi slot game namun dengan assets gambar yang didapat dari
hasil get data dari internet (link image assets :
"https://mocki.io/v1/821f1b13-fa9a-43aa-ba9a-9e328df8270e").
- Jika hasil sama

- Jika hasil beda

2
- Source code MainActivity.java

package com.example.slotgame;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.bumptech.glide.Glide;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

3
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainActivity extends AppCompatActivity {


private ImageView imgSlot1;
private ImageView imgSlot2;
private ImageView imgSlot3;
private Button btnGet;
private TextView tvHasil;
boolean roll = false;
int cont1, cont2, cont3;
Random random = new Random();
ArrayList<String> arrayUrl = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnGet = findViewById(R.id.id_BtPlay);
imgSlot1 = findViewById(R.id.id_Slot1);
imgSlot2 = findViewById(R.id.id_Slot2);
imgSlot3 = findViewById(R.id.id_Slot3);
tvHasil = findViewById(R.id.tv_hasil);

final ExecutorService execGetImage = Executors.newSingleThreadExecutor();


final Handler handler = new Handler(Looper.getMainLooper());

btnGet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!roll){
roll =! roll;
execGetImage.execute(new Runnable() {
@Override
public void run() {
try {
final String txt =
loadStringFromNetwork("https://mocki.io/v1/821f1b13-fa9a-43aa-ba9a-9e328df8
270e");
try {
JSONArray jsonArray = new JSONArray(txt);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
arrayUrl.add(jsonObject.getString("url"));

4
}
} catch (JSONException e) {
e.printStackTrace();
}

while(roll){
cont1 = random.nextInt(3);
cont2 = random.nextInt(3);
cont3 = random.nextInt(3);
handler.post(new Runnable() {
@Override
public void run() {

Glide.with(MainActivity.this).load(arrayUrl.get(cont1)).into(imgSlot1);

Glide.with(MainActivity.this).load(arrayUrl.get(cont2)).into(imgSlot2);

Glide.with(MainActivity.this).load(arrayUrl.get(cont3)).into(imgSlot3);
}
});
try {
Thread.sleep(500);
}catch (InterruptedException e){
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}else{
roll = false;
if ((cont1 == cont2) && (cont1 == cont3)){
tvHasil.setText("WIN");
}else{
tvHasil.setText("TRY AGAIN");
}
}
}
});
}

private String loadStringFromNetwork(String s) throws IOException {


final URL myUrl = new URL(s);
final InputStream in = myUrl.openStream();
final StringBuilder out = new StringBuilder();
final byte[] buffer = new byte[1024];
try {
for (int ctr; (ctr = in.read(buffer)) != -1; ) {
out.append(new String(buffer, 0, ctr));

5
}
} catch (IOException e) {
throw new RuntimeException("Gagal mendapatkan text", e);
}
final String yourFileAsAString = out.toString();
return yourFileAsAString;
}
}

2. Jelaskan perbedaan antara UI Thread / Main Thread dengan Background Thread

UI thread merupakan thread yang akan otomatis terikat ke dalam project karna UI thread ini
merupakan thread yang dapat kita lihat misalkan menampilkan text hello world sedangkan
Background Thread merupakan perintah yang berjalan di belakang tampilan dimana perintah
ini berjalan tanpa dapat kita lihat. Background Thread ini digunakan untuk melakukan proses
yang dimana proses ini membutuhkan waktu. Karena jika proses dilakukan di main thread
atau ui thread aplikasi tidak akan berjalan dengan benar.

You might also like