这一学期要结束了,我用Android写了一个音乐播放器,算是给它画上个完美的句号,里面有登录,注册,这个APP还有很多功能没完善,有时间了在加一些料。效果图如下:
登录、注册直接用的是Android自带的SQLite数据库,点击com.exammyapplicationple——>new——>Package写一个Service包,自建的User,DatabaseHelper两个Java类,点击Service——>new——>Service中写,创建UserService,点击Java——>new——>Activity——>Empty Activity建两个登录、注册的Activity。因为Android默认是先启动MainActivity,所以要在AndroidManifest里面更换MainActivity和LoginActivity的位置,换完之后代码截图:
User代码
import java.io.Serializable;
public class User implements Serializable {
private int id;
private String username;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password="
+ password + "]";
}
}
DatabaseHelper代码
package com.example.myapplication.Service;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
static String name="user.db";
static int dbVersion=1;
public DatabaseHelper(Context context){
super(context,name,null,dbVersion);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20))";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
UserService代码
package com.example.myapplication.Service;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.myapplication.User;
public class UserService {
private DatabaseHelper dbHelper;
public UserService(Context context){
dbHelper=new DatabaseHelper(context);
}
public boolean login(String username,String password){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql="select * from user where username=? and password=?";
Cursor cursor=sdb.rawQuery(sql, new String[]{username,password});
if(cursor.moveToFirst()==true){
cursor.close();
return true;
}
return false;
}
public boolean register(User user){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql="insert into user(username,password) values(?,?)";
Object obj[]={user.getUsername(),user.getPassword()};
sdb.execSQL(sql, obj);
return true;
}
}
login页面布局
register
因为要实现登录与注册跳转,引入main_title_bar.xml,代码如下:
login后台
package com.example.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.myapplication.Service.UserService;
public class LoginActivity extends AppCompatActivity {
private EditText username;
private EditText password;
private Button login;
private Button register;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
findViews();
}
private void findViews() {
username=(EditText) findViewById(R.id.et_user_name);
password=(EditText) findViewById(R.id.et_psw);
login=(Button) findViewById(R.id.btn_login);
register=(Button) findViewById(R.id.btn_register);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name=username.getText().toString();
System.out.println(name);
String pass=password.getText().toString();
System.out.println(pass);
Log.i("TAG",name+"_"+pass);
UserService uService=new UserService(LoginActivity.this);
boolean flag=uService.login(name, pass);
if(flag){
Log.i("TAG","登录成功");
Toast.makeText(LoginActivity.this,"登录成功", Toast.LENGTH_LONG).show();
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent);
}else{
Log.i("TAG","登录失败");
Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_LONG).show();
}
}
});
register.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent=new Intent(LoginActivity.this,RegisteredActivity.class);
startActivity(intent);
}
});
}
}
register后台
package com.example.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.*;
import com.example.myapplication.Service.UserService;
public class RegisteredActivity extends AppCompatActivity {
EditText username;
EditText password;
Button register;
TextView iv_back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registered);
findViews();
register.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String name=username.getText().toString().trim();
String pass=password.getText().toString().trim();
Log.i("TAG",name+"_"+pass);
UserService uService=new UserService(RegisteredActivity.this);
User user=new User();
user.setUsername(name);
user.setPassword(pass);
uService.register(user);
Toast.makeText(RegisteredActivity.this, "注册成功", Toast.LENGTH_LONG).show();
}
});
}
private void findViews() {
username=(EditText) findViewById(R.id.et_user_name);
password=(EditText) findViewById(R.id.et_psw);
register=(Button) findViewById(R.id.btn_register);
iv_back = (TextView)findViewById(R.id.tv_back);
iv_back.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(RegisteredActivity.this, LoginActivity.class);
startActivity(intent);
}
});
}
}
因为我这个有三个页面,所以要写3个fragment,main页面布局
//引入fragment
MainActivity后台
package com.example.myapplication;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//创建需要用到的控件的变量
private TextView tv1,tv2,tv3;
private FragmentManager fm;
private FragmentTransaction ft;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定控件
tv1=(TextView)findViewById(R.id.menu1);
tv2=(TextView)findViewById(R.id.menu2);
tv3=(TextView)findViewById(R.id.menu3);
//设置监听器,固定写法
tv1.setOnClickListener(this);
tv2.setOnClickListener(this);
tv3.setOnClickListener(this);
//若是继承FragmentActivity,fm=getFragmentManger();
fm=getSupportFragmentManager();
//fm可以理解为Fragment显示的管理者,ft就是它的改变者
ft=fm.beginTransaction();
//默认情况下就显示frag1
ft.replace(R.id.content,new frag1());
//提交改变的内容
ft.commit();
}
@Override
//控件的点击事件
public void onClick(View v){
ft=fm.beginTransaction();
//切换选项卡
switch (v.getId()){
case R.id.menu1:
ft.replace(R.id.content,new frag1());
break;
case R.id.menu2:
ft.replace(R.id.content,new frag2());
break;
case R.id.menu3:
ft.replace(R.id.content,new frag3());
break;
default:
break;
}
ft.commit();
}
}
Original: https://blog.csdn.net/wind_kite/article/details/125243646
Author: 殇雪蓝冰
Title: 用Android做一个简单的音乐播放器(上)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815717/
转载文章受原作者版权保护。转载请注明原作者出处!