diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000..f022c20 --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,611 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index adb5d39..7812a19 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -12,6 +12,6 @@ - + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..aba6d4e --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 350da04..4c2a95f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,6 +34,9 @@ dependencies { implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation 'androidx.wear.tiles:tiles-material:1.1.0-alpha04' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 114e752..3f37aea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,13 +13,15 @@ android:theme="@style/AppTheme" tools:targetApi="31"> + + + android:name=".activity.IdolTagMainActivity" + android:exported="true" /> @@ -29,11 +31,13 @@ + + diff --git a/app/src/main/java/com/example/myapplication/LoginActivity.java b/app/src/main/java/com/example/myapplication/LoginActivity.java deleted file mode 100644 index 1a54171..0000000 --- a/app/src/main/java/com/example/myapplication/LoginActivity.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.example.myapplication; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.AlertDialog; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -import androidx.appcompat.app.AppCompatActivity; - -public class LoginActivity extends AppCompatActivity implements View.OnClickListener{ - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.user_login); - findViewById(R.id.login).setOnClickListener(this); //给login图标添加监听器 - findViewById(R.id.rigster).setOnClickListener(this); - } - - - @Override - public void onClick(View view) { - if(view.getId() == R.id.rigster){ - startActivity(new Intent(this,RigsterActivity.class)); - }else if(view.getId() == R.id.login){ - //验证密码功能待补充 - Intent intent = new Intent(this,MineActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(intent); - } - } -} diff --git a/app/src/main/java/com/example/myapplication/MainActivity.java b/app/src/main/java/com/example/myapplication/MainActivity.java new file mode 100644 index 0000000..e640aaf --- /dev/null +++ b/app/src/main/java/com/example/myapplication/MainActivity.java @@ -0,0 +1,14 @@ +package com.example.myapplication; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/IdolTagMainActivity.java b/app/src/main/java/com/example/myapplication/activity/IdolTagMainActivity.java similarity index 92% rename from app/src/main/java/com/example/myapplication/IdolTagMainActivity.java rename to app/src/main/java/com/example/myapplication/activity/IdolTagMainActivity.java index aeaff2f..7c42516 100644 --- a/app/src/main/java/com/example/myapplication/IdolTagMainActivity.java +++ b/app/src/main/java/com/example/myapplication/activity/IdolTagMainActivity.java @@ -1,4 +1,4 @@ -package com.example.myapplication; +package com.example.myapplication.activity; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; @@ -6,10 +6,12 @@ import androidx.fragment.app.FragmentTransaction; import android.os.Bundle; import android.view.View; +import android.view.WindowManager; import android.widget.AdapterView; import android.widget.FrameLayout; import android.widget.ListView; +import com.example.myapplication.R; import com.example.myapplication.adapter.IdolAdapter; import com.example.myapplication.bean.Tag; import com.example.myapplication.fragment.ShowFragment; @@ -27,6 +29,8 @@ public class IdolTagMainActivity extends AppCompatActivity implements AdapterVie @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getSupportActionBar().hide(); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_idol_tag_main); initView(); initDate(); diff --git a/app/src/main/java/com/example/myapplication/activity/LoginActivity.java b/app/src/main/java/com/example/myapplication/activity/LoginActivity.java new file mode 100644 index 0000000..404afb0 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/activity/LoginActivity.java @@ -0,0 +1,77 @@ +package com.example.myapplication.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.WindowManager; +import android.widget.EditText; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.myapplication.R; +import com.example.myapplication.bean.User; +import com.example.myapplication.fragment.StarDatabase; + +import java.util.List; + +public class LoginActivity extends AppCompatActivity implements View.OnClickListener { + + //用于验证用户名密码是否在数据库 + private EditText usernameEdit,passEdit; + + StarDatabase mHelper; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //隐藏标题栏 + getSupportActionBar().hide(); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + + setContentView(R.layout.user_login); + findViewById(R.id.login).setOnClickListener(this); //给login图标添加监听器 + findViewById(R.id.rigster).setOnClickListener(this); + } + + protected void onStart(){ + super.onStart(); + //获得数据库帮助器的实例 + mHelper = StarDatabase.getInstance(this); + //打开读写链接 + mHelper.openWirteLink(); + mHelper.openReadLink(); + } + + protected void onStop(){ + super.onStop(); + //关闭数据库连接 + //mHelper.closeLink(); + } + + + @Override + public void onClick(View view) { + if (view.getId() == R.id.rigster) { + startActivity(new Intent(this, RigsterActivity.class)); + } else if (view.getId() == R.id.login) { + + usernameEdit = findViewById(R.id.username); + passEdit = findViewById(R.id.password); + findViewById(R.id.username).setOnClickListener(this); + findViewById(R.id.password).setOnClickListener(this); + + //查询数据库,根据用户名,看是否有相应数据 + String username = usernameEdit.getText().toString(); + String password = passEdit.getText().toString(); + List list = mHelper.queryByName(username); + //再判断密码是否正确 + if(list.get(0).password.equals(password)){ + Toast.makeText(LoginActivity.this,"登录成功",Toast.LENGTH_SHORT).show(); + startActivity(new Intent(this, MineActivity.class)); + }else { + Toast.makeText(LoginActivity.this,"用户名不存在或密码错误",Toast.LENGTH_SHORT).show(); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/MineActivity.java b/app/src/main/java/com/example/myapplication/activity/MineActivity.java similarity index 64% rename from app/src/main/java/com/example/myapplication/MineActivity.java rename to app/src/main/java/com/example/myapplication/activity/MineActivity.java index 77508aa..408dd0f 100644 --- a/app/src/main/java/com/example/myapplication/MineActivity.java +++ b/app/src/main/java/com/example/myapplication/activity/MineActivity.java @@ -1,17 +1,22 @@ -package com.example.myapplication; +package com.example.myapplication.activity; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; -import android.widget.TextView; +import android.view.WindowManager; + +import com.example.myapplication.R; +import com.example.myapplication.activity.IdolTagMainActivity; public class MineActivity extends AppCompatActivity implements View.OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getSupportActionBar().hide(); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.mine); findViewById(R.id.vote).setOnClickListener(this); findViewById(R.id.outload).setOnClickListener(this); @@ -20,7 +25,7 @@ public class MineActivity extends AppCompatActivity implements View.OnClickListe @Override public void onClick(View view) { if(view.getId() == R.id.vote){ - startActivity(new Intent(this,IdolTagMainActivity.class)); + startActivity(new Intent(this, IdolTagMainActivity.class)); } if(view.getId() == R.id.outload){ //待修改,因為這樣數據還在 diff --git a/app/src/main/java/com/example/myapplication/RigsterActivity.java b/app/src/main/java/com/example/myapplication/activity/RigsterActivity.java similarity index 75% rename from app/src/main/java/com/example/myapplication/RigsterActivity.java rename to app/src/main/java/com/example/myapplication/activity/RigsterActivity.java index 88cb43d..e64fd46 100644 --- a/app/src/main/java/com/example/myapplication/RigsterActivity.java +++ b/app/src/main/java/com/example/myapplication/activity/RigsterActivity.java @@ -1,11 +1,12 @@ -package com.example.myapplication; +package com.example.myapplication.activity; -import android.app.Activity; -import android.app.AppComponentFactory; +import android.content.Context; import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.os.Bundle; import android.view.View; +import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.RadioGroup; @@ -14,6 +15,9 @@ import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.myapplication.R; +import com.example.myapplication.bean.User; +import com.example.myapplication.fragment.StarDatabase; import com.lljjcoder.citypickerview.widget.CityPicker; public class RigsterActivity extends AppCompatActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener { @@ -24,11 +28,16 @@ public class RigsterActivity extends AppCompatActivity implements View.OnClickLi private RadioGroup sexGroup; private String sexStr = "男"; + StarDatabase mHelper; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getSupportActionBar().hide(); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.user_rigster); init(); + } private void init(){ @@ -41,12 +50,34 @@ public class RigsterActivity extends AppCompatActivity implements View.OnClickLi regButton.setOnClickListener(this); sexGroup = findViewById(R.id.sex); sexGroup.setOnCheckedChangeListener(this); + + findViewById(R.id.rig_username).setOnClickListener(this); + findViewById(R.id.rig_password).setOnClickListener(this); + findViewById(R.id.re_password).setOnClickListener(this); + findViewById(R.id.rig_man).setOnClickListener(this); + findViewById(R.id.ri_province).setOnClickListener(this); + + } + protected void onStart(){ + super.onStart(); + //获得数据库帮助器的实例 + mHelper = StarDatabase.getInstance(this); + //打开读写链接 + mHelper.openWirteLink(); + mHelper.openReadLink(); + } + protected void onStop(){ + super.onStop(); + //关闭数据库连接 + mHelper.closeLink(); + } @Override public void onClick(View v) { + switch(v.getId()){ case R.id.ri_province: initCityPicker(); @@ -59,7 +90,9 @@ public class RigsterActivity extends AppCompatActivity implements View.OnClickLi } } -// + + + //初始化城市选择器 private void initCityPicker() { cityPicker = new CityPicker.Builder(RigsterActivity.this) @@ -99,11 +132,12 @@ public class RigsterActivity extends AppCompatActivity implements View.OnClickLi //注册验证 public void validateRegister(){ - Intent intent = new Intent(RigsterActivity.this,LoginActivity.class); + Intent intent = new Intent(RigsterActivity.this, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); String username = usernameEdit.getText().toString(); String password = passEdit.getText().toString(); String surePassword = surePasswordEdit.getText().toString(); + //String sex = ; String city = cityText.getText().toString(); //判断两次密码是否一致 if(password.equals(surePassword)){ @@ -115,7 +149,12 @@ public class RigsterActivity extends AppCompatActivity implements View.OnClickLi bundle.putString("sex", sexStr); bundle.putString("city", city); intent.putExtras(bundle); - startActivity(intent); + + mHelper.insert(new User(username,password,sexStr,city)); + + Toast.makeText(RigsterActivity.this,"注册成功",Toast.LENGTH_SHORT).show(); + + startActivity(intent); } else { Toast.makeText(RigsterActivity.this, "请选择地址", Toast.LENGTH_SHORT).show(); @@ -128,7 +167,6 @@ public class RigsterActivity extends AppCompatActivity implements View.OnClickLi Toast.makeText(RigsterActivity.this,"两次密码输入不一致", Toast.LENGTH_SHORT).show(); } - Toast.makeText(RigsterActivity.this,"注册成功",Toast.LENGTH_SHORT).show(); } @Override diff --git a/app/src/main/java/com/example/myapplication/bean/User.java b/app/src/main/java/com/example/myapplication/bean/User.java new file mode 100644 index 0000000..c66bee3 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/bean/User.java @@ -0,0 +1,30 @@ +package com.example.myapplication.bean; + +public class User { + + public int id;//序号 + public String username; //用户名 + public String password; //密码 + public String sex;//性别 + public String address;//地址 + + public User(){} + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", username='" + username + '\'' + + ", password='" + password + '\'' + + ", sex='" + sex + '\'' + + ", address='" + address + '\'' + + '}'; + } + + public User(String username, String password, String sex, String address) { + this.username = username; + this.password = password; + this.sex = sex; + this.address = address; + } +} diff --git a/app/src/main/java/com/example/myapplication/fragment/StarDatabase.java b/app/src/main/java/com/example/myapplication/fragment/StarDatabase.java new file mode 100644 index 0000000..a6b8a10 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/fragment/StarDatabase.java @@ -0,0 +1,150 @@ +package com.example.myapplication.fragment; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +import com.example.myapplication.bean.User; + +import java.util.ArrayList; +import java.util.List; + +public class StarDatabase extends SQLiteOpenHelper { + private static final String DB_NAME = "user.db"; //数据库的名称 + private static final String TABLE_NAME = "user_info"; //表的名称 + + private static final int DB_VERSION = 2; //版本号 + private static StarDatabase mHelper = null; + + private SQLiteDatabase mRDB = null; //读 + private SQLiteDatabase mWDB = null; //写 + + + //提供子类的构造方法,在里面调用父类的构造方法 + private StarDatabase(Context context){ + super(context, DB_NAME, null, DB_VERSION); + } + + //利用单实例模式获取数据库帮助其的唯一实例 + public static StarDatabase getInstance(Context context){ + if(mHelper == null){ + mHelper = new StarDatabase(context); + } + return mHelper; + } + + //打开数据库的读连接 + public SQLiteDatabase openReadLink(){ + //为了不重复打开,进行判断 + if(mRDB == null || !mRDB.isOpen()){ + mRDB = mHelper.getReadableDatabase(); + } + return mRDB; + } + + //打开数据库的写连接 + public SQLiteDatabase openWirteLink(){ + //为了不重复打开,进行判断 + if(mWDB == null || !mWDB.isOpen()){ + mWDB = mHelper.getWritableDatabase(); + } + return mWDB; + } + + //关闭数据库连接 + public void closeLink(){ + if(mRDB != null && mRDB.isOpen()){ + mRDB.close(); + mRDB = null; //方便gc回收 + } + } + + + //用来创建数据库,里面写SQL语句,建表 + @Override + public void onCreate(SQLiteDatabase db) { + String sql = "CREATE TABLE IF NOT EXISTS "+ TABLE_NAME + " (" + + " _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + + " username VARCHAR NOT NULL," + + " password VARCHAR NOT NULL," + + " sex VARCHAR NOT NULL," + + " address VARCHAR NOT NULL);"; + db.execSQL(sql); + } + + + //进行版本更新 + @Override + public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { + + } + + + //插入数据 + public long insert(User user){ + ContentValues values = new ContentValues(); + values.put("username",user.username); + values.put("password",user.password); + values.put("sex",user.sex); + values.put("address",user.address); + return mWDB.insert(TABLE_NAME,null,values); + } + + //删除数据 + public long deleteByName(String name){ + //删除所有数据 +// mWDB.delete(TABLE_NAME,"1=1",null); + //根据名字来删除数据 + return mWDB.delete(TABLE_NAME,"username=?", new String[]{name}); + } + + + //修改数据 + public long update(User user){ + ContentValues values = new ContentValues(); + values.put("username",user.username); + values.put("password",user.password); + values.put("sex",user.sex); + values.put("address",user.address); + return mWDB.update(TABLE_NAME,values,"username=?",new String[]{user.username}); + } + + //查询所有数据 + public List queryAll(){ + List list = new ArrayList<>(); + //Cursor为游标,一行一行读取表格的数据 + Cursor cursor = mRDB.query(TABLE_NAME,null,null,null,null,null,null); + // + while(cursor.moveToNext()){ + User user = new User(); + user.id = cursor.getInt(0); + user.username = cursor.getString(1); + user.password = cursor.getString(2); + user.sex = cursor.getString(3); + user.address = cursor.getString(4); + list.add(user); + } + return list; + } + + //根据用户名查询数据 + public List queryByName(String name){ + List list = new ArrayList<>(); + //Cursor为游标,一行一行读取表格的数据 + Cursor cursor = mRDB.query(TABLE_NAME,null,"username=?",new String[] {name},null,null,null); + + while(cursor.moveToNext()){ + User user = new User(); + user.id = cursor.getInt(0); + user.username = cursor.getString(1); + user.password = cursor.getString(2); + user.sex = cursor.getString(3); + user.address = cursor.getString(4); + list.add(user); + } + return list; + } +} diff --git a/app/src/main/res/layout/activity_idol_tag_main.xml b/app/src/main/res/layout/activity_idol_tag_main.xml index 45525a2..04e33fc 100644 --- a/app/src/main/res/layout/activity_idol_tag_main.xml +++ b/app/src/main/res/layout/activity_idol_tag_main.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".IdolTagMainActivity" + tools:context=".activity.IdolTagMainActivity" android:orientation="horizontal"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mine.xml b/app/src/main/res/layout/mine.xml index 98c8f15..1db9e94 100644 --- a/app/src/main/res/layout/mine.xml +++ b/app/src/main/res/layout/mine.xml @@ -35,7 +35,7 @@ android:src="@drawable/username" android:background="@color/white"/> + + android:textAlignment="center" /> + + + \ No newline at end of file