From 9ef7db3e1112d86a33f7306addf950c81d475836 Mon Sep 17 00:00:00 2001
From: zhaojiewen <2421668804@qq.com>
Date: Tue, 18 Apr 2023 11:15:13 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E9=AA=8C=E5=9B=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sqlite/.gitignore | 15 ++
sqlite/.idea/.gitignore | 3 +
sqlite/.idea/compiler.xml | 6 +
sqlite/.idea/deploymentTargetDropDown.xml | 17 ++
sqlite/.idea/gradle.xml | 19 ++
sqlite/.idea/misc.xml | 10 +
sqlite/app/.gitignore | 1 +
sqlite/app/build.gradle | 40 +++
sqlite/app/proguard-rules.pro | 21 ++
.../sqlite/ExampleInstrumentedTest.java | 26 ++
sqlite/app/src/main/AndroidManifest.xml | 28 +++
.../java/com/example/sqlite/MainActivity.java | 79 ++++++
.../sqlite/activity/CategoryActivity.java | 90 +++++++
.../sqlite/activity/IndexActivity.java | 120 +++++++++
.../sqlite/activity/RegisterActivity.java | 168 +++++++++++++
.../example/sqlite/activity/UserActivity.java | 66 +++++
.../com/example/sqlite/adapter/Adapter.java | 69 ++++++
.../sqlite/adapter/ProductAdapter.java | 69 ++++++
.../sqlite/dataoperation/OrangeDatabase.java | 68 +++++
.../com/example/sqlite/entity/OrangeUser.java | 59 +++++
.../com/example/sqlite/entity/Product.java | 43 ++++
.../sqlite/fragment/IndexFragment.java | 109 ++++++++
.../sqlite/fragment/PearsonFragment.java | 64 +++++
.../sqlite/fragment/ProductFragment.java | 21 ++
.../sqlite/fragment/SetDetailFragment.java | 53 ++++
.../sqlite/fragment/ShoppingCartFragment.java | 21 ++
.../drawable-v24/ic_launcher_foreground.xml | 30 +++
sqlite/app/src/main/res/drawable/address.png | Bin 0 -> 1028 bytes
sqlite/app/src/main/res/drawable/apple.png | Bin 0 -> 1988 bytes
sqlite/app/src/main/res/drawable/applep.png | Bin 0 -> 8824 bytes
.../app/src/main/res/drawable/arrow_down.png | Bin 0 -> 368 bytes
.../app/src/main/res/drawable/arrow_left.png | Bin 0 -> 231 bytes
.../app/src/main/res/drawable/arrow_right.png | Bin 0 -> 233 bytes
.../src/main/res/drawable/button_login.xml | 15 ++
.../src/main/res/drawable/button_register.xml | 14 ++
sqlite/app/src/main/res/drawable/chengzi.png | Bin 0 -> 1666 bytes
sqlite/app/src/main/res/drawable/city.png | Bin 0 -> 790 bytes
.../res/drawable/ic_launcher_background.xml | 170 +++++++++++++
.../src/main/res/drawable/imformationimg.png | Bin 0 -> 170815 bytes
sqlite/app/src/main/res/drawable/index.png | Bin 0 -> 1272 bytes
.../app/src/main/res/drawable/index_menu.xml | 16 ++
sqlite/app/src/main/res/drawable/juzi.png | Bin 0 -> 1898 bytes
sqlite/app/src/main/res/drawable/juzip.png | Bin 0 -> 8150 bytes
sqlite/app/src/main/res/drawable/lemon.png | Bin 0 -> 2954 bytes
sqlite/app/src/main/res/drawable/lemonp.png | Bin 0 -> 10312 bytes
sqlite/app/src/main/res/drawable/li.png | Bin 0 -> 1862 bytes
sqlite/app/src/main/res/drawable/loginimg.png | Bin 0 -> 796290 bytes
sqlite/app/src/main/res/drawable/mangguo.png | Bin 0 -> 2192 bytes
sqlite/app/src/main/res/drawable/orange.png | Bin 0 -> 6129 bytes
sqlite/app/src/main/res/drawable/password.png | Bin 0 -> 1462 bytes
sqlite/app/src/main/res/drawable/pearson.png | Bin 0 -> 3302 bytes
sqlite/app/src/main/res/drawable/product.png | Bin 0 -> 1315 bytes
.../app/src/main/res/drawable/registerimg.png | Bin 0 -> 2306753 bytes
sqlite/app/src/main/res/drawable/search.png | Bin 0 -> 1299 bytes
sqlite/app/src/main/res/drawable/setting.png | Bin 0 -> 1101 bytes
sqlite/app/src/main/res/drawable/sex.png | Bin 0 -> 1509 bytes
.../src/main/res/drawable/shoppingcart.png | Bin 0 -> 1155 bytes
sqlite/app/src/main/res/drawable/shuiguo.png | Bin 0 -> 1212 bytes
.../res/drawable/spinner_drop_down_shape.xml | 16 ++
.../src/main/res/drawable/sure_apssword.png | Bin 0 -> 799 bytes
.../src/main/res/drawable/tab_menu_text.xml | 5 +
sqlite/app/src/main/res/drawable/user.png | Bin 0 -> 2173 bytes
.../src/main/res/drawable/user_account.png | Bin 0 -> 1045 bytes
.../src/main/res/drawable/user_general.png | Bin 0 -> 402 bytes
sqlite/app/src/main/res/drawable/user_pay.png | Bin 0 -> 554 bytes
sqlite/app/src/main/res/drawable/user_sex.png | Bin 0 -> 1123 bytes
sqlite/app/src/main/res/drawable/xigua.png | Bin 0 -> 2622 bytes
sqlite/app/src/main/res/drawable/xiguap.png | Bin 0 -> 6605 bytes
sqlite/app/src/main/res/drawable/youzi.png | Bin 0 -> 1798 bytes
sqlite/app/src/main/res/drawable/youzip.png | Bin 0 -> 9547 bytes
.../app/src/main/res/layout/activity_main.xml | 29 +++
.../src/main/res/layout/category_detail.xml | 16 ++
.../main/res/layout/category_list_item.xml | 14 ++
.../res/layout/categoty_detail_content.xml | 32 +++
.../src/main/res/layout/content_category.xml | 52 ++++
.../app/src/main/res/layout/content_index.xml | 221 +++++++++++++++++
.../app/src/main/res/layout/content_nav.xml | 118 +++++++++
.../src/main/res/layout/content_product.xml | 11 +
.../src/main/res/layout/content_shopping.xml | 11 +
.../app/src/main/res/layout/content_user.xml | 234 ++++++++++++++++++
.../app/src/main/res/layout/index_famous.xml | 55 ++++
sqlite/app/src/main/res/layout/user_login.xml | 93 +++++++
.../app/src/main/res/layout/user_register.xml | 163 ++++++++++++
.../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +
.../mipmap-anydpi-v26/ic_launcher_round.xml | 5 +
.../res/mipmap-anydpi-v33/ic_launcher.xml | 6 +
.../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes
.../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes
.../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes
.../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes
.../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes
.../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes
.../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes
.../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes
.../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes
.../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes
.../app/src/main/res/values-night/themes.xml | 16 ++
sqlite/app/src/main/res/values/colors.xml | 10 +
sqlite/app/src/main/res/values/strings.xml | 3 +
sqlite/app/src/main/res/values/themes.xml | 16 ++
sqlite/app/src/main/res/xml/backup_rules.xml | 13 +
.../main/res/xml/data_extraction_rules.xml | 19 ++
.../com/example/sqlite/ExampleUnitTest.java | 17 ++
sqlite/build.gradle | 5 +
sqlite/gradle.properties | 22 ++
sqlite/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes
.../gradle/wrapper/gradle-wrapper.properties | 6 +
sqlite/gradlew | 185 ++++++++++++++
sqlite/gradlew.bat | 89 +++++++
sqlite/settings.gradle | 21 ++
110 files changed, 3038 insertions(+)
create mode 100644 sqlite/.gitignore
create mode 100644 sqlite/.idea/.gitignore
create mode 100644 sqlite/.idea/compiler.xml
create mode 100644 sqlite/.idea/deploymentTargetDropDown.xml
create mode 100644 sqlite/.idea/gradle.xml
create mode 100644 sqlite/.idea/misc.xml
create mode 100644 sqlite/app/.gitignore
create mode 100644 sqlite/app/build.gradle
create mode 100644 sqlite/app/proguard-rules.pro
create mode 100644 sqlite/app/src/androidTest/java/com/example/sqlite/ExampleInstrumentedTest.java
create mode 100644 sqlite/app/src/main/AndroidManifest.xml
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/MainActivity.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/activity/CategoryActivity.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/activity/IndexActivity.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/activity/RegisterActivity.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/activity/UserActivity.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/adapter/Adapter.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/adapter/ProductAdapter.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/dataoperation/OrangeDatabase.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/entity/OrangeUser.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/entity/Product.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/fragment/IndexFragment.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/fragment/PearsonFragment.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/fragment/ProductFragment.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/fragment/SetDetailFragment.java
create mode 100644 sqlite/app/src/main/java/com/example/sqlite/fragment/ShoppingCartFragment.java
create mode 100644 sqlite/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
create mode 100644 sqlite/app/src/main/res/drawable/address.png
create mode 100644 sqlite/app/src/main/res/drawable/apple.png
create mode 100644 sqlite/app/src/main/res/drawable/applep.png
create mode 100644 sqlite/app/src/main/res/drawable/arrow_down.png
create mode 100644 sqlite/app/src/main/res/drawable/arrow_left.png
create mode 100644 sqlite/app/src/main/res/drawable/arrow_right.png
create mode 100644 sqlite/app/src/main/res/drawable/button_login.xml
create mode 100644 sqlite/app/src/main/res/drawable/button_register.xml
create mode 100644 sqlite/app/src/main/res/drawable/chengzi.png
create mode 100644 sqlite/app/src/main/res/drawable/city.png
create mode 100644 sqlite/app/src/main/res/drawable/ic_launcher_background.xml
create mode 100644 sqlite/app/src/main/res/drawable/imformationimg.png
create mode 100644 sqlite/app/src/main/res/drawable/index.png
create mode 100644 sqlite/app/src/main/res/drawable/index_menu.xml
create mode 100644 sqlite/app/src/main/res/drawable/juzi.png
create mode 100644 sqlite/app/src/main/res/drawable/juzip.png
create mode 100644 sqlite/app/src/main/res/drawable/lemon.png
create mode 100644 sqlite/app/src/main/res/drawable/lemonp.png
create mode 100644 sqlite/app/src/main/res/drawable/li.png
create mode 100644 sqlite/app/src/main/res/drawable/loginimg.png
create mode 100644 sqlite/app/src/main/res/drawable/mangguo.png
create mode 100644 sqlite/app/src/main/res/drawable/orange.png
create mode 100644 sqlite/app/src/main/res/drawable/password.png
create mode 100644 sqlite/app/src/main/res/drawable/pearson.png
create mode 100644 sqlite/app/src/main/res/drawable/product.png
create mode 100644 sqlite/app/src/main/res/drawable/registerimg.png
create mode 100644 sqlite/app/src/main/res/drawable/search.png
create mode 100644 sqlite/app/src/main/res/drawable/setting.png
create mode 100644 sqlite/app/src/main/res/drawable/sex.png
create mode 100644 sqlite/app/src/main/res/drawable/shoppingcart.png
create mode 100644 sqlite/app/src/main/res/drawable/shuiguo.png
create mode 100644 sqlite/app/src/main/res/drawable/spinner_drop_down_shape.xml
create mode 100644 sqlite/app/src/main/res/drawable/sure_apssword.png
create mode 100644 sqlite/app/src/main/res/drawable/tab_menu_text.xml
create mode 100644 sqlite/app/src/main/res/drawable/user.png
create mode 100644 sqlite/app/src/main/res/drawable/user_account.png
create mode 100644 sqlite/app/src/main/res/drawable/user_general.png
create mode 100644 sqlite/app/src/main/res/drawable/user_pay.png
create mode 100644 sqlite/app/src/main/res/drawable/user_sex.png
create mode 100644 sqlite/app/src/main/res/drawable/xigua.png
create mode 100644 sqlite/app/src/main/res/drawable/xiguap.png
create mode 100644 sqlite/app/src/main/res/drawable/youzi.png
create mode 100644 sqlite/app/src/main/res/drawable/youzip.png
create mode 100644 sqlite/app/src/main/res/layout/activity_main.xml
create mode 100644 sqlite/app/src/main/res/layout/category_detail.xml
create mode 100644 sqlite/app/src/main/res/layout/category_list_item.xml
create mode 100644 sqlite/app/src/main/res/layout/categoty_detail_content.xml
create mode 100644 sqlite/app/src/main/res/layout/content_category.xml
create mode 100644 sqlite/app/src/main/res/layout/content_index.xml
create mode 100644 sqlite/app/src/main/res/layout/content_nav.xml
create mode 100644 sqlite/app/src/main/res/layout/content_product.xml
create mode 100644 sqlite/app/src/main/res/layout/content_shopping.xml
create mode 100644 sqlite/app/src/main/res/layout/content_user.xml
create mode 100644 sqlite/app/src/main/res/layout/index_famous.xml
create mode 100644 sqlite/app/src/main/res/layout/user_login.xml
create mode 100644 sqlite/app/src/main/res/layout/user_register.xml
create mode 100644 sqlite/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
create mode 100644 sqlite/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
create mode 100644 sqlite/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml
create mode 100644 sqlite/app/src/main/res/mipmap-hdpi/ic_launcher.webp
create mode 100644 sqlite/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
create mode 100644 sqlite/app/src/main/res/mipmap-mdpi/ic_launcher.webp
create mode 100644 sqlite/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
create mode 100644 sqlite/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
create mode 100644 sqlite/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
create mode 100644 sqlite/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
create mode 100644 sqlite/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
create mode 100644 sqlite/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
create mode 100644 sqlite/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
create mode 100644 sqlite/app/src/main/res/values-night/themes.xml
create mode 100644 sqlite/app/src/main/res/values/colors.xml
create mode 100644 sqlite/app/src/main/res/values/strings.xml
create mode 100644 sqlite/app/src/main/res/values/themes.xml
create mode 100644 sqlite/app/src/main/res/xml/backup_rules.xml
create mode 100644 sqlite/app/src/main/res/xml/data_extraction_rules.xml
create mode 100644 sqlite/app/src/test/java/com/example/sqlite/ExampleUnitTest.java
create mode 100644 sqlite/build.gradle
create mode 100644 sqlite/gradle.properties
create mode 100644 sqlite/gradle/wrapper/gradle-wrapper.jar
create mode 100644 sqlite/gradle/wrapper/gradle-wrapper.properties
create mode 100644 sqlite/gradlew
create mode 100644 sqlite/gradlew.bat
create mode 100644 sqlite/settings.gradle
diff --git a/sqlite/.gitignore b/sqlite/.gitignore
new file mode 100644
index 0000000..aa724b7
--- /dev/null
+++ b/sqlite/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/sqlite/.idea/.gitignore b/sqlite/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/sqlite/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/sqlite/.idea/compiler.xml b/sqlite/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/sqlite/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlite/.idea/deploymentTargetDropDown.xml b/sqlite/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..c15f962
--- /dev/null
+++ b/sqlite/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlite/.idea/gradle.xml b/sqlite/.idea/gradle.xml
new file mode 100644
index 0000000..a2d7c21
--- /dev/null
+++ b/sqlite/.idea/gradle.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlite/.idea/misc.xml b/sqlite/.idea/misc.xml
new file mode 100644
index 0000000..bdd9278
--- /dev/null
+++ b/sqlite/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlite/app/.gitignore b/sqlite/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/sqlite/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/sqlite/app/build.gradle b/sqlite/app/build.gradle
new file mode 100644
index 0000000..4ac9ddc
--- /dev/null
+++ b/sqlite/app/build.gradle
@@ -0,0 +1,40 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ namespace 'com.example.sqlite'
+ compileSdk 33
+
+ defaultConfig {
+ applicationId "com.example.sqlite"
+ minSdk 24
+ targetSdk 33
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.5.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ implementation 'liji.library.dev:citypickerview:1.1.0'
+}
\ No newline at end of file
diff --git a/sqlite/app/proguard-rules.pro b/sqlite/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/sqlite/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/sqlite/app/src/androidTest/java/com/example/sqlite/ExampleInstrumentedTest.java b/sqlite/app/src/androidTest/java/com/example/sqlite/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..3105e96
--- /dev/null
+++ b/sqlite/app/src/androidTest/java/com/example/sqlite/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.sqlite;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.example.sqlite", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/sqlite/app/src/main/AndroidManifest.xml b/sqlite/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..30393b7
--- /dev/null
+++ b/sqlite/app/src/main/AndroidManifest.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlite/app/src/main/java/com/example/sqlite/MainActivity.java b/sqlite/app/src/main/java/com/example/sqlite/MainActivity.java
new file mode 100644
index 0000000..cb37b37
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/MainActivity.java
@@ -0,0 +1,79 @@
+package com.example.sqlite;
+
+import android.content.Intent;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.example.sqlite.activity.IndexActivity;
+import com.example.sqlite.activity.RegisterActivity;
+import com.example.sqlite.dataoperation.OrangeDatabase;
+
+public class MainActivity extends AppCompatActivity implements View.OnClickListener {
+ private Button registerButton, loginButton;
+ private EditText usernameText, paswdEdit;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.user_login);
+ init();
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.register:
+ Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
+ startActivity(intent);
+ break;
+ case R.id.login:
+ //注册时,我们引入了数据库,登录这里可以通过数据库进行验证,验证跳转到首页,不通过进行提示
+ if (validateLogin()) {
+ Intent intent1 = new Intent(MainActivity.this, IndexActivity.class);
+ Bundle bundle = new Bundle();
+ OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
+ bundle.putString("username", usernameText.getText().toString());
+ bundle = orangeDatabase.queryUserInfo(orangeDatabase.getReadableDatabase(), bundle);
+ intent1.putExtras(bundle);
+ startActivity(intent1);
+ } else {
+ Toast.makeText(MainActivity.this, "账号或者密码错误", Toast.LENGTH_SHORT).show();
+ }
+ break;
+ }
+ }
+
+ //界面组件初始化
+ private void init() {
+ usernameText = findViewById(R.id.username);
+ paswdEdit = findViewById(R.id.password);
+ loginButton = findViewById(R.id.login);
+ loginButton.setOnClickListener(this);
+ registerButton = findViewById(R.id.register);
+ registerButton.setOnClickListener(this);
+ }
+
+ /**
+ * 登录验证
+ *
+ * @return
+ */
+ private boolean validateLogin() {
+ String username = usernameText.getText().toString();
+ String password = paswdEdit.getText().toString();
+ OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
+ SQLiteDatabase sqLiteDatabase = orangeDatabase.getReadableDatabase();
+ Cursor cursor = sqLiteDatabase.rawQuery("select * from orange_user where username=? and password=?", new String[]{username, password});
+ if (cursor.getCount() > 0) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/activity/CategoryActivity.java b/sqlite/app/src/main/java/com/example/sqlite/activity/CategoryActivity.java
new file mode 100644
index 0000000..4d0d5d4
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/activity/CategoryActivity.java
@@ -0,0 +1,90 @@
+package com.example.sqlite.activity;
+
+import android.app.Activity;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.os.Bundle;
+import android.widget.ListView;
+
+import androidx.annotation.Nullable;
+
+import com.example.sqlite.R;
+import com.example.sqlite.adapter.Adapter;
+import com.example.sqlite.entity.Product;
+import com.example.sqlite.fragment.SetDetailFragment;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class CategoryActivity extends Activity {
+ public OnChangeListener onchangedListener;
+ private List productList;
+ private List productCategory = new ArrayList<>();
+ private ListView titleList;
+ private Adapter adapter;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.content_category);
+ initData();
+ init();
+ SetDetailFragment fragment = new SetDetailFragment();
+ FragmentManager fragmentManager = getFragmentManager();
+ FragmentTransaction transaction = fragmentManager.beginTransaction();
+ transaction.replace(R.id.category_detail, fragment);
+ transaction.commit();
+ titleList.setOnItemClickListener((parent, view, position, id) -> {
+ adapter.setSelectedPosition(position);
+ adapter.notifyDataSetInvalidated();
+ if (onchangedListener != null) {
+ onchangedListener.changeText(productList.get(position));
+ }
+ });
+
+ }
+
+ public void setOnChangeListener(OnChangeListener onChangeListener) {
+ this.onchangedListener = onChangeListener;
+ }
+
+ public interface OnChangeListener {
+ void changeText(Product product);
+ }
+
+ /**
+ * 初始化数据
+ */
+ private void initData() {
+ productList = new ArrayList<>();
+ productCategory.add("橘子");
+ productCategory.add("橙子");
+ productCategory.add("柚子");
+ Product product = new Product();
+ product.setImageUrlId(R.drawable.arrow_down);
+ product.setProductName("橘子");
+ product.setProductPrice(new BigDecimal("9.9"));
+ Product product1 = new Product();
+ product1.setImageUrlId(R.drawable.orange);
+ product1.setProductName("橙子");
+ product1.setProductPrice(new BigDecimal("29.9"));
+ Product product2 = new Product();
+ product2.setImageUrlId(R.drawable.arrow_left);
+ product2.setProductName("柚子");
+ product2.setProductPrice(new BigDecimal("19.9"));
+ productList.add(product);
+ productList.add(product1);
+ productList.add(product2);
+ }
+
+ /**
+ * 初始化组件
+ */
+ private void init() {
+ titleList = findViewById(R.id.category_title_list);
+ adapter = new Adapter(productCategory, CategoryActivity.this);
+ titleList.setAdapter(adapter);
+ }
+}
\ No newline at end of file
diff --git a/sqlite/app/src/main/java/com/example/sqlite/activity/IndexActivity.java b/sqlite/app/src/main/java/com/example/sqlite/activity/IndexActivity.java
new file mode 100644
index 0000000..c86ad15
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/activity/IndexActivity.java
@@ -0,0 +1,120 @@
+package com.example.sqlite.activity;
+
+import android.app.Activity;
+import android.app.FragmentTransaction;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.annotation.Nullable;
+
+import com.example.sqlite.R;
+import com.example.sqlite.fragment.IndexFragment;
+import com.example.sqlite.fragment.PearsonFragment;
+import com.example.sqlite.fragment.ProductFragment;
+import com.example.sqlite.fragment.ShoppingCartFragment;
+
+public class IndexActivity extends Activity implements View.OnClickListener {
+ private IndexFragment indexFragment;
+ private ProductFragment productFragment;
+ private ShoppingCartFragment shoppingCartFragment;
+ private PearsonFragment pearsonFragment;
+ private LinearLayout indexLine, productLine, shoppingCartLine, pearsonLine;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ init();
+ initIndexFragment();
+ }
+
+ /**
+ * 组件初始化
+ */
+ private void init() {
+ indexLine = findViewById(R.id.content_index);
+ indexLine.setOnClickListener(this);
+ productLine = findViewById(R.id.content_product);
+ productLine.setOnClickListener(this);
+ shoppingCartLine = findViewById(R.id.content_cart);
+ shoppingCartLine.setOnClickListener(this);
+ pearsonLine = findViewById(R.id.content_pearson);
+ pearsonLine.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.content_index:
+ initIndexFragment();
+ break;
+ case R.id.content_product:
+ initproductFragment();
+ break;
+ case R.id.content_cart:
+ initshoppingCartFragment();
+ break;
+ case R.id.content_pearson:
+ initpearsonFragment();
+ break;
+ }
+ }
+
+ /**
+ * 初始化首页Fragment
+ */
+ private void initIndexFragment() {
+ //开启事务,fragment的控制是由事务来实现的
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ if (indexFragment == null) {
+ indexFragment = new IndexFragment();
+ }
+ transaction.replace(R.id.main_content, indexFragment);
+ transaction.commit();
+ }
+
+ /**
+ * 初始化产品Fragment
+ */
+ private void initproductFragment() {
+ //开启事务,fragment的控制是由事务来实现的
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ if (productFragment == null) {
+ productFragment = new ProductFragment();
+ }
+ transaction.replace(R.id.main_content, productFragment);
+ transaction.commit();
+ }
+
+ /**
+ * 初始化购物车Fragment
+ */
+ private void initshoppingCartFragment() {
+ //开启事务,fragment的控制是由事务来实现的
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ if (shoppingCartFragment == null) {
+ shoppingCartFragment = new ShoppingCartFragment();
+ }
+ transaction.replace(R.id.main_content, shoppingCartFragment);
+ transaction.commit();
+ }
+
+ /**
+ * 初始化个人Fragment
+ */
+ private void initpearsonFragment() {
+ //开启事务,fragment的控制是由事务来实现的
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ if (pearsonFragment == null) {
+ Intent intent = IndexActivity.this.getIntent();
+ Bundle bundle = intent.getExtras();
+ pearsonFragment = new PearsonFragment();
+ pearsonFragment.setArguments(bundle);
+ }
+ transaction.replace(R.id.main_content, pearsonFragment);
+ transaction.commit();
+ }
+
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/activity/RegisterActivity.java b/sqlite/app/src/main/java/com/example/sqlite/activity/RegisterActivity.java
new file mode 100644
index 0000000..c3e8f84
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/activity/RegisterActivity.java
@@ -0,0 +1,168 @@
+package com.example.sqlite.activity;
+
+import android.content.ContentValues;
+import android.content.Intent;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.lljjcoder.citypickerview.widget.CityPicker;
+import com.example.sqlite.R;
+import com.example.sqlite.dataoperation.OrangeDatabase;
+
+public class RegisterActivity extends AppCompatActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener {
+ private EditText usernameEdit, passwordEdit, surePasswordEdit;
+ private TextView cityText;
+ private CityPicker cityPicker;
+ private Button regButton;
+ private RadioGroup sexGroup;
+ private String sexStr = "男";
+
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.user_register);
+ init();
+ }
+
+ /**
+ * 界面组件初始化
+ */
+ private void init() {
+ cityText = findViewById(R.id.reg_province);
+ cityText.setOnClickListener(this);
+ usernameEdit = findViewById(R.id.reg_username);
+ passwordEdit = findViewById(R.id.reg_password);
+ surePasswordEdit = findViewById(R.id.reg_sure_password);
+ regButton = findViewById(R.id.reg_register);
+ regButton.setOnClickListener(this);
+ sexGroup = findViewById(R.id.sex);
+ sexGroup.setOnCheckedChangeListener(this);
+
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.reg_province:
+ initCityPicker();
+ cityPicker.show();
+ break;
+ case R.id.reg_register:
+ //注册验证方法
+ validateRegister();
+ break;
+
+ }
+ }
+
+ /**
+ * 初始化城市选择器
+ */
+ public void initCityPicker() {
+ cityPicker = new CityPicker.Builder(RegisterActivity.this)
+ .textSize(16)
+ .title("地址选择")
+ .backgroundPop(0xa0000000)
+ .titleBackgroundColor("#EFB81C")
+ .titleTextColor("#000000")
+ .backgroundPop(0xa0000000)
+ .confirTextColor("#000000")
+ .cancelTextColor("#000000")
+ .province("江西省")
+ .city("赣州市")
+ .district("章贡区")
+ .textColor(Color.parseColor("#000000"))
+ .provinceCyclic(true)
+ .cityCyclic(false)
+ .districtCyclic(false)
+ .visibleItemsCount(7)
+ .itemPadding(10)
+ .onlyShowProvinceAndCity(false)
+ .build();
+ cityPicker.setOnCityItemClickListener(new CityPicker.OnCityItemClickListener() {
+ @Override
+ public void onSelected(String... strings) {
+ String province = strings[0];
+ String city = strings[1];
+ String district = strings[2];
+ cityText.setText(String.format("%s %s %s", province, city, district));
+ }
+
+ @Override
+ public void onCancel() {
+ }
+ });
+
+ }
+
+ /**
+ * 注册验证
+ */
+ public void validateRegister() {
+ String username = usernameEdit.getText().toString();
+ String password = passwordEdit.getText().toString();
+ String surePassword = surePasswordEdit.getText().toString();
+ String city = cityText.getText().toString();
+ //判断两次密码是否输入一致
+ if (password.equals(surePassword)) {
+ //这里也可以再进行其它的验证,如是否符合要求等,符合就进行插入数据库操作
+ if (!username.equals("") || !password.equals("")) {
+ if (!city.equals("")) {
+ Bundle bundle = new Bundle();
+ bundle.putString("username", username);
+ bundle.putString("password", password);
+ bundle.putString("sex", sexStr);
+ bundle.putString("city", city);
+ //本节将使用安卓自身带的SQLite数据库的方式存储注册的信息(之前直接传输显示在界面是的方式)
+ OrangeDatabase orangeDatabase = new OrangeDatabase(RegisterActivity.this);
+ SQLiteDatabase sqLiteDatabase = orangeDatabase.getWritableDatabase();
+ insertData(sqLiteDatabase, bundle);
+ Intent intent = new Intent(RegisterActivity.this, IndexActivity.class);
+ intent.putExtras(bundle);
+ startActivity(intent);
+ } else {
+ Toast.makeText(RegisterActivity.this, "请选择地址", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ Toast.makeText(RegisterActivity.this, "账号或密码未填写", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ Toast.makeText(RegisterActivity.this, "两次密码输入不一致", Toast.LENGTH_SHORT).show();
+ }
+
+
+ }
+
+ @Override
+ public void onCheckedChanged(RadioGroup group, int checkedId) {
+ //根据用户选择来改变sex的值
+ sexStr = checkedId == R.id.reg_man ? "男" : "女";
+ }
+
+ /**
+ * 插入数据库的值
+ *
+ * @param sqLiteDatabase
+ * @param bundle
+ */
+ private void insertData(SQLiteDatabase sqLiteDatabase, Bundle bundle) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put("username", bundle.getString("username"));
+ contentValues.put("password", bundle.getString("password"));
+ contentValues.put("sex", bundle.getString("sex"));
+ contentValues.put("city", bundle.getString("city"));
+ sqLiteDatabase.insert("orange_user", null, contentValues);
+ sqLiteDatabase.close();
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/activity/UserActivity.java b/sqlite/app/src/main/java/com/example/sqlite/activity/UserActivity.java
new file mode 100644
index 0000000..a6c1d81
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/activity/UserActivity.java
@@ -0,0 +1,66 @@
+package com.example.sqlite.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+
+import com.example.sqlite.R;
+
+public class UserActivity extends Activity implements View.OnClickListener {
+ private ImageView userIconImage;
+ private TextView usernameText, userSexText, userCityText;
+ private LinearLayout usernameLine, userSexline, userCityLine, userPayLine, userSettingLine, userGeneralLine, userSearchProductLine;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.content_user);
+ init();
+ }
+
+ /**
+ * 组件初始化
+ */
+ private void init() {
+ userIconImage = findViewById(R.id.user_icon);
+ usernameText = findViewById(R.id.user_username);
+ userSexText = findViewById(R.id.user_sex);
+ userCityText = findViewById(R.id.user_city);
+ usernameLine = findViewById(R.id.user_username_line);
+ userSexline = findViewById(R.id.user_sex_line);
+ userCityLine = findViewById(R.id.user_city_line);
+ userPayLine = findViewById(R.id.user_pay);
+ userSettingLine = findViewById(R.id.user_setting);
+ userGeneralLine = findViewById(R.id.user_general);
+ userSearchProductLine = findViewById(R.id.user_searchProduct);
+ userSearchProductLine.setOnClickListener(this);
+ setData();
+ }
+
+ /**
+ * 组件赋值
+ */
+ private void setData() {
+ Intent intent = UserActivity.this.getIntent();
+ Bundle bundle = intent.getExtras();
+ usernameText.setText(String.format("用户名:%s", bundle.getString("username")));
+ userSexText.setText(String.format("性别:%s", bundle.getString("sex")));
+ userCityText.setText(String.format("城市:%s", bundle.getString("city")));
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.user_searchProduct:
+ Intent intent1 = new Intent(UserActivity.this, CategoryActivity.class);
+ startActivity(intent1);
+ break;
+ }
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/adapter/Adapter.java b/sqlite/app/src/main/java/com/example/sqlite/adapter/Adapter.java
new file mode 100644
index 0000000..4ef5b29
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/adapter/Adapter.java
@@ -0,0 +1,69 @@
+package com.example.sqlite.adapter;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.example.sqlite.R;
+
+import java.util.List;
+
+public class Adapter extends BaseAdapter {
+ private List productCategory;
+ private LayoutInflater layoutInflater;
+ private int selectionPosition = -1;
+
+ public Adapter(List productCategory, Context context) {
+ this.productCategory = productCategory;
+ this.layoutInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return productCategory.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return productCategory.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder viewHolder = null;
+ if (convertView == null) {
+ viewHolder = new ViewHolder();
+ convertView = layoutInflater.inflate(R.layout.category_list_item, null);
+ Log.i("adapts", "getView: " + convertView);
+ viewHolder.tv = convertView.findViewById(R.id.categor_titles);
+ convertView.setTag(viewHolder);
+ } else {
+ viewHolder = (ViewHolder) convertView.getTag();
+ }
+ viewHolder.tv.setText(productCategory.get(position));
+ if (selectionPosition == position) {
+ viewHolder.tv.setBackgroundColor(Color.YELLOW);
+ } else {
+ viewHolder.tv.setBackgroundColor(Color.WHITE);
+ }
+ return convertView;
+ }
+
+ public void setSelectedPosition(int position) {
+ this.selectionPosition = position;
+ }
+
+ class ViewHolder {
+ TextView tv;
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/adapter/ProductAdapter.java b/sqlite/app/src/main/java/com/example/sqlite/adapter/ProductAdapter.java
new file mode 100644
index 0000000..dab0442
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/adapter/ProductAdapter.java
@@ -0,0 +1,69 @@
+package com.example.sqlite.adapter;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.example.sqlite.R;
+import com.example.sqlite.entity.Product;
+
+import java.util.List;
+
+public class ProductAdapter extends BaseAdapter {
+ private List productList;
+ private LayoutInflater layoutInflater;
+
+ public ProductAdapter(Context context, List productList) {
+ this.productList = productList;
+ this.layoutInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return productList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return productList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder viewHolder;
+ if (convertView == null) {
+ Log.i("aa", "getView: "+"aa");
+ convertView = layoutInflater.inflate(R.layout.categoty_detail_content, null);
+ viewHolder = new ViewHolder();
+ viewHolder.productImage = convertView.findViewById(R.id.category_product_image);
+ viewHolder.productName = convertView.findViewById(R.id.category_product_name);
+ viewHolder.productPrice = convertView.findViewById(R.id.category_product_price);
+ convertView.setTag(viewHolder);
+ } else {
+ viewHolder = (ViewHolder) convertView.getTag();
+ }
+ Product product = productList.get(position);
+ Log.i("product", "getView: "+product.toString());
+ if (product != null) {
+ viewHolder.productImage.setBackgroundResource(product.getImageUrlId());
+ viewHolder.productName.setText(product.getProductName());
+ viewHolder.productPrice.setText(String.valueOf(product.getProductPrice()));
+ }
+ return convertView;
+ }
+
+ class ViewHolder {
+ ImageView productImage;
+ TextView productName, productPrice;
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/dataoperation/OrangeDatabase.java b/sqlite/app/src/main/java/com/example/sqlite/dataoperation/OrangeDatabase.java
new file mode 100644
index 0000000..bb330aa
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/dataoperation/OrangeDatabase.java
@@ -0,0 +1,68 @@
+package com.example.sqlite.dataoperation;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+
+public class OrangeDatabase extends SQLiteOpenHelper {
+ public OrangeDatabase(@Nullable Context context) {
+ super(context, "orange", null, 1);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ //创建用户表
+ String sql = "create table orange_user(id integer primary key autoincrement, username varchar(50), password varchar(50),sex varchar(10),city carchar(50))";
+ db.execSQL(sql);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+
+ }
+
+ /**
+ * 插入数据
+ *
+ * @param sqLiteDatabase
+ * @param username
+ * @param password
+ * @param sex
+ * @param city
+ */
+ public void insertUser(SQLiteDatabase sqLiteDatabase, String username, String password, String sex, String city) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put("username", username);
+ contentValues.put("password", password);
+ contentValues.put("sex", sex);
+ contentValues.put("city", city);
+ sqLiteDatabase.insert("orange_user", null, contentValues);
+ sqLiteDatabase.close();
+ }
+
+ /**
+ * 查询数据
+ *
+ * @param sqLiteDatabase
+ * @param bundle
+ * @return
+ */
+ public Bundle queryUserInfo(SQLiteDatabase sqLiteDatabase, Bundle bundle) {
+ String username = bundle.getString("username");
+ Cursor cursor = sqLiteDatabase.rawQuery("select * from orange_user where username=?", new String[]{username});
+ if (cursor != null) {
+ while (cursor.moveToNext()) {
+ bundle.putString("sex", cursor.getString(3));
+ bundle.putString("city", cursor.getString(4));
+ }
+ }
+ cursor.close();
+ sqLiteDatabase.close();
+ return bundle;
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/entity/OrangeUser.java b/sqlite/app/src/main/java/com/example/sqlite/entity/OrangeUser.java
new file mode 100644
index 0000000..566b9c2
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/entity/OrangeUser.java
@@ -0,0 +1,59 @@
+package com.example.sqlite.entity;
+
+public class OrangeUser {
+ private Integer id;
+ private String username;
+ private String password;
+ private String sex;
+ private String city;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer 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;
+ }
+
+ public String getSex() {
+ return sex;
+ }
+
+ public void setSex(String sex) {
+ this.sex = sex;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ @Override
+ public String toString() {
+ return "OrangeUser{" +
+ "username='" + username + '\'' +
+ ", password='" + password + '\'' +
+ ", sex='" + sex + '\'' +
+ ", city='" + city + '\'' +
+ '}';
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/entity/Product.java b/sqlite/app/src/main/java/com/example/sqlite/entity/Product.java
new file mode 100644
index 0000000..f8e1b81
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/entity/Product.java
@@ -0,0 +1,43 @@
+package com.example.sqlite.entity;
+
+import java.math.BigDecimal;
+
+public class Product {
+
+ public String getProductName() {
+ return productName;
+ }
+
+ public void setProductName(String productName) {
+ this.productName = productName;
+ }
+
+ public BigDecimal getProductPrice() {
+ return productPrice;
+ }
+
+ public void setProductPrice(BigDecimal productPrice) {
+ this.productPrice = productPrice;
+ }
+
+ public Integer getImageUrlId() {
+ return imageUrlId;
+ }
+
+ public void setImageUrlId(Integer imageUrlId) {
+ this.imageUrlId = imageUrlId;
+ }
+
+ private Integer imageUrlId;
+ private String productName;
+ private BigDecimal productPrice;
+
+ @Override
+ public String toString() {
+ return "Product{" +
+ "imageUrlId=" + imageUrlId +
+ ", productName='" + productName + '\'' +
+ ", productPrice=" + productPrice +
+ '}';
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/fragment/IndexFragment.java b/sqlite/app/src/main/java/com/example/sqlite/fragment/IndexFragment.java
new file mode 100644
index 0000000..95243b8
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/fragment/IndexFragment.java
@@ -0,0 +1,109 @@
+package com.example.sqlite.fragment;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.GridView;
+import android.widget.LinearLayout;
+import android.widget.SearchView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.example.sqlite.R;
+import com.example.sqlite.adapter.ProductAdapter;
+import com.example.sqlite.entity.Product;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+public class IndexFragment extends Fragment implements View.OnClickListener {
+ private SearchView searchView;
+ private LinearLayout orangeLine, youziLine, juziLine, xiguaLine, liLine, appleLine, lemonLine, mangguoLine;
+ private GridView gridView;
+ private List productList;
+ private ProductAdapter productAdapter;
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = LayoutInflater.from(getActivity()).inflate(R.layout.content_index, container, false);
+ init(view);
+ return view;
+ }
+
+ /**
+ * 初始化组件
+ */
+ private void init(View view) {
+ searchView = view.findViewById(R.id.searchView);
+ searchView.setOnClickListener(this);
+ orangeLine = view.findViewById(R.id.chengzi);
+ orangeLine.setOnClickListener(this);
+ youziLine = view.findViewById(R.id.youzi);
+ youziLine.setOnClickListener(this);
+ juziLine = view.findViewById(R.id.juzi);
+ juziLine.setOnClickListener(this);
+ xiguaLine = view.findViewById(R.id.xigua);
+ xiguaLine.setOnClickListener(this);
+ liLine = view.findViewById(R.id.li);
+ liLine.setOnClickListener(this);
+ lemonLine = view.findViewById(R.id.lemon);
+ lemonLine.setOnClickListener(this);
+ mangguoLine = view.findViewById(R.id.mangguo);
+ mangguoLine.setOnClickListener(this);
+ appleLine = view.findViewById(R.id.apple);
+ appleLine.setOnClickListener(this);
+ gridView = view.findViewById(R.id.index_famous_gridview);
+ initData();
+ productAdapter = new ProductAdapter(getActivity(), productList);
+ gridView.setAdapter(productAdapter);
+ }
+
+
+ @Override
+ public void onClick(View v) {
+
+ }
+
+ /**
+ * 初始化商品数据
+ */
+ private void initData() {
+ productList = new ArrayList<>();
+ Product product = new Product();
+ product.setImageUrlId(R.drawable.juzip);
+ product.setProductName("橘子");
+ product.setProductPrice(new BigDecimal("9.9"));
+ Product product1 = new Product();
+ product1.setImageUrlId(R.drawable.orange);
+ product1.setProductName("橙子");
+ product1.setProductPrice(new BigDecimal("29.9"));
+ Product product2 = new Product();
+ product2.setImageUrlId(R.drawable.youzip);
+ product2.setProductName("柚子");
+ product2.setProductPrice(new BigDecimal("19.9"));
+ Product product3 = new Product();
+ product3.setImageUrlId(R.drawable.xiguap);
+ product3.setProductName("西瓜");
+ product3.setProductPrice(new BigDecimal("19.9"));
+ Product product4 = new Product();
+ product4.setImageUrlId(R.drawable.applep);
+ product4.setProductName("苹果");
+ product4.setProductPrice(new BigDecimal("49.9"));
+ Product product5 = new Product();
+ product5.setImageUrlId(R.drawable.lemonp);
+ product5.setProductName("柠檬");
+ product5.setProductPrice(new BigDecimal("9.9"));
+ productList.add(product);
+ productList.add(product1);
+ productList.add(product2);
+ productList.add(product3);
+ productList.add(product4);
+ productList.add(product5);
+
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/fragment/PearsonFragment.java b/sqlite/app/src/main/java/com/example/sqlite/fragment/PearsonFragment.java
new file mode 100644
index 0000000..ba039d1
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/fragment/PearsonFragment.java
@@ -0,0 +1,64 @@
+package com.example.sqlite.fragment;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.example.sqlite.R;
+
+public class PearsonFragment extends Fragment implements View.OnClickListener {
+ private ImageView userIconImage;
+ private TextView usernameText, userSexText, userCityText;
+ private LinearLayout usernameLine, userSexline, userCityLine, userPayLine, userSettingLine, userGeneralLine;
+
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = LayoutInflater.from(getActivity()).inflate(R.layout.content_user, container, false);
+ init(view);
+ return view;
+ }
+
+ /**
+ * 组件初始化
+ */
+ private void init(View view) {
+ userIconImage = view.findViewById(R.id.user_icon);
+ usernameText = view.findViewById(R.id.user_username);
+ userSexText = view.findViewById(R.id.user_sex);
+ userCityText = view.findViewById(R.id.user_city);
+ usernameLine = view.findViewById(R.id.user_username_line);
+ userSexline = view.findViewById(R.id.user_sex_line);
+ userCityLine = view.findViewById(R.id.user_city_line);
+ userPayLine = view.findViewById(R.id.user_pay);
+ userSettingLine = view.findViewById(R.id.user_setting);
+ userGeneralLine = view.findViewById(R.id.user_general);
+ setData();
+ }
+
+ /**
+ * 组件赋值
+ */
+ private void setData() {
+ Bundle bundle = getArguments();
+ usernameText.setText(String.format("用户名:%s", bundle.getString("username")));
+ userSexText.setText(String.format("性别:%s", bundle.getString("sex")));
+ userCityText.setText(String.format("城市:%s", bundle.getString("city")));
+ }
+
+ @Override
+ public void onClick(View v) {
+
+ }
+
+
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/fragment/ProductFragment.java b/sqlite/app/src/main/java/com/example/sqlite/fragment/ProductFragment.java
new file mode 100644
index 0000000..76c7e24
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/fragment/ProductFragment.java
@@ -0,0 +1,21 @@
+package com.example.sqlite.fragment;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.example.sqlite.R;
+
+public class ProductFragment extends Fragment {
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = LayoutInflater.from(getActivity()).inflate(R.layout.content_product, container, false);
+ return view;
+ }
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/fragment/SetDetailFragment.java b/sqlite/app/src/main/java/com/example/sqlite/fragment/SetDetailFragment.java
new file mode 100644
index 0000000..790259b
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/fragment/SetDetailFragment.java
@@ -0,0 +1,53 @@
+package com.example.sqlite.fragment;
+
+import android.annotation.SuppressLint;
+import android.app.Fragment;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.example.sqlite.R;
+import com.example.sqlite.activity.CategoryActivity;
+
+import java.util.Objects;
+
+public class SetDetailFragment extends Fragment {
+ private View view;
+ private ImageView imageView;
+ private TextView nameText, priceText;
+
+ @SuppressLint("SetTextI18n")
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ view = inflater.inflate(R.layout.categoty_detail_content, container, false);
+ if (view != null) {
+ init();
+ }
+ CategoryActivity categoryActivity = (CategoryActivity) getActivity();
+ Objects.requireNonNull(categoryActivity).setOnChangeListener(product -> {
+ Log.i("sss", "onCreateView: " + product.getProductName());
+ imageView.setBackgroundResource(product.getImageUrlId());
+ nameText.setText(product.getProductName());
+ priceText.setText(product.getProductPrice().toString());
+ });
+ return view;
+ }
+
+ /**
+ * 内容组件初始化
+ */
+ private void init() {
+ imageView = view.findViewById(R.id.category_product_image);
+ nameText = view.findViewById(R.id.category_product_name);
+ priceText = view.findViewById(R.id.category_product_price);
+ }
+
+}
diff --git a/sqlite/app/src/main/java/com/example/sqlite/fragment/ShoppingCartFragment.java b/sqlite/app/src/main/java/com/example/sqlite/fragment/ShoppingCartFragment.java
new file mode 100644
index 0000000..5d50cb5
--- /dev/null
+++ b/sqlite/app/src/main/java/com/example/sqlite/fragment/ShoppingCartFragment.java
@@ -0,0 +1,21 @@
+package com.example.sqlite.fragment;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.example.sqlite.R;
+
+public class ShoppingCartFragment extends Fragment {
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = LayoutInflater.from(getActivity()).inflate(R.layout.content_shopping, container, false);
+ return view;
+ }
+}
diff --git a/sqlite/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/sqlite/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/sqlite/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlite/app/src/main/res/drawable/address.png b/sqlite/app/src/main/res/drawable/address.png
new file mode 100644
index 0000000000000000000000000000000000000000..7318be016a0fea789da57d99dcecd6485834d90d
GIT binary patch
literal 1028
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
O0000pWc?Ln7SYUUTGXFyL{y_+-L2
zAe`!S*CTxHOaYa5+UMsh6?*@xD4H)SFgHMSO;ZNrmzui=x3C_U*gmtg{5?mI(WBPg
zVrvvVtUff)J{GxgZrBp0n>&66nk-;)XI@nxvOtKP`KkqnM58sE+rxj{bK=E91%L6o
zDJUkmcuK5r3u^FE;a%Yr)X1eGyTkEWRK)$GCSOn0@3MV=&eJW%A&v1%tmz}I4l#%G
d*JWL}?QZm^Xy&~w{S0(DgQu&X%Q~loCIB
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlite/app/src/main/res/drawable/button_register.xml b/sqlite/app/src/main/res/drawable/button_register.xml
new file mode 100644
index 0000000..3eb0673
--- /dev/null
+++ b/sqlite/app/src/main/res/drawable/button_register.xml
@@ -0,0 +1,14 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlite/app/src/main/res/drawable/chengzi.png b/sqlite/app/src/main/res/drawable/chengzi.png
new file mode 100644
index 0000000000000000000000000000000000000000..fff03064b0057c455eb8cf7525fb18cbeb3d9d59
GIT binary patch
literal 1666
zcmV-|27UR7P)D=Q?yt`
zgL^K3ZRLf*#XIUe*_u;i3GU4nB(iit*~G{uLY8F8Cde!TWiv1f0xzV~%pfC%v5I>4
zYfR8L76!Ll8P$qI?uQ`go$|uKOe^@|z{E7N>sayVo@;u&0$RPHFmT3-a7BaXGZ43x
z7X&w1!4EYirV&G=vcdB(gO`^V23K1Vtqi!QuoEXhSX5pRJZmLpC^2!3L`tl|y`KmN
zUoHq9up+v>-cv@zPnH)3=Uc%KCC1c9WrJr9gKM}Ci#B?K;Y7lHyVQjrOrKJH&y~)W
zd6zpoNyw?pWXzjP0xp2KotfGp(XJ`&ggCI&P9OW2CNU933|%JgK`kYstmSb8MUWJG(Na
zG~}}qYsrXSU6r0e9R-L<+h-(rN4d-CTW#h
zu)LqjT93xV$2G#fnKv_ON11t+Rk7j4af_zOm6_|$owoHH(fzrvgZZuDP0k*>u{1l%
zTGm=N!n>!tq^=vcahyG=;YUj;3t~MqW0scgQ;j9BbokSQywA|nn%w!pSU4BptSUAbt?#IdFQq}5>jG|v)|Tbpb?+C
z55UuQNz;U{QM{pNW8M+Xrye3;ahejdB}>EsQQA@zue5#v;ci=uX#yLs$-*1@cl#7w
zTAcuHNmFiiWjhsbXiV%o;!}+tZ^E}fyNY)3RC3}c5<-{z7P`U;@
z7&-aTJTq?d$?jA404PZ|IXiKpvArg&Rk9k575C*0@DEfU}X
zFD)rCWh}kRYc8RuOP8OoSYW0pLB-Kc@0hQ;(&zeuL90??z@~`hS6zd*uPP^B2+?R$
zBPDQK%?BeRt=hGhh}NVeJBuQ=+d+{ht3P+P1lNIKzng9`F`ciiy5X_+$c
znAtHy!X~!vSG{0V+Zw&023t5@NNB{!Nv~2jBSl-6=rM@iio_cuOGYAd#+T!k5P_i{
zY%@M9#|by$EgOlLiL{GoA3y_oN<(jsTLkknX2%H8nzoD>!96?gnx!aW!*DIl#uBUR
za!0)5ga2GwgSIkNIr)kp?@;XkQgS?PRyvwrEhdR#5Q+ih*etVFFlt$#Ho7TolgIk0
zt`%b5oqMm=#}5jD$wWLEOp_UyV#N0U7Y-@W?r_rA{ac<^_{}hX0R}#BQQ@)#!~g&Q
M07*qoM6N<$f;J}@jQ{`u
literal 0
HcmV?d00001
diff --git a/sqlite/app/src/main/res/drawable/city.png b/sqlite/app/src/main/res/drawable/city.png
new file mode 100644
index 0000000000000000000000000000000000000000..790fb2bf39c33588894e33135a78fc1c05ed6caf
GIT binary patch
literal 790
zcmV+x1L^#UP)&Rd)Azkx1s<6Vd&j0As9)Z*~+qJ9V@fa4!+P{tX}Cn;o^A
z0#97z2mE6~ArY9|$W0q=J1aL74vbT;Z%FVmj;V60)XN)l{^KlBNLW;uIF({2YuBE2
zcC5=9TWbna9I^Z8o0G7cl2!yYdy`1SwG$;-psw+IfN$Dm9
zVUm|{P*tj+F;%2fy_G)hks&M$df^`vz-0I;1liSc%k
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sqlite/app/src/main/res/drawable/imformationimg.png b/sqlite/app/src/main/res/drawable/imformationimg.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2c27f6a29c4a87d45189ef4c4b9fae1d9a57e8a
GIT binary patch
literal 170815
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