ĐẠI HỌC DUY TÂNTRƯỜNG KHOA HỌC MÁY TÍNHĐỒ ÁN MÔN LẬP TRÌNH ỨNG DỤNG CHO CÁC THIẾT BỊ DI DỘNGĐề tài:XÂY DỰNG ỨNG DỤNG TRA CỨU BÀI HÁT KARAOKEGiảng viên hướng dẫn: Võ Minh ThôngSinh viên t
Trang 1ĐẠI HỌC DUY TÂN TRƯỜNG KHOA HỌC MÁY TÍNH
ĐỒ ÁN MÔN LẬP TRÌNH ỨNG DỤNG CHO CÁC THIẾT BỊ DI DỘNG
Đề tài:
XÂY DỰNG ỨNG DỤNG TRA CỨU BÀI HÁT KARAOKE
Giảng viên hướng dẫn: Võ Minh Thông Sinh viên thực hiện : Nguyễn Văn Lưu - 48321
Đà Nẵng ,tháng 12 năm 2023
Trang 21 Tổng quan giao diện
- Về giao diện chính, ứng dụng có 3 tab có thể chuyển qua lại.
Tab 1: Tìm kiếm (có thể tìm theo Tên hoặc Mã bài hát)
Trang 3Tab 2: Danh sách bài hát
Trang 4Tab 3: Bài hát yêu thích
Trang 51 Code cụ thể:
- File: activity_main.xml
- File: activity_sub.xml
Trang 6- File: Listitem.xml
- File: Item.class
Trang 7- File: myarrayAdapter.java
- public class myarrayAdapter extends ArrayAdapter<Item> { Activity context = null;
ArrayList<Item> myArray = null;
int LayoutId;
public myarrayAdapter(Activity context, int
LayoutId,ArrayList<Item>arr) {
super(context, LayoutId arr), ;
// TODO Auto-generated constructor stub
this.context = context;
this.LayoutId = LayoutId;
this.myArray = arr;
}
@Override
public View getView(int position View convertView ViewGroup , ,
parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = context.getLayoutInflater(); convertView = inflater.inflate(LayoutId, null ;)
Item myItem = myArray.get(position);
TextView tieude = convertView.findViewById(R.id.txttieude); tieude.setText(myItem.getTieude());
TextView maso = convertView.findViewById(R.id.txtmaso); maso.setText(myItem.getMaso());
ImageButton btnlike =
convertView.findViewById(R.id.btnlike_item);
if (myItem.getThich()==1) {
btnlike.setImageResource(R.drawable.love);
else } {
btnlike.setImageResource(R.drawable.unlike);
Trang 8public void onClick(View view) {
int thich = myItem.getThich();
ContentValues values = new ContentValues();
if (thich == ) {0
btnlike.setImageResource(R.drawable.love); thich = 1;
else } {
btnlike.setImageResource(R.drawable.unlike); thich = 0;
}
//Cập nhật lại trạng thái thích cho mảng
myItem.setThich(thich);
values.put("YEUTHICH", thich);
//Cập nhật vào cơ sở dữ liệu
MainActivity.database.update("ArirangSongList", values, "MABH=?", new String[]{myItem.getMaso()}); }
});
tieude.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
tieude.setTextColor(Color.RED);
maso.setTextColor(Color.RED);
Intent intent1 = new Intent(context, SubActivity.class); Bundle bundle1 = new Bundle();
bundle1.putString("maso", myItem.getMaso()); intent1.putExtra("package", bundle1);
context.startActivity(intent1);
}
});
return convertView;
}
}
- File: MainActivity.java
- package com.example.karaoke;
import androidx.appcompat.app.AppCompatActivity; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.Toast;
Trang 9import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
String DB_PATH_SUFFIX = "/databases/";
public static SQLiteDatabase database=null;
public static String DATABASE_NAME="arirang.sqlite";
EditText edttim;
ListView lv1 lv2 lv3, , ;
ArrayList<Item> list1 list2 list3, , ;
myarrayAdapter myarray1 myarray2 myarray3, , ;
TabHost tab;
ImageButton btnxoa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
processCopy();
database = openOrCreateDatabase("arirang.sqlite", MODE_PRIVATE, null ;)
addControl();
addTim();
addEvents(); //Xử lý sự kiện khi chuyển Tab và các sự kiện khác }
private void addControl() {
// TODO Auto-generated method stub
btnxoa = findViewById(R.id.btnxoa);
tab = findViewById(R.id.tabhost);
tab.setup();
TabHost.TabSpec tab1=tab.newTabSpec("t1");
tab1.setContent(R.id.tab1);
tab1.setIndicator( getResources().getDrawable(R.drawable."", search)); tab.addTab(tab1);
TabHost.TabSpec tab2=tab.newTabSpec("t2");
tab2.setContent(R.id.tab2);
tab2.setIndicator( getResources().getDrawable(R.drawable."", list)); tab.addTab(tab2);
TabHost.TabSpec tab3=tab.newTabSpec("t3");
tab3.setContent(R.id.tab3);
tab3.setIndicator( getResources().getDrawable(R.drawable."", favourite)); tab.addTab(tab3);
edttim = findViewById(R.id.edttim);
lv1 = findViewById(R.id.lv1);
lv2 = findViewById(R.id.lv2);
lv3 = findViewById(R.id.lv3);
list1 =new ArrayList<Item>();
list2 =new ArrayList<Item>();
list3 =new ArrayList<Item>();
myarray1 = new myarrayAdapter(MainActivity.this,
R.layout.listitem, list1);
Trang 10myarray3 = new myarrayAdapter(MainActivity.this,
R.layout.listitem, list3);
lv1.setAdapter(myarray1);
lv2.setAdapter(myarray2);
lv3.setAdapter(myarray3);
}
//Xử lý sự kiện khi chuyển qua lại giữa các Tab Danh sách và Yêu Thích
private void addEvents() {
// TODO Auto-generated method stub
tab.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
if (tabId.equalsIgnoreCase("t2")) {
addDanhsach();
}
if (tabId.equalsIgnoreCase("t3")) {
addYeuthich();
}
}
});
// Sự kiện khi Click vào Button xóa trên Tab Tìm kiếm
btnxoa.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
edttim.setText( )"";
}
});
}
//Hàm thêm bài hát vào Listview trên Tab Yêu thích
private void addYeuthich() {
// TODO Auto-generated method stub
myarray3.clear();
Cursor c = database.rawQuery("SELECT * FROM ArirangSongList WHERE YEUTHICH = 1", null ;)
c.moveToFirst();
while(c.isAfterLast()==false)
{
list3.add(new
Item(c.getString( ) c.getString( ) c.getInt( )))1, 2, 6 ;
c.moveToNext();
}
c.close();
myarray3.notifyDataSetChanged();
}
// Hàm thêm bài hát vào Listview trên Tab Danh sách bài hát private void addDanhsach() {
// TODO Auto-generated method stub
myarray2.clear();
Cursor c = database.rawQuery("SELECT * FROM ArirangSongList", null ;)
c.moveToFirst();
while(c.isAfterLast()==false)
Trang 11Item(c.getString( ) c.getString( ) c.getInt( )))1, 2, 6 ;
c.moveToNext();
}
c.close();
myarray2.notifyDataSetChanged();
}
private void addTim() {
// TODO Auto-generated method stub
edttim.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int
count, int after) {
getData();
}
@Override
public void onTextChanged(CharSequence s, int start, int
before, int count) {
}
private void getData(){
String dulieunhap =edttim.getText().toString();
myarray1.clear();
if (!edttim.getText().toString().equals("")) {
Cursor c = database.rawQuery("SELECT * FROM
ArirangSongList WHERE TENBH1 LIKE '"+"%"+dulieunhap+"%"+"' OR MABH LIKE '" "%"+ +dulieunhap+"%" "'"+ , null); c.moveToFirst();
while(c.isAfterLast()==false)
{
list1.add(new
Item(c.getString( ) c.getString( ) c.getInt( )))1, 2, 6 ;
c.moveToNext();
}
c.close();
}
myarray1.notifyDataSetChanged();
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
private void processCopy() {
File dbFile = getDatabasePath(DATABASE_NAME);
if (!dbFile.exists())
{
try{CopyDataBaseFromAsset();
Toast.makeText(this, "Cap nhat du lieu thanh cong!",
Toast.LENGTH_LONG).show();
}
catch (Exception e){
Trang 12}
}
}
private String getDatabasePath() {
return getApplicationInfo().dataDir DB_PATH_SUFFIX+ + DATABASE_NAME;
}
public void CopyDataBaseFromAsset() {
// TODO Auto-generated method stub
try {
InputStream myInput;
myInput = getAssets().open(DATABASE_NAME); // Path to the just created empty db
String outFileName = getDatabasePath();
//if the path doesn't exist first, create it
File f = new File(getApplicationInfo().dataDir +
DB_PATH_SUFFIX);
if (!f.exists())
f.mkdir();
//Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > )0
{
myOutput.write(buffer, , 0length);
}
//Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
catch } (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}