Professional Documents
Culture Documents
Tugas 2 PBPB
Tugas 2 PBPB
Buat tampilan aplikasi mobile dengan tampilan sebagai berikut, dengan menampilkan
atribut/kolom/field name, symbol, dan price_usd dengan tampilan layar sebagai berikut:
• Tampilkan dan jelaskan file yang anda buat untuk menampilkan data di atas
Jawab :
a. Tampilan activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:background="@color/white
tools:context=".MainActivity">
<Button
android:id="@+id/btn" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Get Data"
android:background="@drawable/bg_btn" android:layout_marginTop="50dp"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
android:layout_marginStart="10dp" android:layout_marginEnd="10dp"
app:layout_constraintStart_toEndOf="@id/name"
app:layout_constraintEnd_toStartOf="@id/harga"
app:layout_constraintTop_toBottomOf="@id/btn"/>
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent" android:background="@color/white"
android:layout_marginTop="150dp">
<ListView android:id="@+id/listView"
android:layout_width="match_parent" android:layout_height="match_parent"
android:divider="@null" android:dividerHeight="7dp" android:paddingTop="5dp"
android:paddingBottom="5dp" android:scrollbars="none" />
</RelativeLayout>
<TextView android:layout_width="1dp"
android:layout_height="match_parent" android:background="@color/black"
android:layout_marginTop="108.5dp" app:layout_constraintStart_toStartOf="parent"/>
<TextView android:layout_width="1dp"
android:layout_height="match_parent" android:background="@color/black"
android:layout_marginTop="108.5dp" app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/card"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginBottom="10dp"
android:paddingBottom="10dp" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
c. Tampilan MainActivity.xml
package com.example.tugas;
Import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; import android.widget.ListView; import
android.widget.TextView; import android.widget.Toast;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn);
listView = findViewById(R.id.listView); listItems = new ArrayList<>();
try {
JSONObject obj = new JSONObject(response); JSONArray playerArray =
obj.getJSONArray("data");
listItems.add(listItem);
}
listView.setAdapter(adapter);
}
},
new Response.ErrorListener() { @Override
public void onErrorResponse(VolleyError error) { if (error instanceof ServerError) {
Toast.makeText(MainActivity.this, "Server Bermasalah", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "Klik Tombol Get Data",
Toast.LENGTH_SHORT).show();
} else if (error instanceof NoConnectionError) { Toast.makeText(MainActivity.this,
"Tidak Terhubung Ke Internet", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "Klik Tombol Get Data",
Toast.LENGTH_SHORT).show();
} else if (error instanceof TimeoutError) { loadData();
}
}
}){
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
return params;
}
};
d. Tampilan untuk menampung list atau data yang ada pada API package
com.example.tugas;
import org.json.JSONObject; import java.io.Serializable;
import java.util.List;
@SuppressLint("SetTextI18n") @Override
public View getView(final int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = LayoutInflater.from(context);
name.setText(listItem.getName()); symbol.setText(listItem.getSymbol());
harga.setText(listItem.getHarga());
return listviewItem;
}
1. Install Flask:
Pastikan telah menginstal Flask. Jika belum, dapat menginstalnya dengan perintah berikut:
app = Flask(name)
@app.route('/')
def index():
# Ambil data dari API
api_url = 'https://api.coinlore.net/api/tickers/'
response = requests.get(api_url)
data = response.json()['data']
if name == 'main':
app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Coin Data</title>
</head>
<body>
<h1>Coin Data</h1>
<table border="1">
<tr>
<th>Name</th>
<th>Symbol</th>
<th>Price (USD)</th>
</tr>
{% for coin in coins %}
<tr>
<td>{{ coin.name }}</td>
<td>{{ coin.symbol }}</td>
<td>{{ coin.price_usd }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
python app.py
Buka browser dan akses http://127.0.0.1:5000/ untuk melihat hasil. Pastikan bahwa komputer
terhubung ke internet karena aplikasi ini akan mengambil data dari API secara real-time. Jika ingin
mengembangkan lebih lanjut, dapat menambahkan fitur seperti tampilan grafik atau informasi
tambahan mengenai setiap mata uang kripto.