1. Trang chủ
  2. » Công Nghệ Thông Tin

Xây dựng ứng dụng tra cứu Karaoke

10 136 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 839,76 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thực hành xây dựng ứng dụng XÂY DỰNG ỨNG DỤNG TRA CỨU BÀI HÁT KARAOKEI.Mục tiêuGiúp sinh viên hiểu được quy trình xây dựng một ứng dụng hoàn chỉnhXây dựng một ứng dụng hoàn chỉnh Tra cứu bài hát Karaoke

Trang 1

BÀI 14 PROJECT TỔNG HỢP - XÂY DỰNG ỨNG DỤNG TRA CỨU BÀI

HÁT KARAOKE

I Mục tiêu

- Giúp sinh viên hiểu được quy trình xây dựng một ứng dụng hoàn chỉnh

- Xây dựng một ứng dụng hoàn chỉnh Tra cứu bài hát Karaoke

II Nội dung

- Yêu cầu: Xây dựng ứng dụng tra cứu bài hát Karaoke có giao diện như sau:

- Mô tả: Giao diện gồm có 3 Tab: Tìm kiếm (có thể tìm theo Tên hoặc Mã bài hát), Danh sách bài

hát và Bài hát yêu thích Khi Click vào một bài hát nào đó, Activity chứa thông tin chi tiết bài hát

đó sẽ được gọi, có giao diện như sau:

- Các bước thực hiện:

Bước 1: Copy các hình ảnh cần thiết cho Project vào thư mục Drawable

Trang 2

Bước 2: Copy cơ sở dữ liệu arrirang.sqlite vào thư mục assets

Bước 3: Xây dựng giao diện cho MainActivity trong file activity_main.xml, tham khảo cây

Outline

Bước 4: Xây dựng tài nguyên Layout phục vụ cho costumListView: tạo file Layout mới, đặt tên listitem.xml

Bước 5: Xây dựng giao diện cho Activity activitysub đặt tên là subactivity.xml

Bước 6: Xây dựng Class Item.class chứa các đối tượng trong từng dòng của ListView :

public class Item {

private String maso,tieude;

private Integer thich;

public Item() {

}

public Item(String maso, String tieude, Integer thich) {

this.maso = maso;

this.tieude = tieude; this.thich

= thich;

}

/**

* @return the tieude

*/

public String getTieude() {

return tieude; }

Trang 3

* @param tieude the tieude to set

*/

public void setTieude(String tieude) {

this.tieude = tieude;

}

/**

* @return the maso

*/

public String getMaso() {

return maso; }

/**

* @param maso the maso to set

*/

public void setMaso(String maso) {

this.maso = maso;

}

/**

* @return the thich

*/

public Integer getThich() {

return thich; }

/**

* @param thich the thich to set

*/

public void setThich(Integer thich) {

this.thich = thich;

}

}

Bước 7: Xây dựng Class Costum Adapter đặt tên là myarrayAdapter

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);

final Item myItem = myArray.get(position);

final TextView tieude = (TextView)convertView.findViewById(R.id.txttieude);

tieude.setText(myItem.getTieude());

final TextView maso =(TextView)convertView.findViewById(R.id.txtmaso); maso.setText(myItem.getMaso());

final ImageView btnlike = (ImageView)convertView.findViewById(R.id.btnlike);

final ImageView btnunlike = (ImageView)convertView.findViewById(R.id.btnunlike);

int thich = myItem.getThich();

//Xử lý hiển thị cho ImageButton btnlike btnunlike

Trang 4

if (thich==0) {

btnlike.setVisibility(View.INVISIBLE); //cho ẩn btnlike btnunlike.setVisibility(View.VISIBLE); //cho hiển thị btnunlike } else {

btnunlike.setVisibility(View.INVISIBLE); //cho ẩn btnunlike btnlike.setVisibility(View.VISIBLE); //cho hiện btnlike }

// Xử lý sự kiện khi click vào ImageButton btnlike btnunlike

// Cập nhật trạng thái thich vào CSDL; Thiết lập ImageButton cho phù hợp

btnlike.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

ContentValues values = new ContentValues();

values.put("YEUTHICH", 0);

MainActivity.database.update("ArirangSongList", values,

"MABH=?", new String[]{maso.getText().toString()}); btnlike.setVisibility(View.INVISIBLE);

btnunlike.setVisibility(View.VISIBLE);

} });

btnunlike.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

ContentValues values = new ContentValues();

values.put("YEUTHICH", 1);

MainActivity.database.update("ArirangSongList", values,

"MABH=?", new String[]{maso.getText().toString()}); btnunlike.setVisibility(View.INVISIBLE);

btnlike.setVisibility(View.VISIBLE);

} });

//Xử lý sự kiện khi Click vào mỗi dòng tiều đề bài hát trên Listview

//Chuyển Textview tieude maso sang màu đỏ

//Khai báo Intent, Bundle,lấy maso truyền qua subactivity và gọi activitysub (activitysub xây dựng ở bước sau)

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,activitysub.class); Bundle bundle1 =

new Bundle(); bundle1.putString("maso", maso.getText().toString());

intent1.putExtra("package", bundle1);

context.startActivity(intent1);

} });

return convertView;

}

}

Bước 8: Xây dựng Class activitysub.class //Trong android stu sửa thành

public class activitysub extends Activity{ //extends AppCompatActivity

TextView txtmaso,txtbaihat,txtloibaihat,txttacgia;

ImageButton btnthich,btnkhongthich;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.subactivity);

txtmaso =(TextView)findViewById(R.id.txtmaso);

txtbaihat =(TextView)findViewById(R.id.txtbaihat);

Trang 5

txtloibaihat =(TextView) findViewById(R.id.txtloibaihat);

txttacgia =(TextView)findViewById(R.id.txttacgia);

btnthich =(ImageButton)findViewById(R.id.btnthich);

btnkhongthich = (ImageButton) findViewById(R.id.btnkhongthich);

//Nhận Intent từ myarrayAdapter, lấy dữ liệu khỏi

Bundle Intent callerIntent1 = getIntent();

Bundle backagecaller1 = callerIntent1.getBundleExtra("package");

String maso = backagecaller1.getString("maso");

//Truy vấn dữ liệu từ maso nhận được; Hiển thị dữ liệu Mã bài hát, Tên bài hát, Lời bài

//hát, Tác giả, Trạng thái Thích lên activitysub

Cursor c = MainActivity.database.rawQuery("SELECT * FROM ArirangSongList WHERE MABH LIKE'"+maso+"'", null);

txtmaso.setText(maso);

c.moveToFirst();

txtbaihat.setText(c.getString(2));

txtloibaihat.setText(c.getString(3));

txttacgia.setText(c.getString(4));

if (c.getInt(6)==0) {

btnthich.setVisibility(View.INVISIBLE);

btnkhongthich.setVisibility(View.VISIBLE);

} else {

btnkhongthich.setVisibility(View.INVISIBLE);

btnthich.setVisibility(View.VISIBLE);

} c.close();

//Xử lý sự kiện khi click vào Button btnthich và btnkhongthich

//Cập nhật dữ liệu vào CSDL, thay đổi trạng thái hiển thị cho Button btnthich và

//btnkhongthich

btnthich.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

ContentValues values = new ContentValues();

values.put("YEUTHICH", 0);

MainActivity.database.update("ArirangSongList", values,

"MABH=?", new String[]{txtmaso.getText().toString()});

btnthich.setVisibility(View.INVISIBLE);

btnkhongthich.setVisibility(View.VISIBLE);

} });

btnkhongthich.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

ContentValues values = new ContentValues();

values.put("YEUTHICH", 1);

MainActivity.database.update("ArirangSongList", values,

"MABH=?", new String[]{txtmaso.getText().toString()});

btnkhongthich.setVisibility(View.INVISIBLE);

btnthich.setVisibility(View.VISIBLE);

} });

}

}

Bước 9: Xây dựng Class Mainactivity

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;

Trang 6

TabHost tab;

ImageButton

btnxoa; @Override

protected void onCreate(Bundle savedInstanceState)

{ super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

processCopy(); //Copy CSDL arirang.sqlite //Mở cở sở dữ liệu đã copy Lưu vào biến database database = openOrCreateDatabase("arirang.sqlite", MODE_PRIVATE,

null); addControl(); //Hàm thêm các Controls addTim(); //Xử lý công việc tìm kiếm

addEvents(); //Xử lý sự kiện khi chuyển Tab và các sự kiện khác }

//Hàm khai báo và Add các Controls vào giao diện

//Trên 3 Tab chúng ta có 3 ListView ứng với 3 Danh sách dữ liệu (Dữ liệu tìm kiếm, Danh

//sách bài hát gốc, Danh sách bài hát yêu thích) và Adapter riêng

private void addControl() {

// TODO Auto-generated method stub btnxoa =(ImageButton) findViewById(R.id.btnxoa);

tab=(TabHost)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 =(EditText) findViewById(R.id.edttim);

lv1 = (ListView) findViewById(R.id.lv1);

lv2 =(ListView) findViewById(R.id.lv2); lv3 = (ListView) 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);

myarray2 = new

myarrayAdapter(MainActivity.this, R.layout.listitem,

list2);

myarray3 = 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 OnTabChangeListener() {

@Override

public void onTabChanged(String tabId) {

// TODO Auto-generated method stub

Trang 7

if (tabId.equalsIgnoreCase("t2"))

{ addDanhsach();

Trang 8

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(1),c.getString(2),c.getInt(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) {

list2.add(new Item(c.getString(1),c.getString(2),c.getInt(6))); c.moveToNext();

} c.close();

myarray2.notifyDataSetChanged();

}

//Hàm xử lý tìm kiếm bài hát theo Tiêu đề và Mã số

private void addTim() {

// TODO Auto-generated method stub

//Sự kiện khi Thay đổi Text trong Edittext edttim

edttim.addTextChangedListener(new TextWatcher() {

@Override

public void onTextChanged(CharSequence s, int start, int

before, int

count) { getdata();

}

private void getdata() {

// TODO Auto-generated method stub

String dulieunhap =edttim.getText().toString();

myarray1.clear();

if (!edttim.getText().toString().equals("")) {

Trang 9

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(1),c.getString(2),c.getInt(6)));

c.moveToNext();

} c.close();

}

myarray1.notifyDataSetChanged();

}

int after) {

}

}

@Override

public void beforeTextChanged(CharSequence s, int start, int

count,

@Override

public void afterTextChanged(Editable s) { }

});

//Hàm xử lý Copy CS dữ liệu từ thư mục assets vào hệ thống thư mục cài đặt

private void processCopy() {

//private app

File dbFile = getDatabasePath(DATABASE_NAME);

if (!dbFile.exists()) {

try{CopyDataBaseFromAsset();

Toast.makeText(this, "Copying sucess from Assets folder", Toast.LENGTH_LONG).show();

}

catch (Exception e){

Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();

} }

}

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, 0, length);

}

//Close the streams

myOutput.flush();

myOutput.close();

myInput.close();

Trang 10

} catch (IOException e) {

//TODO Auto-generated catch block e.printStackTrace();

} }

}

Bước 10: Khai báo các tham số trong file AndroidManifest.xml

Bước 11: Tạo máy ảo và chạy chương trình

End

Ngày đăng: 18/12/2021, 01:55

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w