Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Don’t say NO Before you Try it !
Kali ini saya ingin share tentang pengalaman saya membuat aplikasi android “mengambil data dari database dan kemudian menampilkan di barchart android” . Saya rasa ini cukup sulit karena di beberapa tutorial website, stack overflow, developer android group, youtube jarang yang bahas detail untuk kasus seperti ini. Saya coba tanya ke beberapa komunitas android dan teman, tapi cukup sulit untuk mendapatkannya 😀
Akhirnya saya menemukan satu buah link di stack overflow, gak rinci sih tapi ngasih inti penyelesaiannya. #ayee 😀
Link nya bisa di akses disini !
Sekarang, saya akan memberikan step by step bagaimana membuat barchart dan mengambil data dari database :
1. Terlebih dahulu, kita siapkan sebuah data JSON, seperti dibawah ini :
{
“result”: “true”,
“msg”: “Data Indikator”,
“data”: [
{
“id_indikator”: “35”,
“id_tipe_indikator”: “1”,
“th_indikator”: “2012”,
“jml_indikator”: “16.43”,
“id”: “1”,
“tipe_indikator”: “Pertumbuhan Ekonomi”
},
{
“id_indikator”: “36”,
“id_tipe_indikator”: “1”,
“th_indikator”: “2013”,
“jml_indikator”: “-8.16”,
“id”: “1”,
“tipe_indikator”: “Pertumbuhan Ekonomi”
},
{
“id_indikator”: “37”,
“id_tipe_indikator”: “1”,
“th_indikator”: “2014”,
“jml_indikator”: “0.48”,
“id”: “1”,
“tipe_indikator”: “Pertumbuhan Ekonomi”
},
{
“id_indikator”: “38”,
“id_tipe_indikator”: “1”,
“th_indikator”: “2015”,
“jml_indikator”: “7.65”,
“id”: “1”,
“tipe_indikator”: “Pertumbuhan Ekonomi”
},
{
“id_indikator”: “39”,
“id_tipe_indikator”: “1”,
“th_indikator”: “2016”,
“jml_indikator”: “3.74”,
“id”: “1”,
“tipe_indikator”: “Pertumbuhan Ekonomi”
}
]
}
2. Kemudian di androidnya, kita tambahkan beberapa library yang akan digunakan
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.github.PhilJay:MPAndroidChart:v2.0.9'
3. Pada bagian desainnya, kita tambahkan kodingan seperti ini :
<em class="markup--em markup--pre-em"><?</em><strong class="markup--strong markup--pre-strong">xml version="1.0" encoding="utf-8"</strong><em class="markup--em markup--pre-em">?>
</em><<strong class="markup--strong markup--pre-strong">android.support.constraint.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"
tools:context="imastudio.id.co.androidcharexample.MainActivity"</strong>>
<<strong class="markup--strong markup--pre-strong">RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"</strong>>
<<strong class="markup--strong markup--pre-strong">com.github.mikephil.charting.charts.BarChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent" </strong>/>
</<strong class="markup--strong markup--pre-strong">RelativeLayout</strong>>
</<strong class="markup--strong markup--pre-strong">android.support.constraint.ConstraintLayout</strong>><span style="background-color: #cce4f5;" data-mce-style="background-color: #cce4f5;"> </span>
4. Pada Activity, tambahkan kodingan untuk untuk get data json
<strong class="markup--strong markup--pre-strong">private void </strong>getListData() {
<strong class="markup--strong markup--pre-strong">try </strong>{
RestApi api = MyRetrofitClient.<em class="markup--em markup--pre-em">getInstanceRetrofit2</em>();
Call<RssJ544IndikatorByTipe> call = api.getIndikatorByTipe(<strong class="markup--strong markup--pre-strong">idTipe</strong>);
call.enqueue(<strong class="markup--strong markup--pre-strong">new </strong>Callback<RssJ544IndikatorByTipe>() {
@Override
<strong class="markup--strong markup--pre-strong">public void </strong>onResponse(Call<RssJ544IndikatorByTipe> call, Response<RssJ544IndikatorByTipe> response) {
<em class="markup--em markup--pre-em">// Log.d("onResponse", response.body().toString());
</em>String r = response.body().getResult();
Log.<em class="markup--em markup--pre-em">d</em>(<strong class="markup--strong markup--pre-strong">"adaa22"</strong>, response.body().toString());
<strong class="markup--strong markup--pre-strong">if </strong>(r.equalsIgnoreCase(<strong class="markup--strong markup--pre-strong">"true"</strong>)) {
<em class="markup--em markup--pre-em">dataIndikator </em>= response.body().getData();
ArrayList<BarEntry> yVals = <strong class="markup--strong markup--pre-strong">new </strong>ArrayList<BarEntry>();
<strong class="markup--strong markup--pre-strong">for </strong>(<strong class="markup--strong markup--pre-strong">int </strong>i = 0; i < <em class="markup--em markup--pre-em">dataIndikator</em>.size(); i++) {
DataItemJ554IndikatorByTipe x = <em class="markup--em markup--pre-em">dataIndikator</em>.get(i);
<strong class="markup--strong markup--pre-strong">float </strong>a12 = Float.<em class="markup--em markup--pre-em">parseFloat</em>(x.getJmlIndikator());
<strong class="markup--strong markup--pre-strong">int </strong>a22 = Integer.<em class="markup--em markup--pre-em">parseInt</em>(x.getId());
yVals.add(<strong class="markup--strong markup--pre-strong">new </strong>BarEntry(a12, i));
}
ArrayList<String> xVals = <strong class="markup--strong markup--pre-strong">new </strong>ArrayList<String>();
<strong class="markup--strong markup--pre-strong">for </strong>(<strong class="markup--strong markup--pre-strong">int </strong>i = 0; i < <em class="markup--em markup--pre-em">dataIndikator</em>.size(); i++) {
DataItemJ554IndikatorByTipe x = <em class="markup--em markup--pre-em">dataIndikator</em>.get(i);
<strong class="markup--strong markup--pre-strong">float </strong>a12 = Float.<em class="markup--em markup--pre-em">parseFloat</em>(x.getJmlIndikator());
String a22 = x.getThIndikator();
}
BarDataSet dataSet = <strong class="markup--strong markup--pre-strong">new </strong>BarDataSet(yVals, <em class="markup--em markup--pre-em">dataIndikator</em>.get(0).getTipeIndikator());
dataSet.setColors(ColorTemplate.<strong class="markup--strong markup--pre-strong"><em class="markup--em markup--pre-em">COLORFUL_COLORS</em></strong>);
BarData data = <strong class="markup--strong markup--pre-strong">new </strong>BarData(xVals, dataSet);
LimitLine line = <strong class="markup--strong markup--pre-strong">new </strong>LimitLine(12f, <em class="markup--em markup--pre-em">dataIndikator</em>.get(0).getTipeIndikator());
line.setTextSize(12f);
line.setLineWidth(4f);
YAxis leftAxis = <strong class="markup--strong markup--pre-strong">chart</strong>.getAxisLeft();
leftAxis.addLimitLine(line);
<strong class="markup--strong markup--pre-strong">chart</strong>.setData(data);
<strong class="markup--strong markup--pre-strong">chart</strong>.setDescription(<em class="markup--em markup--pre-em">dataIndikator</em>.get(0).getTipeIndikator());
<strong class="markup--strong markup--pre-strong">chart</strong>.animateY(2000);
} <strong class="markup--strong markup--pre-strong">else </strong>{
}
}
@Override
<strong class="markup--strong markup--pre-strong">public void </strong>onFailure(Call<RssJ544IndikatorByTipe> call, Throwable t) {
}
});
<em class="markup--em markup--pre-em">//
</em>} <strong class="markup--strong markup--pre-strong">catch </strong>(Exception e) {
}
}
Full kodingan pada bagian MainBarChart Acitivity :
<strong class="markup--strong markup--pre-strong">public class </strong>MainBarChart <strong class="markup--strong markup--pre-strong">extends </strong>AppCompatActivity {
<strong class="markup--strong markup--pre-strong">public static </strong>List<DataItemJ554IndikatorByTipe> <em class="markup--em markup--pre-em">dataIndikator</em>;
DataItemJ54GetAllIndikator <strong class="markup--strong markup--pre-strong">dataItemGet</strong>;
String <strong class="markup--strong markup--pre-strong">idTipe</strong>;
BarChart <strong class="markup--strong markup--pre-strong">chart</strong>;
<strong class="markup--strong markup--pre-strong">int start</strong>, <strong class="markup--strong markup--pre-strong">end</strong>;
@Override
<strong class="markup--strong markup--pre-strong">protected void </strong>onCreate(Bundle savedInstanceState) {
<strong class="markup--strong markup--pre-strong">super</strong>.onCreate(savedInstanceState);
setContentView(R.layout.<strong class="markup--strong markup--pre-strong"><em class="markup--em markup--pre-em">activity_main</em></strong>);
<strong class="markup--strong markup--pre-strong">chart </strong>= (BarChart) findViewById(R.id.<strong class="markup--strong markup--pre-strong"><em class="markup--em markup--pre-em">chart</em></strong>);
<em class="markup--em markup--pre-em">dataIndikator </em>= <strong class="markup--strong markup--pre-strong">new </strong>ArrayList<>();
<strong class="markup--strong markup--pre-strong">int </strong>posisi = getIntent().getIntExtra(<strong class="markup--strong markup--pre-strong">"posisi"</strong>, 0);
<strong class="markup--strong markup--pre-strong">dataItemGet </strong>= MenuTipeIndikatorActivity.<em class="markup--em markup--pre-em">dataItemJ23RiwayatLelangs</em>.get(posisi);
<strong class="markup--strong markup--pre-strong">idTipe </strong>= <strong class="markup--strong markup--pre-strong">dataItemGet</strong>.getId();
Toast.<em class="markup--em markup--pre-em">makeText</em>(getApplicationContext(), <strong class="markup--strong markup--pre-strong">"id " </strong>+ <strong class="markup--strong markup--pre-strong">idTipe</strong>, Toast.<strong class="markup--strong markup--pre-strong"><em class="markup--em markup--pre-em">LENGTH_LONG</em></strong>).show();
getListData();
}
<strong class="markup--strong markup--pre-strong">private void </strong>getListData() {
<strong class="markup--strong markup--pre-strong">try </strong>{
RestApi api = MyRetrofitClient.<em class="markup--em markup--pre-em">getInstanceRetrofit2</em>();
Call<RssJ544IndikatorByTipe> call = api.getIndikatorByTipe(<strong class="markup--strong markup--pre-strong">idTipe</strong>);
call.enqueue(<strong class="markup--strong markup--pre-strong">new </strong>Callback<RssJ544IndikatorByTipe>() {
@Override
<strong class="markup--strong markup--pre-strong">public void </strong>onResponse(Call<RssJ544IndikatorByTipe> call, Response<RssJ544IndikatorByTipe> response) {
<em class="markup--em markup--pre-em">// Log.d("onResponse", response.body().toString());
</em>String r = response.body().getResult();
Log.<em class="markup--em markup--pre-em">d</em>(<strong class="markup--strong markup--pre-strong">"adaa22"</strong>, response.body().toString());
<strong class="markup--strong markup--pre-strong">if </strong>(r.equalsIgnoreCase(<strong class="markup--strong markup--pre-strong">"true"</strong>)) {
<em class="markup--em markup--pre-em">dataIndikator </em>= response.body().getData();
ArrayList<BarEntry> yVals = <strong class="markup--strong markup--pre-strong">new </strong>ArrayList<BarEntry>();
<strong class="markup--strong markup--pre-strong">for </strong>(<strong class="markup--strong markup--pre-strong">int </strong>i = 0; i < <em class="markup--em markup--pre-em">dataIndikator</em>.size(); i++) {
DataItemJ554IndikatorByTipe x = <em class="markup--em markup--pre-em">dataIndikator</em>.get(i);
<strong class="markup--strong markup--pre-strong">float </strong>a12 = Float.<em class="markup--em markup--pre-em">parseFloat</em>(x.getJmlIndikator());
<strong class="markup--strong markup--pre-strong">int </strong>a22 = Integer.<em class="markup--em markup--pre-em">parseInt</em>(x.getId());
yVals.add(<strong class="markup--strong markup--pre-strong">new </strong>BarEntry(a12, i));
}
ArrayList<String> xVals = <strong class="markup--strong markup--pre-strong">new </strong>ArrayList<String>();
<strong class="markup--strong markup--pre-strong">for </strong>(<strong class="markup--strong markup--pre-strong">int </strong>i = 0; i < <em class="markup--em markup--pre-em">dataIndikator</em>.size(); i++) {
DataItemJ554IndikatorByTipe x = <em class="markup--em markup--pre-em">dataIndikator</em>.get(i);
<strong class="markup--strong markup--pre-strong">float </strong>a12 = Float.<em class="markup--em markup--pre-em">parseFloat</em>(x.getJmlIndikator());
String a22 = x.getThIndikator();
}
BarDataSet dataSet = <strong class="markup--strong markup--pre-strong">new </strong>BarDataSet(yVals, <em class="markup--em markup--pre-em">dataIndikator</em>.get(0).getTipeIndikator());
dataSet.setColors(ColorTemplate.<strong class="markup--strong markup--pre-strong"><em class="markup--em markup--pre-em">COLORFUL_COLORS</em></strong>);
BarData data = <strong class="markup--strong markup--pre-strong">new </strong>BarData(xVals, dataSet);
LimitLine line = <strong class="markup--strong markup--pre-strong">new </strong>LimitLine(12f, <em class="markup--em markup--pre-em">dataIndikator</em>.get(0).getTipeIndikator());
line.setTextSize(12f);
line.setLineWidth(4f);
YAxis leftAxis = <strong class="markup--strong markup--pre-strong">chart</strong>.getAxisLeft();
leftAxis.addLimitLine(line);
<strong class="markup--strong markup--pre-strong">chart</strong>.setData(data);
<strong class="markup--strong markup--pre-strong">chart</strong>.setDescription(<em class="markup--em markup--pre-em">dataIndikator</em>.get(0).getTipeIndikator());
<strong class="markup--strong markup--pre-strong">chart</strong>.animateY(2000);
} <strong class="markup--strong markup--pre-strong">else </strong>{
}
}
@Override
<strong class="markup--strong markup--pre-strong">public void </strong>onFailure(Call<RssJ544IndikatorByTipe> call, Throwable t) {
}
});
<em class="markup--em markup--pre-em">//
</em>} <strong class="markup--strong markup--pre-strong">catch </strong>(Exception e) {
}
}
}
5. Jalankan aplikasi, dan lihat hasilnya :
Demo :
Download project dari github
Last, I want to say Alhamdulillah and Don’t forget leave your feedback and comment 🙂
Thanks