Senin, 23 September 2019

Program Converter Suhu

Untuk tugas Mobile Programming ini, saya membuat Program Converter Suhu berbasis Android. Di program tersebut saya juga memasukkan fitur login sederhana (user dan password statis) dan about me yang berisi data diri saya. Tanpa perlu berlama-lama, berikut code dan screenshot aplikasi saya.

A. Deskripsi Aplikasi

  1. Pertama kali membuka aplikasi, akan tampil halaman login yang harus diisi untuk menggunakan aplikasi.
  2. Di dalam halaman login juga terdapat text "About Me" yang jika diklik akan memunculkan halaman About Me yang berisi data diri saya.
  3. Masukkan username "admin" dan password "123" untuk bisa masuk ke halaman home / halaman converter suhu. Memasukkan username dan password yang salah akan memunculkan error dan mereset form username dan password.
  4. Dalam halaman home, masukkan angka suhu yang ingin diconverter.
  5. Kemudian pilih jenis suhu. Pilih "To Celcius" untuk mengubah angka suhu Fahrenheit menjadi Celcius. Pilih "To Fahrenheit" untuk mengubah angka suhu Celcius menjadi Fahrenheit.
  6. Setelah itu klik tombol "Calculate" untuk menjalankan program.
  7. Anda bisa mereset angka suhu dan pilihan jenis suhu dengan mengeklik tombol "clear"
  8. Jika selesai menggunakan aplikasi, klik tombol "LOGOUT" untuk kembali ke halaman login.
B. Source Code Aplikasi
Untuk bisa membuat aplikasi sesuai dengan deskripsi di atas, berikut source code yang saya gunakan




  1. Source Code XML untuk tampilan Login


    <?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:orientation="vertical">

        <Button
            android:id="@+id/btnLogin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="160dp"
            android:layout_marginLeft="160dp"
            android:layout_marginTop="92dp"
            android:text="Login"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/pass" />

        <EditText
            android:id="@+id/user"
            android:layout_width="276dp"
            android:layout_height="50dp"
            android:layout_marginStart="68dp"
            android:layout_marginLeft="68dp"
            android:layout_marginTop="72dp"
            android:hint="username"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView4" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="156dp"
            android:layout_marginLeft="156dp"
            android:layout_marginTop="52dp"
            android:text="Welcome"
            android:textAppearance="?android:attr/textAppearanceLarge"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <EditText
            android:id="@+id/pass"
            android:layout_width="276dp"
            android:layout_height="44dp"
            android:layout_marginStart="68dp"
            android:layout_marginLeft="68dp"
            android:layout_marginTop="24dp"
            android:ems="10"
            android:hint="password"
            android:inputType="textPassword"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/user" />

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="56dp"
            android:layout_height="49dp"
            android:layout_marginStart="12dp"
            android:layout_marginLeft="12dp"
            android:layout_marginTop="72dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView4"
            app:srcCompat="@drawable/ic_people" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="57dp"
            android:layout_height="45dp"
            android:layout_marginStart="12dp"
            android:layout_marginLeft="12dp"
            android:layout_marginTop="145dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView4"
            app:srcCompat="@drawable/ic_password" />

        <TextView
            android:id="@+id/aboutMe"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="176dp"
            android:layout_marginLeft="176dp"
            android:layout_marginTop="36dp"
            android:text="About Me"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btnLogin" />

    </androidx.constraintlayout.widget.ConstraintLayout>


  2. Source Code JAVA untuk tampilan Login

    package com.hiskur.aplikasilogin;

    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;

    import androidx.appcompat.app.AppCompatActivity;

    public class loginModule extends AppCompatActivity {


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

            final EditText user = (EditText) findViewById(R.id.user);
            final EditText pass = (EditText) findViewById(R.id.pass);
            final TextView aboutMe = (TextView) findViewById(R.id.aboutMe);
            Button button = (Button) findViewById(R.id.btnLogin);

            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(user.getText().toString().equals("admin") && pass.getText().toString().equals("123")){
                        Intent i = new Intent(loginModule.this, homeModule.class);
                        i.putExtra("name", user.getText().toString());
                        Toast.makeText(getApplicationContext(),"Login Sukses",Toast.LENGTH_SHORT).show();
                        startActivity(i);

                    } else {
                        Toast.makeText(getApplicationContext(),"Username dan Password salah",Toast.LENGTH_SHORT).show();
                        user.setText("");
                        pass.setText("");
                    }
                }
            });

            aboutMe.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
                    Intent i = new Intent(loginModule.this, aboutmeModule.class);
                    startActivity(i);
                }
            });


        }

        @Override
        public void onBackPressed() {

        }
    }
  3. Source Code XML untuk tampilan About Me



    <?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">

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="120dp"
            android:layout_marginLeft="120dp"
            android:layout_marginTop="52dp"
            android:text="About Me"
            android:textSize="100px"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="185dp"
            android:layout_height="196dp"
            android:layout_marginStart="112dp"
            android:layout_marginLeft="112dp"
            android:layout_marginTop="60dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView3"
            app:srcCompat="@drawable/logoa" />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="52dp"
            android:layout_marginLeft="52dp"
            android:layout_marginTop="32dp"
            android:text="Nama : Hisyam Kurniawan"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/imageView3" />

        <TextView
            android:id="@+id/textView6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="52dp"
            android:layout_marginLeft="52dp"
            android:layout_marginTop="64dp"
            android:text="Kelas : 06 TPLE 003"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/imageView3" />

        <TextView
            android:id="@+id/textView7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="52dp"
            android:layout_marginLeft="52dp"
            android:layout_marginTop="92dp"
            android:text="NIM : 161021450173"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/imageView3" />

        <TextView
            android:id="@+id/textBack"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="16dp"
            android:text="@string/tombolBack"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />


    </androidx.constraintlayout.widget.ConstraintLayout>
  4. Source Code JAVA untuk tampilan About Me

    package com.hiskur.aplikasilogin;

    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TextView;

    import androidx.appcompat.app.AppCompatActivity;

    import org.w3c.dom.Text;

    public class aboutmeModule  extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.aboutme);

            final TextView back = (TextView) findViewById(R.id.textBack);

            back.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(aboutmeModule.this, loginModule.class);
                    startActivity(i);
                }
            });
        }

        @Override
        public void onBackPressed() {

        }
    }


  5. Source Code XML untuk tampilan Home



    <?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:orientation="vertical">

        <TextView
            android:id="@+id/text_viewdata"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="16dp"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/btnLogout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="12dp"
            android:text="Logout"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/text_viewdata" />

        <Button
            android:id="@+id/button"
            android:layout_width="367dp"
            android:layout_height="51dp"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="348dp"
            android:text="Calculate"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <EditText
            android:id="@+id/editText"
            android:layout_width="320dp"
            android:layout_height="39dp"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="144dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text=""
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <RadioGroup
            android:id="@+id/radioGroup1"
            android:layout_width="332dp"
            android:layout_height="121dp"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="216dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <RadioButton
                android:id="@+id/radioButton3"
                android:layout_width="155dp"
                android:layout_height="36dp"
                android:text="To Celcius" />

            <RadioButton
                android:id="@+id/radioButton4"
                android:layout_width="155dp"
                android:layout_height="38dp"
                android:text="To Fahrenheit" />

        </RadioGroup>

        <Button
            android:id="@+id/button2"
            android:layout_width="119dp"
            android:layout_height="66dp"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="12dp"
            android:text="Clear"
            android:visibility="visible"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/button" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="156dp"
            android:layout_height="22dp"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="16dp"
            android:text="Masukkan angka suhu"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btnLogout" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:text="Pilih jenis suhu"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/editText" />

    </androidx.constraintlayout.widget.ConstraintLayout>
  6. Source Code JAVA untuk tampilan Home

    package com.hiskur.aplikasilogin;

    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.TextView;
    import android.widget.Toast;

    import androidx.appcompat.app.AppCompatActivity;

    public class homeModule extends AppCompatActivity {

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

            Button btnLogout = (Button) findViewById(R.id.btnLogout);

            TextView t = (TextView) findViewById(R.id.text_viewdata);
            Bundle bundle=getIntent().getExtras();
            String s=bundle.getString("name");
            t.setText("Welcome, "+s);

            btnLogout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(homeModule.this, loginModule.class);
                    Toast.makeText(getApplicationContext(),"Terima kasih telah menggunakan aplikasi ini",Toast.LENGTH_LONG).show();
                    startActivity(i);
                }
            });

            final EditText text;
            final RadioButton RBCelsius;
            final RadioButton RBFahrenheit;
            final RadioGroup RGnya;
            final Button Buttonnya;
            final Button clear;
            final RadioButton RBClear;


            text = (EditText) findViewById(R.id.editText);
            RBCelsius = (RadioButton) findViewById((R.id.radioButton3));
            RBFahrenheit = (RadioButton) findViewById(R.id.radioButton4);
    //        RBClear = (RadioButton) findViewById(R.id.radioButton5);
            RGnya = (RadioGroup) findViewById(R.id.radioGroup1);
            Buttonnya = (Button) findViewById(R.id.button);
            clear = (Button) findViewById(R.id.button2);

            Buttonnya.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View arg0){
                    //TODO Auto-generated method stub
                    if(RBCelsius.isChecked()) {
                        float inputValue = Float.parseFloat(text.getText().toString());
                        float hasilCelsius = (inputValue - 32) * 5 / 9;
                        text.setText("" + hasilCelsius);

                    }

                    if(RBFahrenheit.isChecked()){
                        float inputValue = Float.parseFloat(text.getText().toString());
                        float hasilFahrenheit = ((inputValue*9)/5)+32;
                        text.setText(""+hasilFahrenheit);
                    }

    //                if(RBClear.isChecked()){
    //                    text.setText("");
    //                }
                }

            });

            clear.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View arg0){
                    text.setText("");
                    RBCelsius.setChecked(false);
                    RBFahrenheit.setChecked(false);
                }
            });


        }

        @Override
        public void onBackPressed() {

        }
    }



  • Merubah code program pada AndroidManifest.xml untuk mendaftarkan activity ke dua agar bisa berjalan. Lihat pada bagian  <activity android:name=".homeModule"></activity> dan <activity android:name=".aboutmeModule"></activity>. HomeModule dan aboutmeModule adalah nama class java(homeModule.java & aboutmeModule.java).

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.hiskur.aplikasilogin">

        <application
            android:allowBackup="true"
            android:icon="@mipmap/icon_suhu"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/icon_suhu_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".loginModule">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>

            <activity android:name=".homeModule">

            </activity>

            <activity android:name=".aboutmeModule">

            </activity>

        </application>

    </manifest>
  • Merubah title aplikasi, berada di res/values/String.xml.

    <resources>
        <string name="app_name">Hisyam Kurniawan - 161021450173</string>
        <string name="tombolBack">&lt;-- Back</string>
    </resources>



  • C. Running Aplikasi
    Setelah selesai, kita akan menguji aplikasi tersebut.

    1. Pertama kita akan menguji apa yang terjadi jika kita salah memasukkan username dan password

    2. Kemudian kita akan memasukkan username dan password yang benar

    3. Masukkan angka suhu dan jenis suhu. Kemudian klik tombol calculate


    4. Kemudian klik tombol logout untuk kembali ke menu login.

    5. Lalu klik tulisan about me untuk menuju tampilan about me.

    6. Klik tombol " <-- Back " untuk kembali ke halaman login

    Sekian program dari saya.
    Terima kasih.