Pada dasarnya untuk membuat login dengan database SQLite di android itu cukup mudah.
pertama kita buat 3 Activity (empty) yang akan secara otomatis include dengan xml filenya (bisa dilihat pada layout). Yaitu :
-MainActivity.java (activity yang pertama kali akan muncul bila aplikasi login anda telah dijalankan)
-Register.java (activity yang akan membuat pendaftaran apabila anda belum bisa login)
-Tampil.java (activity yang akan muncul bila anda sudah berhasil login)
Kemudian buat 3 java class (yang berfungsi sebagai method getter dan setter dan SQLite nya yang akan kita panggil nantinya). Yaitu :
-Contact.java
-DatabaseHelper.java
Langsung saja pertama kita buat Layoutnya pada activity_main :
?xml version="1.0" encoding="utf-8"?>
<ScrollView
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="@drawable/blues"
tools:context="com.bigbuildingproject.okta.icd_10.MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="80dp"
android:layout_height="50dp"
android:background="@drawable/ic_https_black_24dp"
android:layout_alignTop="@+id/textView4"
android:layout_toRightOf="@+id/TFpassword"
android:layout_toEndOf="@+id/TFpassword" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="59dp"
android:layout_marginStart="59dp"
android:layout_marginTop="52dp"
android:text="Username"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<EditText
android:id="@+id/TFusername"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:layout_below="@+id/textView3"
android:layout_alignLeft="@+id/textView3"
android:layout_alignStart="@+id/textView3" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/TFusername"
android:layout_alignStart="@+id/TFusername"
android:layout_below="@+id/TFusername"
android:layout_marginTop="30dp"
android:text="Password" />
<EditText //untuk mengisi password
android:id="@+id/TFpassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView4"
android:layout_alignStart="@+id/textView4"
android:layout_below="@+id/textView4"
android:ems="10"
android:inputType="textPassword" />
<Buttonandroid:id="@+id/Blogin"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/TFpassword"
android:layout_alignStart="@+id/TFpassword"
android:layout_below="@+id/TFpassword"
android:layout_marginTop="52dp"
android:onClick="onButtonClick"
android:text="Login" />
<Button
android:id="@+id/bregister"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/TFpassword"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/TFpassword"
android:onClick="onButtonClick"
android:text="Register" /> </RelativeLayout> </ScrollView>
kemudian kita masuk ke MainActivity.java :
package com.bigbuildingproject.okta.icd_10; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; import java.text.Normalizer;public class MainActivity extends AppCompatActivity { DatabaseHelper helper = new DatabaseHelper(this); @Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportActionBar().setTitle("Login here"); } public void onButtonClick (View v) { if (v.getId()==R.id.Blogin) { EditText a = (EditText)findViewById(R.id.TFusername); EditText b = (EditText)findViewById(R.id.TFpassword); String str = a.getText().toString(); String pass = b.getText().toString(); String password = helper.searchPass(str); if (a.length()==0 && b.length()==0) { a.setError("Mohon di isi"); b.setError("Mohon di isi"); } else if (a.length()==0) { a.setError("Mohon di isi"); } else if (b.length()==0) { b.setError("Mohon di isi"); } else if (pass.equals(password)) { Intent i = new Intent(MainActivity.this, Tampil.class); startActivity(i); } else{ Toast.makeText(MainActivity.this,"Password dont match", Toast.LENGTH_SHORT).show(); } } if (v.getId()==R.id.bregister) { Intent i = new Intent(MainActivity.this, Register.class); startActivity(i); } } }
Kemudian kita ke register.xml :
<?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:background="@drawable/blues"><RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:id="@+id/textView6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_alignParentTop="true"android:layout_marginLeft="12dp"android:layout_marginStart="12dp"android:layout_marginTop="22dp"android:text="Nama" /><EditTextandroid:id="@+id/TFname"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView6"android:layout_alignStart="@+id/textView6"android:layout_below="@+id/textView6"android:ems="10"android:inputType="textPersonName" /><TextViewandroid:id="@+id/textView7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/TFname"android:layout_alignStart="@+id/TFname"android:layout_below="@+id/TFname"android:layout_marginTop="23dp"android:text="Email" /><EditTextandroid:id="@+id/TFemail"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView7"android:layout_alignStart="@+id/textView7"android:layout_below="@+id/textView7"android:ems="10"android:inputType="textPersonName" /><TextViewandroid:id="@+id/textView8"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/TFemail"android:layout_alignStart="@+id/TFemail"android:layout_below="@+id/TFemail"android:layout_marginTop="26dp"android:text="Username" /><EditTextandroid:id="@+id/TFuname"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView8"android:layout_alignStart="@+id/textView8"android:layout_below="@+id/textView8"android:ems="10"android:inputType="textPersonName" /><TextViewandroid:id="@+id/textView9"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/TFuname"android:layout_alignStart="@+id/TFuname"android:layout_below="@+id/TFuname"android:layout_marginTop="25dp"android:text="Password 1st" /><EditTextandroid:id="@+id/TFpass1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView9"android:layout_alignStart="@+id/textView9"android:layout_below="@+id/textView9"android:ems="10"android:inputType="textPassword" /><TextViewandroid:id="@+id/textView10"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/TFpass2"android:layout_alignStart="@+id/TFpass2"android:layout_below="@+id/TFpass1"android:layout_marginTop="23dp"android:text="Password 2nd" /><EditTextandroid:id="@+id/TFpass2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ems="10"android:inputType="textPassword"android:layout_below="@+id/textView10"android:layout_alignLeft="@+id/TFpass1"android:layout_alignStart="@+id/TFpass1" /><Buttonandroid:id="@+id/Bregister"style="@style/Widget.AppCompat.Button.Colored"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignEnd="@+id/textView10"android:layout_alignRight="@+id/textView10"android:layout_below="@+id/TFpass2"android:layout_marginTop="63dp"android:onClick="onRegisterClick"android:text="Register" /></RelativeLayout> </ScrollView>
Setelah itu ke Register.java :
package com.bigbuildingproject.okta.icd_10; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; /** * Created by Asus on 30/04/2017. */ public class Register extends Activity { DatabaseHelper helper = new DatabaseHelper(this); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.register);
} public void onRegisterClick (View v) { if (v.getId()==R.id.Bregister) { EditText name = (EditText)findViewById(R.id.TFname); EditText email = (EditText)findViewById(R.id.TFemail); EditText uname = (EditText)findViewById(R.id.TFuname); EditText pass1 = (EditText)findViewById(R.id.TFpass1); EditText pass2 = (EditText)findViewById(R.id.TFpass2); String namestr = name.getText().toString(); String emailstr = email.getText().toString(); String unamestr = uname.getText().toString(); String pass1str = pass1.getText().toString(); String pass2str = pass2.getText().toString(); if (namestr.length()==0) { name.setError("Nama kosong, mohon di isi"); } else if (emailstr.length()==0) { email.setError("Email kosong, mohon di isi"); } else if (unamestr.length()==0) { uname.setError("username kosong, mohon di isi"); } else if (!pass1str.equals(pass2str)) { Toast.makeText(Register.this, "Password Unmatch",
Toast.LENGTH_SHORT).show(); } else{ Contact c = new Contact(); c.setName(namestr); c.setEmail(emailstr); c.setUname(unamestr); c.setPass(pass1str); helper.insertContact(c); finish(); Toast.makeText(Register.this,
"Username & password berhasil dibuat",
Toast.LENGTH_SHORT).show();
} } } }
Masuk ke Tampil.java :
package com.bigbuildingproject.okta.icd_10; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; public class Tampil extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tampil);
}
}
Setelah semua selesai, kita buat method getter dan setter pada
Contact.java, untuk mengambil value nantinya :
package com.bigbuildingproject.okta.icd_10; /** * Created by Asus on 30/04/2017. */ public class Contact { String name, email, uname, pass; public void setName (String name) { this.name=name; } public String getName() { return this.name; } public void setEmail (String email) { this.email=email; } public String getEmail() { return this.email; } public void setUname (String uname) { this.uname=uname; } public String getUname() { return this.uname; } public void setPass (String pass) { this.pass=pass; } public String getPass() { return this.pass; } }
Setelah semua selesai, masuk Ke DatabaseHelper.java :
package com.bigbuildingproject.okta.icd_10; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by Asus on 30/04/2017. */ public class DatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "contacts"; private static final String TABLE_NAME = "contacts"; private static final String COLUMN_ID = "id"; private static final String COLUMN_NAME = "name"; private static final String COLUMN_EMAIL = "email"; private static final String COLUMN_UNAME = "uname"; private static final String COLUMN_PASS = "pass"; SQLiteDatabase db; private static final String TABLE_CREATE = "create table contacts
(id integer primary key not null, " + "name text not null, email text not null, uname text not null,
pass text not null);";
public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override
public void onCreate(SQLiteDatabase db) { db.execSQL(TABLE_CREATE); this.db = db; } public void insertContact(Contact c) { db = this.getWritableDatabase(); String query = "select * from contacts "; Cursor cursor = db.rawQuery(query, null); int count = cursor.getCount(); ContentValues values = new ContentValues(); values.put(COLUMN_ID, count); values.put(COLUMN_NAME, c.getName()); values.put(COLUMN_EMAIL, c.getEmail()); values.put(COLUMN_UNAME, c.getUname()); values.put(COLUMN_PASS, c.getPass()); db.insert(TABLE_NAME, null, values); db.close(); } public String searchPass(String uname) { db = this.getReadableDatabase(); String query = "select uname, pass from " + TABLE_NAME; Cursor cursor = db.rawQuery(query, null); String a, b; b = "not found"; if (cursor.moveToFirst()) { do { a = cursor.getString(0); if (a.equals(uname)) { b = cursor.getString(1); break; } } while (cursor.moveToNext()); } return b; } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion) { String query = "DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(query); this.onCreate(db); } }
-Pada form register :
-Pada form Tampil :
Kesimpulan :
Bahwa untuk membangun aplikasi login pada android. Anda harus fokus terhadap :
1. Bagian MainActivity.java
2. Bagian Register.java
3. Bagian DatabaseHelper.java
4. Bagian Contact.java
Urutan diatas adalah agar anda semua tidak bingung ketika memahami
penggalan kodingan diatas. Jadi kita mendesain terlebih dahulu tampilan
UI awal untuk loginnya yang terdapat pada mainactivity.xml,kemudian bila
sudah, ketikkan kode yang terdapat di MainActivity.java.Setelah itu lanjut
ke bagian untuk membuat tampilan register.xml bila belum memiliki id dan
password. Disana kita buat user agar menginput data-data mereka (seperti
nama, email, alamat, id, password, dan password 2nd) agar bisa login
nantinya. Kemudian ketikkan kode yang terdapat pada Register.java. Setelah
kedua activity tersebut telah di desain, selanjutnya kita buat activity
DatabaseHelper.java(tanpa xmlnya), dikarenakan kita hanya ingin membuat
data-data yangtelah user input pada Activity register bisa ditampung /
disimpan didatabase nantinya Terakhir, kita masuk kebagian Activity Contact
untuk membantu activity DatabaseHelper dalam menampung database yang telah user
inputkan nantinya, dan bila berhasil akan masuk kedalam Tampil.java nantinya.
Sekian Artikel kali ini, semoga bermanfaat. Salam Developer ^^
boleh saya tanya ini kenapa hasil running password yng di isi sudah benar tapi masih tetap slah ya,.
ReplyDeleteboleh lihat hasil logcatnya?
Deletegan mau nanya, ini apknya udah jalan cuman pas klik register malah "unfortunately, My application has stopped working" kira-kira kenapa ya itu?
ReplyDeleteBisa lihat logcatnya mas pas saat di run?, seharusnya datanya sudah masuk (bisa dilihat dgn menggunakan sql debugger, download dari playstore)
ReplyDeletekalo masih gabisa juga, yang di DatabaseHelper.java copy all aja semua
Deletemau nanya mas
ReplyDeletetahu caranya database tersimpan sesudah click button?
misalnya saya punya tombol download lalu setelah di klik muncul di database bawah file sudah di download oleh yg login, tgl dan waktu sekian.
terimakasih
klo lokal pke db browser. bisa di cek disini http://sqlitebrowser.org/
DeleteKalau mau liat yang sudah download atau belum, masnya bisa menggunakan query insert di dalam button tersebut. Kalau untuk rancangannya dalam pandangan saya, mas bisa buat table download, yang dimana terdapat field download_id,user_id,dan status . Untuk user_id, nanti berdasarkan id user di table user, kemudian status bisa di isi recordnya dengan downloaded. Mungkin jawaban saya bisa membantu :)
maaf mau tanya kok setiap di klik register selalu forced closed ya
ReplyDeletebisa lihat logcatnya mbak? atau bisa email ke saya
DeleteIni mas logcat error saat menekan tombol register
ReplyDelete10-07 22:30:20.840 25805-25805/com.example.asus.loginpage E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.asus.loginpage, PID: 25805
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
at android.view.View.performClick(View.java:6897)
at android.widget.TextView.performClick(TextView.java:12693)
at android.view.View$PerformClick.run(View.java:26101)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6897)
at android.widget.TextView.performClick(TextView.java:12693)
at android.view.View$PerformClick.run(View.java:26101)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at com.example.asus.loginpage.RegisterActivity.onRegisterClick(RegisterActivity.java:31)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6897)
at android.widget.TextView.performClick(TextView.java:12693)
at android.view.View$PerformClick.run(View.java:26101)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
DeleteItu diatas msh ke detect null mas dari EditTextnya, dan juga ga ada penanganan error , sebab itu langsung force close. Solusinya cek lagi apakah variabel String tersebut telah benar mengarah ke dalam Edittext yang dituju, sehingga field dapat terisi dengan record yang sesuai dari isian data pada Edittext, atau solusi kedua, mas buat field 1 dulu, kemudian dicoba untuk insert, kalau sudah bisa, baru ditambah sesuai keinginan mas
gan untuk melihat data hasil registrasinya gmn gan?
ReplyDeletedisini mas http://sqlitebrowser.org/
Deletekak mau tanya saya dibagian DatabaseHelper nya error gimana ya?
ReplyDeletecoba screenshoot kesini logcat errornya mas
Delete#OOT
ReplyDeleteGan caranya buat logout gimana ya?
menggunakan session di sharedpreferences, nanti waktu klik button, sharedpreferences akan menyimpan data dari inputan di username maupun password, jd ketikan session login true, maka otomatis akan langsung ke redirect pada menu home. Sebaliknya, kalau belum ada data tersimpan pada sharedpreferences, maka harus login terlebih dahulu. Nanti saya buatkan tutorialnya
Deletegan mau nanya cepat dong wkwkwk saya punya kasus sama saat di click register "app, not responding/auto close" berikut logcat saya
ReplyDelete--------- beginning of crash
2019-05-27 19:34:37.182 6264-6264/umn.ac.id.logindatabaseindo E/AndroidRuntime: FATAL EXCEPTION: main
Process: umn.ac.id.logindatabaseindo, PID: 6264
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {umn.ac.id.logindatabaseindo/umn.ac.id.logindatabaseindo.Register}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)
at android.app.Activity.startActivityForResult(Activity.java:4225)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
at android.app.Activity.startActivityForResult(Activity.java:4183)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
at android.app.Activity.startActivity(Activity.java:4522)
at android.app.Activity.startActivity(Activity.java:4490)
at umn.ac.id.logindatabaseindo.MainActivity.onButtonClick(MainActivity.java:57)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
antara id sama inisialisasi variabel di java activitynya sudah sama mas? sepertinya itu belum terinisialisasi ke xmlnya, pastikan dlu, trs kalau sudah tinggal misal contoh : btnLogin.setOnClickListener(new View.OnClickListener() {
Delete@Override
public void onClick(View v) {
//do something
}
});
atau bisa taruh kodingan xml dan java ke email saya di pojok kanan bawah
DeleteHalo kak, terimakasih artikelnya... ini sangat membantu saya dalam menyelesaikan tugas kuliah saya. oh ya kak, perkenalkan nama saya Nurhamimah dan jangan lupa kunjungi website kampus saya ISB Atma Luhur
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteHalo kak, terimakasih artikelnya... ini sangat membantu saya dalam menyelesaikan tugas kuliah saya. oh ya kak, perkenalkan nama saya Nurhamimah dan jangan lupa kunjungi website kampus saya ISB Atma Luhur
ReplyDeletesama-sama. Salam kenal kembali dari saya :)
Delete