APPENDIX
FILE MainActivity.java
CODE TO STORE THE BUTTON MENU AND MOVE THE PAGE
package com.ste.sembakoapp; import Android.content.Intent;
import Android.support.v7.app.AppCompatActivity; import Android.os.Bundle;
import Android.view.View; import Android.widget.Button;
public class MainActivity extends AppCompatActivity { private Button btn1,btn2,btn3;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); btn1 = (Button) findViewById(R.id.menu1); btn2 = (Button) findViewById(R.id.menu2); btn3 = (Button) findViewById(R.id.menu3);
btn1.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, display.class));
} });
btn2.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, DetailActivity.class));
} });
btn3.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, AboutActivity.class));
} }); }
}
FILE Display.java
CODE TO TAKE DATA ON MINISTRY OF TRADE WEBSITE AND
DISPLAY ALL PRICES
package com.ste.sembakoapp;
import Android.support.v7.app.AppCompatActivity; import Android.os.Bundle;
import Android.view.View;
import Android.widget.ArrayAdapter; import Android.widget.Button;
import Android.widget.Spinner; import Android.widget.TextView; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException;
public class display extends AppCompatActivity { private Button getBtn;
private TextView result;
private Spinner spinner,spinner2; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
result = (TextView) findViewById(R.id.result); getBtn = (Button) findViewById(R.id.getBtn);
spinner = (Spinner) findViewById(R.id.tahun_spinner); ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this, R.array.tahun_array, Android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_d ropdown_item);
spinner.setAdapter(adapter);
spinner2 = (Spinner) findViewById(R.id.bulan_spinner); ArrayAdapter<CharSequence> adapter2 =
ArrayAdapter.createFromResource(this, R.array.bulan_array, Android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(Android.R.layout.simple_spinner_ dropdown_item);
spinner2.setAdapter(adapter2);
getBtn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
final StringBuilder url = new StringBuilder(); final StringBuilder period = new StringBuilder(); String tahun = spinner.getSelectedItem().toString();
int bulan_pos = spinner2.getSelectedItemPosition();
}
node node = new node(nama, arrHarga, tanggal);
listData.addLast(node); }
Statistic stat = new Statistic();
node pointer = listData.getHead();
while (pointer != null) { builder.append("Name : ").append(pointer.getNama()).append("\n");
builder.append("Period : ").append(periode).append("\n");
builder.append("Prices").append("\n");
float[] h = pointer.getHarga(); int[] t = pointer.getTanggal(); for(int a=0; a<h.length; a++){ builder.append("Date : ").append(t[a]);
if (t[a] < 10){
builder.append(" | "); }else{
builder.append(" | "); }
builder.append("Price : ").append(h[a]).append("\n");
}
builder.append("\n");
builder.append("Statistics").append("\n"); float meanVal = stat.mean(h);
double medVal = stat.median(h); float modeVal = stat.mode(h); builder.append("Mean = ").append(meanVal).append("\n");
builder.append("Median = ").append(medVal).append("\n");
builder.append("Mode = ").append(modeVal).append("\n");
pointer = pointer.getNext();
builder.append("\n").append("\n"); }
} catch (IOException e) {
builder.append("Error :").append(e.getMessage()).append("\n");
}
runOnUiThread(new Runnable() { @Override
public void run() {
result.setText(builder.toString()); }
}); }
}).start(); }
}
FILE DetailActivity.java
CODE TO DISPLAY THE DATA BASIC COMMODITIES ACCORDANCE
WITH ITEMS SELECTED AND DISPLAY THE GRAPH OF
STATISTICAL CALCULATIONS
package com.ste.sembakoapp; import Android.graphics.Color; import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity; import Android.view.View;
import Android.widget.ArrayAdapter; import Android.widget.Button;
import Android.widget.Spinner; import Android.widget.TextView; import Android.widget.Toast;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.GridLabelRenderer; import com.jjoe64.graphview.LegendRenderer; import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.DataPointInterface; import com.jjoe64.graphview.series.LineGraphSeries;
import com.jjoe64.graphview.series.OnDataPointTapListener; import com.jjoe64.graphview.series.Series;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException;
import java.util.Random;
public class DetailActivity extends AppCompatActivity { private Button getBtn;
private TextView result;
private Spinner spinner,spinner2,spinner3; private LineGraphSeries<DataPoint> mSeries1; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail); result = (TextView) findViewById(R.id.result); getBtn = (Button) findViewById(R.id.getBtn);
spinner = (Spinner) findViewById(R.id.tahun_spinner); ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this, R.array.tahun_array,
Android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_d ropdown_item);
spinner.setAdapter(adapter);
spinner2 = (Spinner) findViewById(R.id.bulan_spinner); ArrayAdapter<CharSequence> adapter2 =
ArrayAdapter.createFromResource(this, R.array.bulan_array,
Android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(Android.R.layout.simple_spinner_ dropdown_item);
spinner2.setAdapter(adapter2);
spinner3 = (Spinner) findViewById(R.id.item_spinner); ArrayAdapter<CharSequence> adapter3 =
ArrayAdapter.createFromResource(this, R.array.item_array, Android.R.layout.simple_spinner_dropdown_item);
adapter3.setDropDownViewResource(Android.R.layout.simple_spinner_ dropdown_item);
spinner3.setAdapter(adapter3);
getBtn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
final StringBuilder url = new StringBuilder(); final StringBuilder period = new StringBuilder();
String tahun =
spinner.getSelectedItem().toString(); int bulan_pos = spinner2.getSelectedItemPosition();
int item_pos = spinner3.getSelectedItemPosition(); String item_name =
spinner3.getSelectedItem().toString();
String bulan = String.valueOf(bulan_pos+1); String str_bulan =
spinner2.getSelectedItem().toString(); String URL =
url.append("http://www.kemendag.go.id/id/economic-profile/prices/national-price-table?
year=").append(tahun).append("&month=").append(bulan).toString(); String periode =
period.append(str_bulan).append("-").append(tahun).toString();
getWebsite(URL,periode,item_pos, item_name); }
});
}
runOnUiThread(new Runnable() { @Override
public void run() {
result.setText(builder.toString());
GraphView graph = (GraphView) findViewById(R.id.graph);
GridLabelRenderer gridlabel = graph.getGridLabelRenderer();
gridlabel.setHorizontalAxisTitle("Dates : "+periode);
gridlabel.setVerticalAxisTitle("Prices (Rupiah)");
graph.addSeries(mSeries1); graph.getViewport().setXAxisBoundsManual(true);
graph.getLegendRenderer().setVisible(true);
graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign.TOP) ;
graph.getViewport().setScalable(true); graph.getViewport().setScrollableY(true); graph.getViewport().setScalable(true); graph.getViewport().setScalableY(true); }
}); }
}).start(); }
}
FILE AboutActivity.java
CODE TO DISPLAY PROJECT INFORMATION
package com.ste.sembakoapp;
import Android.support.v7.app.AppCompatActivity; import Android.os.Bundle;
public class AboutActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about); }
}
FILE Node.java
CODE TO STORE ITEM DATA IN A NODE TO BE INSERTED INTO
LINKED LIST
package com.ste.sembakoapp; public class node {
private String nama; private float[] harga; private int[] tanggal; private node next; private node prev;
public node(String nama, float[] harga, int[] tanggal) { this.nama = nama;
this.harga = harga; this.tanggal = tanggal; this.next = null;
this.prev = null; }
public node(node E, node next, node prev) { this.nama = E.getNama();
this.harga = E.getHarga(); this.tanggal = E.getTanggal(); this.next = next;
this.prev = prev; }
public String getNama() { return this.nama; }
public float[] getHarga() { return this.harga; }
public int[] getTanggal() { return this.tanggal; }
public node getNext() { return next;
}
public node getPrev() { return prev;
}
public void setNext(node next) { this.next = next;
}
public void setPrev(node prev) { this.prev = prev;
} }
FILE LinkedListImpl.java
CODE TO STORE DATA INTO LINKED LIST
package com.ste.sembakoapp; public class LinkedListImpl { private node head;
private node tail; private int size;
public LinkedListImpl() { size = 0;
}
public int size() { return size; }
public boolean isEmpty() { return size == 0; }
public node getHead() { return head;
}
public node get(int i) { if (i < size) {
node pointer = head; int position = 1;
while (position <= i) {
pointer = pointer.getNext(); position++;
}
return pointer; } else {
return null; }
}
public void addFirst(node E) { if (size == 0) {
head = new node(E, null, null); tail = head;
size++; } else {
head.setPrev(E); E.setNext(head); head = E;
size++; }
}
public void addLast(node E) { if (size == 0) {
tail = new node(E, null, null); head = tail;
FILE Statistic.java
CODE TO CALCULATE STATISTICS (MEAN, MEDIAN, MODE) ON
DATA
package com.ste.sembakoapp; import java.util.Arrays; public class Statistic {
public static float mean(float[] m) { float sum = 0;
for (int i = 0; i < m.length; i++) { sum += m[i];
}
return sum / m.length; }
public static double median(float[] m) { int middle = m.length/2;
Arrays.sort(m);
if (m.length%2 == 1) { return m[middle]; } else {
return (m[middle-1] + m[middle]) / 2.0; }
}
public static float mode(float a[]) { float maxValue=0;
float maxCount=0;
for (int i = 0; i < a.length; ++i) { int count = 0;
for (int j = 0; j < a.length; ++j) { if (a[j] == a[i]) ++count;
}
if (count > maxCount) { maxCount = count; maxValue = a[i]; }
}
return maxValue; }
}
FILE activity_about.xml
CODE FOR ABOUT DISPLAY ACTIVITY
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.ste.sembakoapp.AboutActivity"> <TextView
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" android:text="About"
android:id="@+id/textView2" android:layout_marginTop="42dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <TextView
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" android:text="Purpose of the application is for monitoring basic commodities price from Ministry of Trades Website"
android:id="@+id/textView3" android:layout_marginTop="36dp" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" /> <TextView
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" android:text="Created By : Stefani Yuanita"
android:id="@+id/textView4"
android:layout_below="@+id/textView3" android:layout_centerHorizontal="true" android:layout_marginTop="35dp" /> </RelativeLayout>
FILE activity_detail.xml
android:fillViewport="true"><RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.ste.sembakoapp.DetailActivity">
android:text=""
android:textSize="17sp"
android:layout_marginTop="57dp"
android:layout_below="@+id/getBtn"
android:layout_centerHorizontal="true" />
<com.jjoe64.graphview.GraphView
android:layout_width="match_parent"
android:layout_height="200dip"
android:layout_below="@id/result"
android:id="@+id/graph" />
</RelativeLayout> </ScrollView>
FILE activity_display.xml
CODE FOR ABOUT DISPLAY ACTIVITY
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent" android:fillViewport="true">
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.ste.sembakoapp.display">
<Spinner
android:id="@+id/tahun_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Spinner
android:id="@+id/bulan_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="29dp"
android:layout_below="@+id/tahun_spinner"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:id="@+id/getBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Data"
android:layout_below="@+id/bulan_spinner"
android:layout_centerHorizontal="true" />
<TextView
android:id="@+id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Result..."
android:textSize="17sp"
android:layout_below="@+id/getBtn"
android:layout_centerHorizontal="true"
android:layout_marginTop="27dp" />
</RelativeLayout> </ScrollView>
FILE activity_main.xml
CODE FOR ABOUT MAIN ACTIVITY
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.ste.sembakoapp.MainActivity"> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Price Monitoring"
android:id="@+id/menu1"
android:layout_marginTop="56dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Detail Item"
android:id="@+id/menu2"
android:layout_marginTop="31dp"
android:layout_below="@+id/menu1"
android:layout_alignRight="@+id/menu1"
android:layout_alignEnd="@+id/menu1"
android:layout_alignLeft="@+id/menu1"
android:layout_alignStart="@+id/menu1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="About"
android:id="@+id/menu3"
android:layout_centerVertical="true"
android:layout_alignLeft="@+id/menu2"
android:layout_alignStart="@+id/menu2"
android:layout_alignRight="@+id/menu2"
android:layout_alignEnd="@+id/menu2" />
</RelativeLayout>