From d3d85de9004271551d6b07a83a2d224ed7cf501f Mon Sep 17 00:00:00 2001 From: "3189462719@qq.com" <3383776602@qq.com> Date: Thu, 27 Apr 2023 01:26:16 +0800 Subject: [PATCH] init --- .idea/.name | 1 + app/build.gradle | 7 +- .../ExampleInstrumentedTest.java | 4 +- app/src/main/AndroidManifest.xml | 9 +- .../dataoperation/OrangeDatabase.java | 68 ---- .../fragment/ProductFragment.java | 21 -- .../fragment/ShoppingCartFragment.java | 21 -- .../MainActivity.java | 72 ++-- .../activity/CategoryActivity.java | 10 +- .../activity/IndexActivity.java | 28 +- .../activity/RegisterActivity.java | 122 +++---- .../activity/UserActivity.java | 10 +- .../adapter/Adapter.java | 4 +- .../adapter/ListViewAdapter.java | 78 +++++ .../adapter/ProductAdapter.java | 28 +- .../orangesale_end/entity/Condition.java | 30 ++ .../orangesale_end/entity/OrangeMessage.java | 52 +++ .../orangesale_end/entity/OrangeProduct.java | 64 ++++ .../entity/OrangeProductPack.java | 66 ++++ .../entity/OrangeUser.java | 2 +- .../entity/Product.java | 2 +- .../orangesale_end/entity/ShoppingCart.java | 44 +++ .../fragment/IndexFragment.java | 51 ++- .../fragment/PearsonFragment.java | 4 +- .../fragment/ProductFragment.java | 102 ++++++ .../fragment/SetDetailFragment.java | 6 +- .../fragment/ShoppingCartFragment.java | 61 ++++ .../netrequest/OkHttpClientProduct.java | 80 +++++ .../netrequest/OkHttpMessage.java | 39 +++ .../orangesale_end/netrequest/OkHttpUser.java | 71 ++++ .../orangesale_end/service/TimeService.java | 105 ++++++ .../drawable-v24/ic_launcher_background.xml | 170 ---------- .../{drawable-v24 => drawable}/address.png | Bin app/src/main/res/drawable/all.png | Bin 0 -> 1045 bytes .../res/{drawable-v24 => drawable}/apple.png | Bin .../res/{drawable-v24 => drawable}/applep.png | Bin .../{drawable-v24 => drawable}/arrow_down.png | Bin .../{drawable-v24 => drawable}/arrow_left.png | Bin .../arrow_right.png | Bin .../button_login.xml | 0 .../button_register.xml | 0 app/src/main/res/drawable/cart.png | Bin 0 -> 5573 bytes .../{drawable-v24 => drawable}/chengzi.png | Bin .../res/{drawable-v24 => drawable}/city.png | Bin .../res/drawable/{dangao.JPG => dangao.png} | Bin .../res/drawable/ic_launcher_foreground.xml | 34 ++ .../res/{drawable-v24 => drawable}/index.png | Bin .../{drawable-v24 => drawable}/index_menu.xml | 0 .../res/{drawable-v24 => drawable}/juzi.png | Bin .../res/{drawable-v24 => drawable}/juzip.png | Bin .../res/{drawable-v24 => drawable}/lemon.png | Bin .../res/{drawable-v24 => drawable}/lemonp.png | Bin .../res/{drawable-v24 => drawable}/li.png | Bin .../{drawable-v24 => drawable}/mangguo.png | Bin .../res/{drawable-v24 => drawable}/orange.png | Bin .../{drawable-v24 => drawable}/password.png | Bin .../{drawable-v24 => drawable}/pearson.png | Bin app/src/main/res/drawable/price.png | Bin 0 -> 1047 bytes .../{drawable-v24 => drawable}/product.png | Bin app/src/main/res/drawable/salenum.png | Bin 0 -> 1294 bytes .../res/{drawable-v24 => drawable}/search.png | Bin .../{drawable-v24 => drawable}/setting.png | Bin .../res/{drawable-v24 => drawable}/sex.png | Bin .../shoppingcart.png | Bin .../{drawable-v24 => drawable}/shuiguo.png | Bin .../spinner_drop_down_shape.xml | 0 .../sure_apssword.png | Bin .../tab_menu_text.xml | 0 app/src/main/res/drawable/tiantianquan.JPG | Bin 68948 -> 0 bytes app/src/main/res/drawable/time.png | Bin 0 -> 2219 bytes .../res/{drawable-v24 => drawable}/user.png | Bin .../user_account.png | Bin .../user_general.png | Bin .../{drawable-v24 => drawable}/user_icon.png | Bin .../{drawable-v24 => drawable}/user_pay.png | Bin .../{drawable-v24 => drawable}/user_sex.png | Bin .../res/{drawable-v24 => drawable}/xigua.png | Bin .../res/{drawable-v24 => drawable}/xiguap.png | Bin .../res/{drawable-v24 => drawable}/youzi.png | Bin .../res/{drawable-v24 => drawable}/youzip.png | Bin app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/layout/cart_have_product.xml | 15 + app/src/main/res/layout/cart_no_product.xml | 45 +++ .../res/layout/categoty_detail_content.xml | 4 +- app/src/main/res/layout/content_category.xml | 29 +- app/src/main/res/layout/content_index.xml | 2 +- app/src/main/res/layout/content_nav.xml | 1 + app/src/main/res/layout/content_product.xml | 26 +- .../main/res/layout/content_product_title.xml | 33 ++ app/src/main/res/layout/content_shopping.xml | 11 - app/src/main/res/layout/content_user.xml | 34 +- .../res/layout/product_condition_item.xml | 39 +++ .../main/res/layout/shopping_cart_product.xml | 12 + .../main/res/layout/shoppingcart_title.xml | 32 ++ app/src/main/res/layout/user_register.xml | 4 +- .../ExampleUnitTest.java | 2 +- orange.sql | 113 +++++++ orange/.gitignore | 31 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 118 +++++++ orange/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 50710 bytes orange/.mvn/wrapper/maven-wrapper.properties | 2 + orange/mvnw | 310 ++++++++++++++++++ orange/mvnw.cmd | 182 ++++++++++ orange/pom.xml | 83 +++++ .../orangesale_end/OrangeApplication.java | 13 + .../config/WebMvcConfigure.java | 30 ++ .../controller/OrangeMessageController.java | 82 +++++ .../controller/OrangeProductController.java | 152 +++++++++ .../controller/OrangeSaleController.java | 82 +++++ .../OrangeShoppingCartController.java | 15 + .../controller/OrangeUserController.java | 63 ++++ .../orangesale_end/entity/OrangeMessage.java | 17 + .../orangesale_end/entity/OrangeProduct.java | 21 ++ .../entity/OrangeProductSale.java | 20 ++ .../orangesale_end/entity/OrangeSale.java | 14 + .../entity/OrangeShoppingCart.java | 15 + .../orangesale_end/entity/OrangeUser.java | 16 + .../orangesale_end/mapper/MessageMapper.java | 32 ++ .../orangesale_end/mapper/ProductMapper.java | 55 ++++ .../orangesale_end/mapper/SaleMapper.java | 40 +++ .../mapper/ShoppingCartMapper.java | 11 + .../orangesale_end/mapper/UserMapper.java | 26 ++ .../service/MessageService.java | 44 +++ .../service/ProductService.java | 67 ++++ .../orangesale_end/service/SaleService.java | 110 +++++++ .../service/ShoppingCartService.java | 12 + .../orangesale_end/service/UserService.java | 35 ++ .../src/main/resources/application.properties | 18 + .../main/resources/mapper/MessageMapper.xml | 16 + .../main/resources/mapper/ProductMapper.xml | 26 ++ .../src/main/resources/mapper/SaleMapper.xml | 17 + .../src/main/resources/mapper/UserMapper.xml | 11 + orange/src/main/resources/static/back.jpeg | Bin 0 -> 147014 bytes .../main/resources/static/images/apple.png | Bin 0 -> 1988 bytes .../src/main/resources/static/images/juzi.png | Bin 0 -> 1898 bytes .../main/resources/static/images/lemon.png | Bin 0 -> 2954 bytes .../src/main/resources/static/images/li.png | Bin 0 -> 1862 bytes .../main/resources/static/images/orange.png | Bin 0 -> 6129 bytes .../main/resources/static/images/youzi.png | Bin 0 -> 1798 bytes 139 files changed, 3162 insertions(+), 494 deletions(-) create mode 100644 .idea/.name rename app/src/androidTest/java/com/example/{orangesale_05 => orangesale_end}/ExampleInstrumentedTest.java (81%) delete mode 100644 app/src/main/java/com/example/orangesale_05/dataoperation/OrangeDatabase.java delete mode 100644 app/src/main/java/com/example/orangesale_05/fragment/ProductFragment.java delete mode 100644 app/src/main/java/com/example/orangesale_05/fragment/ShoppingCartFragment.java rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/MainActivity.java (55%) rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/activity/CategoryActivity.java (89%) rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/activity/IndexActivity.java (77%) rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/activity/RegisterActivity.java (51%) rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/activity/UserActivity.java (87%) rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/adapter/Adapter.java (92%) create mode 100644 app/src/main/java/com/example/orangesale_end/adapter/ListViewAdapter.java rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/adapter/ProductAdapter.java (63%) create mode 100644 app/src/main/java/com/example/orangesale_end/entity/Condition.java create mode 100644 app/src/main/java/com/example/orangesale_end/entity/OrangeMessage.java create mode 100644 app/src/main/java/com/example/orangesale_end/entity/OrangeProduct.java create mode 100644 app/src/main/java/com/example/orangesale_end/entity/OrangeProductPack.java rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/entity/OrangeUser.java (91%) rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/entity/Product.java (91%) create mode 100644 app/src/main/java/com/example/orangesale_end/entity/ShoppingCart.java rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/fragment/IndexFragment.java (72%) rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/fragment/PearsonFragment.java (93%) create mode 100644 app/src/main/java/com/example/orangesale_end/fragment/ProductFragment.java rename app/src/main/java/com/example/{orangesale_05 => orangesale_end}/fragment/SetDetailFragment.java (89%) create mode 100644 app/src/main/java/com/example/orangesale_end/fragment/ShoppingCartFragment.java create mode 100644 app/src/main/java/com/example/orangesale_end/netrequest/OkHttpClientProduct.java create mode 100644 app/src/main/java/com/example/orangesale_end/netrequest/OkHttpMessage.java create mode 100644 app/src/main/java/com/example/orangesale_end/netrequest/OkHttpUser.java create mode 100644 app/src/main/java/com/example/orangesale_end/service/TimeService.java delete mode 100644 app/src/main/res/drawable-v24/ic_launcher_background.xml rename app/src/main/res/{drawable-v24 => drawable}/address.png (100%) create mode 100644 app/src/main/res/drawable/all.png rename app/src/main/res/{drawable-v24 => drawable}/apple.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/applep.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/arrow_down.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/arrow_left.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/arrow_right.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/button_login.xml (100%) rename app/src/main/res/{drawable-v24 => drawable}/button_register.xml (100%) create mode 100644 app/src/main/res/drawable/cart.png rename app/src/main/res/{drawable-v24 => drawable}/chengzi.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/city.png (100%) rename app/src/main/res/drawable/{dangao.JPG => dangao.png} (100%) create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml rename app/src/main/res/{drawable-v24 => drawable}/index.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/index_menu.xml (100%) rename app/src/main/res/{drawable-v24 => drawable}/juzi.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/juzip.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/lemon.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/lemonp.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/li.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/mangguo.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/orange.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/password.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/pearson.png (100%) create mode 100644 app/src/main/res/drawable/price.png rename app/src/main/res/{drawable-v24 => drawable}/product.png (100%) create mode 100644 app/src/main/res/drawable/salenum.png rename app/src/main/res/{drawable-v24 => drawable}/search.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/setting.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/sex.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/shoppingcart.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/shuiguo.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/spinner_drop_down_shape.xml (100%) rename app/src/main/res/{drawable-v24 => drawable}/sure_apssword.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/tab_menu_text.xml (100%) delete mode 100644 app/src/main/res/drawable/tiantianquan.JPG create mode 100644 app/src/main/res/drawable/time.png rename app/src/main/res/{drawable-v24 => drawable}/user.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/user_account.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/user_general.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/user_icon.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/user_pay.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/user_sex.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/xigua.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/xiguap.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/youzi.png (100%) rename app/src/main/res/{drawable-v24 => drawable}/youzip.png (100%) create mode 100644 app/src/main/res/layout/cart_have_product.xml create mode 100644 app/src/main/res/layout/cart_no_product.xml create mode 100644 app/src/main/res/layout/content_product_title.xml delete mode 100644 app/src/main/res/layout/content_shopping.xml create mode 100644 app/src/main/res/layout/product_condition_item.xml create mode 100644 app/src/main/res/layout/shopping_cart_product.xml create mode 100644 app/src/main/res/layout/shoppingcart_title.xml rename app/src/test/java/com/example/{orangesale_05 => orangesale_end}/ExampleUnitTest.java (86%) create mode 100644 orange.sql create mode 100644 orange/.gitignore create mode 100644 orange/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 orange/.mvn/wrapper/maven-wrapper.jar create mode 100644 orange/.mvn/wrapper/maven-wrapper.properties create mode 100644 orange/mvnw create mode 100644 orange/mvnw.cmd create mode 100644 orange/pom.xml create mode 100644 orange/src/main/java/com/example/orangesale_end/OrangeApplication.java create mode 100644 orange/src/main/java/com/example/orangesale_end/config/WebMvcConfigure.java create mode 100644 orange/src/main/java/com/example/orangesale_end/controller/OrangeMessageController.java create mode 100644 orange/src/main/java/com/example/orangesale_end/controller/OrangeProductController.java create mode 100644 orange/src/main/java/com/example/orangesale_end/controller/OrangeSaleController.java create mode 100644 orange/src/main/java/com/example/orangesale_end/controller/OrangeShoppingCartController.java create mode 100644 orange/src/main/java/com/example/orangesale_end/controller/OrangeUserController.java create mode 100644 orange/src/main/java/com/example/orangesale_end/entity/OrangeMessage.java create mode 100644 orange/src/main/java/com/example/orangesale_end/entity/OrangeProduct.java create mode 100644 orange/src/main/java/com/example/orangesale_end/entity/OrangeProductSale.java create mode 100644 orange/src/main/java/com/example/orangesale_end/entity/OrangeSale.java create mode 100644 orange/src/main/java/com/example/orangesale_end/entity/OrangeShoppingCart.java create mode 100644 orange/src/main/java/com/example/orangesale_end/entity/OrangeUser.java create mode 100644 orange/src/main/java/com/example/orangesale_end/mapper/MessageMapper.java create mode 100644 orange/src/main/java/com/example/orangesale_end/mapper/ProductMapper.java create mode 100644 orange/src/main/java/com/example/orangesale_end/mapper/SaleMapper.java create mode 100644 orange/src/main/java/com/example/orangesale_end/mapper/ShoppingCartMapper.java create mode 100644 orange/src/main/java/com/example/orangesale_end/mapper/UserMapper.java create mode 100644 orange/src/main/java/com/example/orangesale_end/service/MessageService.java create mode 100644 orange/src/main/java/com/example/orangesale_end/service/ProductService.java create mode 100644 orange/src/main/java/com/example/orangesale_end/service/SaleService.java create mode 100644 orange/src/main/java/com/example/orangesale_end/service/ShoppingCartService.java create mode 100644 orange/src/main/java/com/example/orangesale_end/service/UserService.java create mode 100644 orange/src/main/resources/application.properties create mode 100644 orange/src/main/resources/mapper/MessageMapper.xml create mode 100644 orange/src/main/resources/mapper/ProductMapper.xml create mode 100644 orange/src/main/resources/mapper/SaleMapper.xml create mode 100644 orange/src/main/resources/mapper/UserMapper.xml create mode 100644 orange/src/main/resources/static/back.jpeg create mode 100644 orange/src/main/resources/static/images/apple.png create mode 100644 orange/src/main/resources/static/images/juzi.png create mode 100644 orange/src/main/resources/static/images/lemon.png create mode 100644 orange/src/main/resources/static/images/li.png create mode 100644 orange/src/main/resources/static/images/orange.png create mode 100644 orange/src/main/resources/static/images/youzi.png diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..b507fd2 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +OrangeSale_04 \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 181e1ab..84a195a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,8 +4,8 @@ android { compileSdkVersion 30 buildToolsVersion "30.0.2" defaultConfig { - applicationId "com.example.orangesale_05" - minSdkVersion 23 + applicationId "com.example.orangesale_end" + minSdkVersion 26 targetSdkVersion 30 versionCode 1 versionName "1.0" @@ -21,7 +21,6 @@ android { sourceCompatibility = 1.8 targetCompatibility = 1.8 } - } dependencies { @@ -32,4 +31,6 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' implementation 'liji.library.dev:citypickerview:1.1.0' + implementation "com.squareup.okhttp3:okhttp:4.2.2" + implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.12' } diff --git a/app/src/androidTest/java/com/example/orangesale_05/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/orangesale_end/ExampleInstrumentedTest.java similarity index 81% rename from app/src/androidTest/java/com/example/orangesale_05/ExampleInstrumentedTest.java rename to app/src/androidTest/java/com/example/orangesale_end/ExampleInstrumentedTest.java index e315c38..f6450c2 100644 --- a/app/src/androidTest/java/com/example/orangesale_05/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/com/example/orangesale_end/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05; +package com.example.orangesale_end; import android.content.Context; @@ -22,6 +22,6 @@ public class ExampleInstrumentedTest { // Context of the app under test. Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.example.orangesale_05", appContext.getPackageName()); + assertEquals("com.example.orangesale_end", appContext.getPackageName()); } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e797e03..cf08926 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,12 +1,13 @@ - + package="com.example.orangesale_end"> + @@ -20,6 +21,10 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/example/orangesale_05/dataoperation/OrangeDatabase.java b/app/src/main/java/com/example/orangesale_05/dataoperation/OrangeDatabase.java deleted file mode 100644 index 7989a62..0000000 --- a/app/src/main/java/com/example/orangesale_05/dataoperation/OrangeDatabase.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.example.orangesale_05.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.db3", 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/app/src/main/java/com/example/orangesale_05/fragment/ProductFragment.java b/app/src/main/java/com/example/orangesale_05/fragment/ProductFragment.java deleted file mode 100644 index e95c4e4..0000000 --- a/app/src/main/java/com/example/orangesale_05/fragment/ProductFragment.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.orangesale_05.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.orangesale_05.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/app/src/main/java/com/example/orangesale_05/fragment/ShoppingCartFragment.java b/app/src/main/java/com/example/orangesale_05/fragment/ShoppingCartFragment.java deleted file mode 100644 index b0fd574..0000000 --- a/app/src/main/java/com/example/orangesale_05/fragment/ShoppingCartFragment.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.orangesale_05.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.orangesale_05.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/app/src/main/java/com/example/orangesale_05/MainActivity.java b/app/src/main/java/com/example/orangesale_end/MainActivity.java similarity index 55% rename from app/src/main/java/com/example/orangesale_05/MainActivity.java rename to app/src/main/java/com/example/orangesale_end/MainActivity.java index 5e567d3..4141925 100644 --- a/app/src/main/java/com/example/orangesale_05/MainActivity.java +++ b/app/src/main/java/com/example/orangesale_end/MainActivity.java @@ -1,9 +1,8 @@ -package com.example.orangesale_05; +package com.example.orangesale_end; import android.content.Intent; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; +import android.os.Looper; import android.view.View; import android.widget.Button; import android.widget.EditText; @@ -11,9 +10,12 @@ import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; -import com.example.orangesale_05.activity.IndexActivity; -import com.example.orangesale_05.activity.RegisterActivity; -import com.example.orangesale_05.dataoperation.OrangeDatabase; +import com.example.orangesale_end.activity.IndexActivity; +import com.example.orangesale_end.activity.RegisterActivity; +import com.example.orangesale_end.entity.OrangeUser; +import com.example.orangesale_end.netrequest.OkHttpUser; + +import java.io.IOException; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button registerButton, loginButton; @@ -23,7 +25,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.user_login); - init(); } @@ -36,19 +37,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe 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(); - } + Thread thread = new Thread(runnable); + thread.start(); break; } + } //界面组件初始化 @@ -63,18 +56,37 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe /** * 登录验证 - * - * @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; + Runnable runnable = new Runnable() { + @Override + public void run() { + String username = usernameText.getText().toString(); + String password = paswdEdit.getText().toString(); + OrangeUser orangeUser = new OrangeUser(); + orangeUser.setUsername(username); + orangeUser.setPassword(password); + OkHttpUser okHttpUser = new OkHttpUser(); + OrangeUser orangeUser1 = null; + try { + orangeUser1 = okHttpUser.userLogin(orangeUser); + if (orangeUser1 != null) { + Intent intent1 = new Intent(MainActivity.this, IndexActivity.class); + Bundle bundle = new Bundle(); + bundle.putString("username", usernameText.getText().toString()); + bundle.putString("password", orangeUser1.getPassword()); + bundle.putString("city", orangeUser1.getCity()); + bundle.putString("sex", orangeUser1.getSex()); + intent1.putExtras(bundle); + startActivity(intent1); + } else { + //解决在子线程中调用Toast的异常情况处理 + Looper.prepare(); + Toast.makeText(MainActivity.this, "账号或者密码错误", Toast.LENGTH_SHORT).show(); + Looper.loop(); + } + } catch (IOException e) { + e.printStackTrace(); + } } - return false; - } + }; } diff --git a/app/src/main/java/com/example/orangesale_05/activity/CategoryActivity.java b/app/src/main/java/com/example/orangesale_end/activity/CategoryActivity.java similarity index 89% rename from app/src/main/java/com/example/orangesale_05/activity/CategoryActivity.java rename to app/src/main/java/com/example/orangesale_end/activity/CategoryActivity.java index 9b82d77..72689f6 100644 --- a/app/src/main/java/com/example/orangesale_05/activity/CategoryActivity.java +++ b/app/src/main/java/com/example/orangesale_end/activity/CategoryActivity.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05.activity; +package com.example.orangesale_end.activity; import android.app.Activity; import android.app.FragmentManager; @@ -8,10 +8,10 @@ import android.widget.ListView; import androidx.annotation.Nullable; -import com.example.orangesale_05.R; -import com.example.orangesale_05.adapter.Adapter; -import com.example.orangesale_05.entity.Product; -import com.example.orangesale_05.fragment.SetDetailFragment; +import com.example.orangesale_end.R; +import com.example.orangesale_end.adapter.Adapter; +import com.example.orangesale_end.entity.Product; +import com.example.orangesale_end.fragment.SetDetailFragment; import java.math.BigDecimal; import java.util.ArrayList; diff --git a/app/src/main/java/com/example/orangesale_05/activity/IndexActivity.java b/app/src/main/java/com/example/orangesale_end/activity/IndexActivity.java similarity index 77% rename from app/src/main/java/com/example/orangesale_05/activity/IndexActivity.java rename to app/src/main/java/com/example/orangesale_end/activity/IndexActivity.java index 987ab18..07bffb4 100644 --- a/app/src/main/java/com/example/orangesale_05/activity/IndexActivity.java +++ b/app/src/main/java/com/example/orangesale_end/activity/IndexActivity.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05.activity; +package com.example.orangesale_end.activity; import android.app.Activity; import android.app.FragmentTransaction; @@ -9,11 +9,12 @@ import android.widget.LinearLayout; import androidx.annotation.Nullable; -import com.example.orangesale_05.R; -import com.example.orangesale_05.fragment.IndexFragment; -import com.example.orangesale_05.fragment.PearsonFragment; -import com.example.orangesale_05.fragment.ProductFragment; -import com.example.orangesale_05.fragment.ShoppingCartFragment; +import com.example.orangesale_end.R; +import com.example.orangesale_end.fragment.IndexFragment; +import com.example.orangesale_end.fragment.PearsonFragment; +import com.example.orangesale_end.fragment.ProductFragment; +import com.example.orangesale_end.fragment.ShoppingCartFragment; +import com.example.orangesale_end.service.TimeService; public class IndexActivity extends Activity implements View.OnClickListener { private IndexFragment indexFragment; @@ -28,6 +29,8 @@ public class IndexActivity extends Activity implements View.OnClickListener { setContentView(R.layout.activity_main); init(); initIndexFragment(); + Thread thread = new Thread(runnable); + thread.start(); } /** @@ -71,7 +74,7 @@ public class IndexActivity extends Activity implements View.OnClickListener { if (indexFragment == null) { indexFragment = new IndexFragment(); } - transaction.replace(R.id.main_content, indexFragment); + transaction.replace(R.id.main_content0, indexFragment); transaction.commit(); } @@ -84,7 +87,7 @@ public class IndexActivity extends Activity implements View.OnClickListener { if (productFragment == null) { productFragment = new ProductFragment(); } - transaction.replace(R.id.main_content, productFragment); + transaction.replace(R.id.main_content0, productFragment); transaction.commit(); } @@ -97,7 +100,7 @@ public class IndexActivity extends Activity implements View.OnClickListener { if (shoppingCartFragment == null) { shoppingCartFragment = new ShoppingCartFragment(); } - transaction.replace(R.id.main_content, shoppingCartFragment); + transaction.replace(R.id.main_content0, shoppingCartFragment); transaction.commit(); } @@ -113,8 +116,13 @@ public class IndexActivity extends Activity implements View.OnClickListener { pearsonFragment = new PearsonFragment(); pearsonFragment.setArguments(bundle); } - transaction.replace(R.id.main_content, pearsonFragment); + transaction.replace(R.id.main_content0, pearsonFragment); transaction.commit(); } + Runnable runnable = () -> { + Intent intent = new Intent(IndexActivity.this, TimeService.class); + startService(intent); + }; + } diff --git a/app/src/main/java/com/example/orangesale_05/activity/RegisterActivity.java b/app/src/main/java/com/example/orangesale_end/activity/RegisterActivity.java similarity index 51% rename from app/src/main/java/com/example/orangesale_05/activity/RegisterActivity.java rename to app/src/main/java/com/example/orangesale_end/activity/RegisterActivity.java index 9be3092..bfa98b7 100644 --- a/app/src/main/java/com/example/orangesale_05/activity/RegisterActivity.java +++ b/app/src/main/java/com/example/orangesale_end/activity/RegisterActivity.java @@ -1,10 +1,9 @@ -package com.example.orangesale_05.activity; +package com.example.orangesale_end.activity; -import android.content.ContentValues; import android.content.Intent; -import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.os.Bundle; +import android.os.Looper; import android.view.View; import android.widget.Button; import android.widget.EditText; @@ -16,8 +15,11 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import com.lljjcoder.citypickerview.widget.CityPicker; -import com.example.orangesale_05.R; -import com.example.orangesale_05.dataoperation.OrangeDatabase; +import com.example.orangesale_end.R; +import com.example.orangesale_end.entity.OrangeUser; +import com.example.orangesale_end.netrequest.OkHttpUser; + +import java.io.IOException; public class RegisterActivity extends AppCompatActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener { private EditText usernameEdit, passwordEdit, surePasswordEdit; @@ -60,7 +62,9 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL break; case R.id.reg_register: //注册验证方法 - validateRegister(); + //validateRegister(); + Thread thread = new Thread(runnable); + thread.start(); break; } @@ -106,44 +110,6 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL } - /** - * 注册验证 - */ - 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的值 @@ -151,18 +117,60 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL } /** - * 插入数据库的值 - * - * @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(); - } + Runnable runnable = new Runnable() { + @Override + public void run() { + 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); + OrangeUser orangeUser = new OrangeUser(); + orangeUser.setUsername(username); + orangeUser.setPassword(password); + orangeUser.setCity(city); + orangeUser.setSex(sexStr); + //将使用安卓自身带的SQLite数据库换成调用okhttp的方式 + OkHttpUser okHttpUser = new OkHttpUser(); + try { + if (okHttpUser.userRegister(orangeUser)) { + Intent intent = new Intent(RegisterActivity.this, IndexActivity.class); + intent.putExtras(bundle); + startActivity(intent); + } else { + Looper.prepare(); + Toast.makeText(RegisterActivity.this, "注册失败!", Toast.LENGTH_SHORT).show(); + Looper.loop(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } else { + Looper.prepare(); + Toast.makeText(RegisterActivity.this, "请选择地址", Toast.LENGTH_SHORT).show(); + Looper.loop(); + } + } else { + Looper.prepare(); + Toast.makeText(RegisterActivity.this, "账号或密码未填写", Toast.LENGTH_SHORT).show(); + Looper.loop(); + } + } else { + Looper.prepare(); + Toast.makeText(RegisterActivity.this, "两次密码输入不一致", Toast.LENGTH_SHORT).show(); + Looper.loop(); + } + } + }; } diff --git a/app/src/main/java/com/example/orangesale_05/activity/UserActivity.java b/app/src/main/java/com/example/orangesale_end/activity/UserActivity.java similarity index 87% rename from app/src/main/java/com/example/orangesale_05/activity/UserActivity.java rename to app/src/main/java/com/example/orangesale_end/activity/UserActivity.java index 836ae96..6fc5977 100644 --- a/app/src/main/java/com/example/orangesale_05/activity/UserActivity.java +++ b/app/src/main/java/com/example/orangesale_end/activity/UserActivity.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05.activity; +package com.example.orangesale_end.activity; import android.app.Activity; import android.content.Intent; @@ -10,7 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; -import com.example.orangesale_05.R; +import com.example.orangesale_end.R; public class UserActivity extends Activity implements View.OnClickListener { private ImageView userIconImage; @@ -38,7 +38,7 @@ public class UserActivity extends Activity implements View.OnClickListener { 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 = findViewById(R.id.user_searchProduct); userSearchProductLine.setOnClickListener(this); setData(); } @@ -57,10 +57,10 @@ public class UserActivity extends Activity implements View.OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { - case R.id.user_searchProduct: + /*case R.id.user_searchProduct: Intent intent1 = new Intent(UserActivity.this, CategoryActivity.class); startActivity(intent1); - break; + break;*/ } } } diff --git a/app/src/main/java/com/example/orangesale_05/adapter/Adapter.java b/app/src/main/java/com/example/orangesale_end/adapter/Adapter.java similarity index 92% rename from app/src/main/java/com/example/orangesale_05/adapter/Adapter.java rename to app/src/main/java/com/example/orangesale_end/adapter/Adapter.java index 9b9fc45..6aea22f 100644 --- a/app/src/main/java/com/example/orangesale_05/adapter/Adapter.java +++ b/app/src/main/java/com/example/orangesale_end/adapter/Adapter.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05.adapter; +package com.example.orangesale_end.adapter; import android.content.Context; import android.graphics.Color; @@ -9,7 +9,7 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; -import com.example.orangesale_05.R; +import com.example.orangesale_end.R; import java.util.List; diff --git a/app/src/main/java/com/example/orangesale_end/adapter/ListViewAdapter.java b/app/src/main/java/com/example/orangesale_end/adapter/ListViewAdapter.java new file mode 100644 index 0000000..599edb9 --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/adapter/ListViewAdapter.java @@ -0,0 +1,78 @@ +package com.example.orangesale_end.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.example.orangesale_end.R; +import com.example.orangesale_end.entity.Condition; + +import java.util.List; + +public class ListViewAdapter extends BaseAdapter { + private List conditionList; + private LayoutInflater layoutInflater; + private int selectedPosition = -1; + private int selectColor = Color.GRAY; + + public ListViewAdapter(Context context, List conditionList) { + this.conditionList = conditionList; + this.layoutInflater = LayoutInflater.from(context); + } + + @Override + public int getCount() { + return conditionList.size(); + } + + @Override + public Object getItem(int position) { + return conditionList.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) { + convertView = layoutInflater.inflate(R.layout.product_condition_item, null); + viewHolder = new ViewHolder(); + viewHolder.imageView = convertView.findViewById(R.id.condition_icon); + viewHolder.jiange = convertView.findViewById(R.id.image_jiange); + viewHolder.textView = convertView.findViewById(R.id.condition_name); + viewHolder.linearLayout = convertView.findViewById(R.id.item_bg); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + Condition condition = conditionList.get(position); + if (condition != null) { + viewHolder.imageView.setBackgroundResource(condition.getConditionIcon()); + viewHolder.textView.setText(condition.getConditionName()); + viewHolder.jiange.setBackgroundColor(Color.rgb(207, 207, 207)); + if (selectedPosition == position) { + viewHolder.linearLayout.setBackgroundColor(selectColor); + } + + } + return convertView; + } + + class ViewHolder { + ImageView imageView, jiange; + TextView textView; + LinearLayout linearLayout; + } + + +} diff --git a/app/src/main/java/com/example/orangesale_05/adapter/ProductAdapter.java b/app/src/main/java/com/example/orangesale_end/adapter/ProductAdapter.java similarity index 63% rename from app/src/main/java/com/example/orangesale_05/adapter/ProductAdapter.java rename to app/src/main/java/com/example/orangesale_end/adapter/ProductAdapter.java index dec9822..0c9633a 100644 --- a/app/src/main/java/com/example/orangesale_05/adapter/ProductAdapter.java +++ b/app/src/main/java/com/example/orangesale_end/adapter/ProductAdapter.java @@ -1,7 +1,6 @@ -package com.example.orangesale_05.adapter; +package com.example.orangesale_end.adapter; import android.content.Context; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,28 +8,29 @@ import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; -import com.example.orangesale_05.R; -import com.example.orangesale_05.entity.Product; +import com.example.orangesale_end.R; +import com.example.orangesale_end.entity.OrangeProductPack; import java.util.List; public class ProductAdapter extends BaseAdapter { - private List productList; + //private List productList; + private List orangeProductList; private LayoutInflater layoutInflater; - public ProductAdapter(Context context, List productList) { - this.productList = productList; + public ProductAdapter(Context context, List orangeProductList) { + this.orangeProductList = orangeProductList; this.layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { - return productList.size(); + return orangeProductList.size(); } @Override public Object getItem(int position) { - return productList.get(position); + return orangeProductList.get(position); } @Override @@ -51,12 +51,11 @@ public class ProductAdapter extends BaseAdapter { } else { viewHolder = (ViewHolder) convertView.getTag(); } - Product product = productList.get(position); - Log.i("product", "getView: "+product.toString()); + OrangeProductPack product = orangeProductList.get(position); if (product != null) { - viewHolder.productImage.setBackgroundResource(product.getImageUrlId()); - viewHolder.productName.setText(product.getProductName()); - viewHolder.productPrice.setText(String.valueOf(product.getProductPrice())); + viewHolder.productImage.setImageBitmap(product.getImgBitmap()); + viewHolder.productName.setText(product.getName()); + viewHolder.productPrice.setText(String.format("%s元", String.valueOf(product.getPrice()))); } return convertView; } @@ -65,4 +64,5 @@ public class ProductAdapter extends BaseAdapter { ImageView productImage; TextView productName, productPrice; } + } diff --git a/app/src/main/java/com/example/orangesale_end/entity/Condition.java b/app/src/main/java/com/example/orangesale_end/entity/Condition.java new file mode 100644 index 0000000..f4f2771 --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/entity/Condition.java @@ -0,0 +1,30 @@ +package com.example.orangesale_end.entity; + +public class Condition { + private Integer conditionIcon; + private String conditionName; + + public Integer getConditionIcon() { + return conditionIcon; + } + + public void setConditionIcon(Integer conditionIcon) { + this.conditionIcon = conditionIcon; + } + + public String getConditionName() { + return conditionName; + } + + public void setConditionName(String conditionName) { + this.conditionName = conditionName; + } + + @Override + public String toString() { + return "Condition{" + + "conditionIcon=" + conditionIcon + + ", conditionName='" + conditionName + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/example/orangesale_end/entity/OrangeMessage.java b/app/src/main/java/com/example/orangesale_end/entity/OrangeMessage.java new file mode 100644 index 0000000..c2885e9 --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/entity/OrangeMessage.java @@ -0,0 +1,52 @@ +package com.example.orangesale_end.entity; + +import java.sql.Timestamp; + +public class OrangeMessage { + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Timestamp getSendTime() { + return sendTime; + } + + public void setSendTime(Timestamp sendTime) { + this.sendTime = sendTime; + } + + public String getUsed() { + return used; + } + + public void setUsed(String used) { + this.used = used; + } + + private Integer id; + private String content; + private Timestamp sendTime; + private String used; + + @Override + public String toString() { + return "OrangeMessage{" + + "id=" + id + + ", content='" + content + '\'' + + ", sendTime=" + sendTime + + ", used='" + used + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/example/orangesale_end/entity/OrangeProduct.java b/app/src/main/java/com/example/orangesale_end/entity/OrangeProduct.java new file mode 100644 index 0000000..d938977 --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/entity/OrangeProduct.java @@ -0,0 +1,64 @@ +package com.example.orangesale_end.entity; + +import java.math.BigDecimal; +import java.sql.Timestamp; + +public class OrangeProduct { + private Integer id; + private String name; + private BigDecimal price; + private String imgUrl; + + @Override + public String toString() { + return "OrangeProduct{" + + "id=" + id + + ", name='" + name + '\'' + + ", price=" + price + + ", imgUrl='" + imgUrl + '\'' + + ", addTime=" + addTime + + '}'; + } + + public Timestamp getAddTime() { + return addTime; + } + + public void setAddTime(Timestamp addTime) { + this.addTime = addTime; + } + + private Timestamp addTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } +} diff --git a/app/src/main/java/com/example/orangesale_end/entity/OrangeProductPack.java b/app/src/main/java/com/example/orangesale_end/entity/OrangeProductPack.java new file mode 100644 index 0000000..b59eafd --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/entity/OrangeProductPack.java @@ -0,0 +1,66 @@ +package com.example.orangesale_end.entity; + +import android.graphics.Bitmap; + +import java.math.BigDecimal; +import java.sql.Timestamp; + +public class OrangeProductPack { + private Integer id; + private String name; + private Timestamp addTime; + private Bitmap imgBitmap; + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + private BigDecimal price; + + @Override + public String toString() { + return "OrangeProductPack{" + + "id=" + id + + ", name='" + name + '\'' + + ", addTime=" + addTime + + ", imgBitmap=" + imgBitmap + + ", price=" + price + + '}'; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Timestamp getAddTime() { + return addTime; + } + + public void setAddTime(Timestamp addTime) { + this.addTime = addTime; + } + + public Bitmap getImgBitmap() { + return imgBitmap; + } + + public void setImgBitmap(Bitmap imgBitmap) { + this.imgBitmap = imgBitmap; + } +} diff --git a/app/src/main/java/com/example/orangesale_05/entity/OrangeUser.java b/app/src/main/java/com/example/orangesale_end/entity/OrangeUser.java similarity index 91% rename from app/src/main/java/com/example/orangesale_05/entity/OrangeUser.java rename to app/src/main/java/com/example/orangesale_end/entity/OrangeUser.java index 48a19e8..b8a3d35 100644 --- a/app/src/main/java/com/example/orangesale_05/entity/OrangeUser.java +++ b/app/src/main/java/com/example/orangesale_end/entity/OrangeUser.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05.entity; +package com.example.orangesale_end.entity; public class OrangeUser { private Integer id; diff --git a/app/src/main/java/com/example/orangesale_05/entity/Product.java b/app/src/main/java/com/example/orangesale_end/entity/Product.java similarity index 91% rename from app/src/main/java/com/example/orangesale_05/entity/Product.java rename to app/src/main/java/com/example/orangesale_end/entity/Product.java index 411aac3..ffd8d80 100644 --- a/app/src/main/java/com/example/orangesale_05/entity/Product.java +++ b/app/src/main/java/com/example/orangesale_end/entity/Product.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05.entity; +package com.example.orangesale_end.entity; import java.math.BigDecimal; diff --git a/app/src/main/java/com/example/orangesale_end/entity/ShoppingCart.java b/app/src/main/java/com/example/orangesale_end/entity/ShoppingCart.java new file mode 100644 index 0000000..3144dee --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/entity/ShoppingCart.java @@ -0,0 +1,44 @@ +package com.example.orangesale_end.entity; + +public class ShoppingCart { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public Integer getProductId() { + return ProductId; + } + + public void setProductId(Integer productId) { + ProductId = productId; + } + + public Integer getNumber() { + return number; + } + + public void setNumber(Integer number) { + this.number = number; + } + + private Integer id; + private Integer userId; + private Integer ProductId; + /** + * 购买数量 + */ + private Integer number; +} diff --git a/app/src/main/java/com/example/orangesale_05/fragment/IndexFragment.java b/app/src/main/java/com/example/orangesale_end/fragment/IndexFragment.java similarity index 72% rename from app/src/main/java/com/example/orangesale_05/fragment/IndexFragment.java rename to app/src/main/java/com/example/orangesale_end/fragment/IndexFragment.java index 1c3c327..6a6c49e 100644 --- a/app/src/main/java/com/example/orangesale_05/fragment/IndexFragment.java +++ b/app/src/main/java/com/example/orangesale_end/fragment/IndexFragment.java @@ -1,6 +1,7 @@ -package com.example.orangesale_05.fragment; +package com.example.orangesale_end.fragment; import android.app.Fragment; +import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -12,20 +13,25 @@ import android.widget.SearchView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.example.orangesale_05.R; -import com.example.orangesale_05.adapter.ProductAdapter; -import com.example.orangesale_05.entity.Product; +import com.example.orangesale_end.R; +import com.example.orangesale_end.adapter.ProductAdapter; +import com.example.orangesale_end.entity.OrangeProductPack; +import com.example.orangesale_end.entity.Product; +import com.example.orangesale_end.netrequest.OkHttpClientProduct; +import java.io.IOException; 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; + private List productList; + private List list = new ArrayList<>(); @Nullable @Override @@ -41,7 +47,7 @@ public class IndexFragment extends Fragment implements View.OnClickListener { private void init(View view) { searchView = view.findViewById(R.id.searchView); searchView.setOnClickListener(this); - orangeLine = view.findViewById(R.id.baocui); + orangeLine = view.findViewById(R.id.bacui); orangeLine.setOnClickListener(this); youziLine = view.findViewById(R.id.sanmingzhi); youziLine.setOnClickListener(this); @@ -55,12 +61,11 @@ public class IndexFragment extends Fragment implements View.OnClickListener { lemonLine.setOnClickListener(this); mangguoLine = view.findViewById(R.id.shousimianbao); mangguoLine.setOnClickListener(this); - mangguoLine = view.findViewById(R.id.taosu); - mangguoLine.setOnClickListener(this); + appleLine = view.findViewById(R.id.taosu); + appleLine.setOnClickListener(this); gridView = view.findViewById(R.id.index_famous_gridview); - initData(); - productAdapter = new ProductAdapter(getActivity(), productList); - gridView.setAdapter(productAdapter); + //initData(); + new SearchProductTask().execute(); } @@ -114,5 +119,29 @@ public class IndexFragment extends Fragment implements View.OnClickListener { productList.add(product5); productList.add(product6); productList.add(product7); + + } + + /** + * 发送网络请求获取数据 + */ + class SearchProductTask extends AsyncTask> { + + @Override + protected List doInBackground(Void... voids) { + OkHttpClientProduct clientProduct = new OkHttpClientProduct(); + try { + list = clientProduct.getProductPack(); + } catch (IOException e) { + e.printStackTrace(); + } + return list; + } + + @Override + protected void onPostExecute(List orangeProducts) { + productAdapter = new ProductAdapter(getActivity(), list); + gridView.setAdapter(productAdapter); + } } } diff --git a/app/src/main/java/com/example/orangesale_05/fragment/PearsonFragment.java b/app/src/main/java/com/example/orangesale_end/fragment/PearsonFragment.java similarity index 93% rename from app/src/main/java/com/example/orangesale_05/fragment/PearsonFragment.java rename to app/src/main/java/com/example/orangesale_end/fragment/PearsonFragment.java index 8f997bf..2027e96 100644 --- a/app/src/main/java/com/example/orangesale_05/fragment/PearsonFragment.java +++ b/app/src/main/java/com/example/orangesale_end/fragment/PearsonFragment.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05.fragment; +package com.example.orangesale_end.fragment; import android.app.Fragment; import android.os.Bundle; @@ -12,7 +12,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.example.orangesale_05.R; +import com.example.orangesale_end.R; public class PearsonFragment extends Fragment implements View.OnClickListener { private ImageView userIconImage; diff --git a/app/src/main/java/com/example/orangesale_end/fragment/ProductFragment.java b/app/src/main/java/com/example/orangesale_end/fragment/ProductFragment.java new file mode 100644 index 0000000..6b8584b --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/fragment/ProductFragment.java @@ -0,0 +1,102 @@ +package com.example.orangesale_end.fragment; + +import android.app.Fragment; +import android.os.AsyncTask; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.GridView; +import android.widget.Spinner; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.example.orangesale_end.R; +import com.example.orangesale_end.adapter.ListViewAdapter; +import com.example.orangesale_end.adapter.ProductAdapter; +import com.example.orangesale_end.entity.Condition; +import com.example.orangesale_end.entity.OrangeProductPack; +import com.example.orangesale_end.netrequest.OkHttpClientProduct; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class ProductFragment extends Fragment { + private Spinner conditonListSpinner; + private ListViewAdapter listViewAdapter; + private List conditionList; + private GridView productGridView; + private List orangeProductList = new ArrayList<>(); + + @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); + init(view); + return view; + } + + /** + * 组件初始化方法 + * + * @param view + */ + private void init(View view) { + conditonListSpinner = view.findViewById(R.id.product_select_condition); + initCondList(); + listViewAdapter = new ListViewAdapter(getActivity(), conditionList); + conditonListSpinner.setAdapter(listViewAdapter); + productGridView = view.findViewById(R.id.product_list); + new SearchProductTask().execute(); + } + + /** + * 初始化conditionList + */ + private void initCondList() { + conditionList = new ArrayList<>(); + Condition allCondition = new Condition(); + allCondition.setConditionIcon(R.drawable.all); + allCondition.setConditionName("全部"); + Condition saleCondition = new Condition(); + saleCondition.setConditionIcon(R.drawable.salenum); + saleCondition.setConditionName("按销量高低排序"); + Condition timeCondition = new Condition(); + timeCondition.setConditionIcon(R.drawable.time); + timeCondition.setConditionName("按上市时间排序"); + Condition priceCondition = new Condition(); + priceCondition.setConditionIcon(R.drawable.price); + priceCondition.setConditionName("按商品价格排序"); + conditionList.add(allCondition); + conditionList.add(saleCondition); + conditionList.add(timeCondition); + conditionList.add(priceCondition); + } + + /** + * 发送网络请求获取数据 + */ + class SearchProductTask extends AsyncTask> { + + @Override + protected List doInBackground(Void... voids) { + OkHttpClientProduct clientProduct = new OkHttpClientProduct(); + try { + orangeProductList = clientProduct.getProductPack(); + } catch (IOException e) { + e.printStackTrace(); + } + return orangeProductList; + } + + @Override + protected void onPostExecute(List orangeProducts) { + ProductAdapter productAdapter = new ProductAdapter(getActivity(), orangeProductList); + productGridView.setAdapter(productAdapter); + } + } + + +} diff --git a/app/src/main/java/com/example/orangesale_05/fragment/SetDetailFragment.java b/app/src/main/java/com/example/orangesale_end/fragment/SetDetailFragment.java similarity index 89% rename from app/src/main/java/com/example/orangesale_05/fragment/SetDetailFragment.java rename to app/src/main/java/com/example/orangesale_end/fragment/SetDetailFragment.java index 7b9e60f..2541eac 100644 --- a/app/src/main/java/com/example/orangesale_05/fragment/SetDetailFragment.java +++ b/app/src/main/java/com/example/orangesale_end/fragment/SetDetailFragment.java @@ -1,4 +1,4 @@ -package com.example.orangesale_05.fragment; +package com.example.orangesale_end.fragment; import android.annotation.SuppressLint; import android.app.Fragment; @@ -13,8 +13,8 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.example.orangesale_05.R; -import com.example.orangesale_05.activity.CategoryActivity; +import com.example.orangesale_end.R; +import com.example.orangesale_end.activity.CategoryActivity; import java.util.Objects; diff --git a/app/src/main/java/com/example/orangesale_end/fragment/ShoppingCartFragment.java b/app/src/main/java/com/example/orangesale_end/fragment/ShoppingCartFragment.java new file mode 100644 index 0000000..6dcfd22 --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/fragment/ShoppingCartFragment.java @@ -0,0 +1,61 @@ +package com.example.orangesale_end.fragment; + +import android.app.Fragment; +import android.app.FragmentTransaction; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.example.orangesale_end.R; +import com.example.orangesale_end.entity.ShoppingCart; + +import java.util.ArrayList; +import java.util.List; + +public class ShoppingCartFragment extends Fragment implements View.OnClickListener { + private Button walkButton; + private List cartList = new ArrayList<>(); + private ProductFragment productFragment; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view; + if (cartList.size() > 0) { + //有商品 + view = LayoutInflater.from(getActivity()).inflate(R.layout.cart_have_product, container, false); + } else { + view = LayoutInflater.from(getActivity()).inflate(R.layout.cart_no_product, container, false); + } + init(view); + return view; + } + + /** + * 组件初始化 + */ + private void init(View view) { + walkButton = view.findViewById(R.id.random_search); + walkButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.random_search: + //开启事务,fragment的控制是由事务来实现的 + FragmentTransaction transaction = getFragmentManager().beginTransaction(); + if (productFragment == null) { + productFragment = new ProductFragment(); + } + transaction.replace(R.id.main_content0, productFragment); + transaction.commit(); + break; + } + } +} diff --git a/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpClientProduct.java b/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpClientProduct.java new file mode 100644 index 0000000..7708172 --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpClientProduct.java @@ -0,0 +1,80 @@ +package com.example.orangesale_end.netrequest; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.example.orangesale_end.entity.OrangeProduct; +import com.example.orangesale_end.entity.OrangeProductPack; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpClientProduct { + + /** + * 查询商品信息 + * + * @return + */ + public List getProduct() throws IOException { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder() + .url("http://10.21.221.183:8081/orange/product/search") + .build(); + Response response = okHttpClient.newCall(request).execute(); + JSONObject jsonObject = JSON.parseObject(Objects.requireNonNull(response.body()).string()); + List list = JSON.parseObject(jsonObject.getString("data"), new TypeReference>() { + }); + return list; + } + + /** + * 获取图片 + * + * @param imgUrl + * @return + * @throws IOException + */ + public Bitmap getImageBitMap(String imgUrl) throws IOException { + Bitmap bitmap; + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder() + .url(imgUrl) + .build(); + Response response = okHttpClient.newCall(request).execute(); + byte[] bytes = Objects.requireNonNull(response.body()).bytes(); + bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + return bitmap; + + } + + /** + * 封装信息 + * + * @return + * @throws IOException + */ + + public List getProductPack() throws IOException { + List packList = new ArrayList<>(); + List list = getProduct(); + for (OrangeProduct orangeProduct : list) { + OrangeProductPack orangeProductPack = new OrangeProductPack(); + orangeProductPack.setId(orangeProduct.getId()); + orangeProductPack.setImgBitmap(getImageBitMap(orangeProduct.getImgUrl())); + orangeProductPack.setAddTime(orangeProduct.getAddTime()); + orangeProductPack.setPrice(orangeProduct.getPrice()); + packList.add(orangeProductPack); + } + return packList; + } +} diff --git a/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpMessage.java b/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpMessage.java new file mode 100644 index 0000000..92e772e --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpMessage.java @@ -0,0 +1,39 @@ +package com.example.orangesale_end.netrequest; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.example.orangesale_end.entity.OrangeMessage; + +import java.io.IOException; +import java.util.Objects; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpMessage { + + /** + * 消费消息 + * + * @return + */ + public OrangeMessage consumeMessage() throws IOException { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder() + .url("http://10.21.221.183:8081/orange/message/consumeMessage") + .build(); + Response response = okHttpClient.newCall(request).execute(); + JSONObject jsonObject = JSON.parseObject(Objects.requireNonNull(response.body()).string()); + OrangeMessage orangeMessage = JSON.toJavaObject(jsonObject.getJSONObject("data"), OrangeMessage.class); + /** + * 消费完消息以后,设置消息为已读 + */ + Request request1 = new Request.Builder() + .url("http://10.21.221.183:8081/orange/message/updateMessage") + .build(); + okHttpClient.newCall(request1).execute(); + return orangeMessage; + } + +} diff --git a/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpUser.java b/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpUser.java new file mode 100644 index 0000000..d190cc6 --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/netrequest/OkHttpUser.java @@ -0,0 +1,71 @@ +package com.example.orangesale_end.netrequest; + +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.example.orangesale_end.entity.OrangeUser; + +import java.io.IOException; + +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class OkHttpUser { + /** + * 用户登录验证 + * + * @param orangeUser + */ + public OrangeUser userLogin(OrangeUser orangeUser) throws IOException { + OkHttpClient okHttpClient= new OkHttpClient(); + //数据类型为json格式 + MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); + //将对象转为JSON字符串 + String jsonStr = JSONObject.toJSONString(orangeUser); + + RequestBody requestBody = RequestBody.create(jsonStr, mediaType); + Request request = new Request.Builder() + .url("http://10.21.221.183:8081/orange/user/login") + .post(requestBody) + .build(); + + Response response = okHttpClient.newCall(request).execute(); + + String responseStr = response.body().string(); + System.out.println("responseStr = " + responseStr); + JSONObject jsonObject = JSON.parseObject(responseStr); + JSONObject jsonObject1 = jsonObject.getJSONObject("data"); + OrangeUser orangeUser1 = JSON.toJavaObject(jsonObject1, OrangeUser.class); + return orangeUser1; + } + + /** + * 用户注册 + * + * @param orangeUser + * @return + * @throws IOException + */ + public boolean userRegister(OrangeUser orangeUser) throws IOException { + OkHttpClient okHttpClient = new OkHttpClient(); + //数据类型为json格式 + MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); + //将对象转为JSON字符串 + String jsonStr = JSONObject.toJSONString(orangeUser); + RequestBody requestBody = RequestBody.create(jsonStr, mediaType); + Request request = new Request.Builder() + .url("http://10.21.221.183:8081/orange/user/register") + .post(requestBody) + .build(); + Response response = okHttpClient.newCall(request).execute(); + JSONObject jsonObject = JSON.parseObject(response.body().string()); + Log.i("register", "userRegister: "+jsonObject); + return jsonObject.getBoolean("flag"); + } + + +} diff --git a/app/src/main/java/com/example/orangesale_end/service/TimeService.java b/app/src/main/java/com/example/orangesale_end/service/TimeService.java new file mode 100644 index 0000000..b3e916f --- /dev/null +++ b/app/src/main/java/com/example/orangesale_end/service/TimeService.java @@ -0,0 +1,105 @@ +package com.example.orangesale_end.service; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.IBinder; +import android.util.Log; + +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; + +import com.example.orangesale_end.R; +import com.example.orangesale_end.entity.OrangeMessage; +import com.example.orangesale_end.netrequest.OkHttpMessage; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Objects; +import java.util.Timer; +import java.util.TimerTask; + +public class TimeService extends Service { + private static Timer timer = null; + private NotificationManager manager; + private NotificationCompat.Builder builder; + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } + + /** + * 清除通知 + */ + private void cleanAllNotification() { + manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + manager.cancelAll(); + if (timer != null) { + timer.cancel(); + timer = null; + } + + } + + /** + * 添加通知 + */ + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + long period = 60 * 1000; //1分钟一个周期 + if (timer == null) { + timer = new Timer(); + } + timer.schedule(new TimerTask() { + @Override + public void run() { + new ConsumeMessageTask().execute(); + } + }, 0, period); + + return super.onStartCommand(intent, flags, startId); + } + + class ConsumeMessageTask extends AsyncTask { + @Override + protected Void doInBackground(Void... voids) { + /** + * NotificationChannel是android8.0新增的特性,如果App的targetSDKVersion>=26, + * 没有设置channel通知渠道的话,就会导致通知无法展示。 + * 报错内容:Failed to post notification on channel “null” + */ + OkHttpMessage okHttpMessage = new OkHttpMessage(); + OrangeMessage orangeMessage; + try { + orangeMessage = okHttpMessage.consumeMessage(); + if (!Objects.isNull(orangeMessage)) { + Log.i("orangeMessage", "run: " + orangeMessage.toString()); + NotificationChannel channel = new NotificationChannel("channel", "通知", NotificationManager.IMPORTANCE_DEFAULT); + manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + manager.createNotificationChannel(channel); + builder = new NotificationCompat.Builder(TimeService.this); + Date date = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + builder.setContentTitle("来自橙一色的系统通知消息" + " " + formatter.format(date)); + builder.setSmallIcon(R.drawable.chengzi); + builder.setChannelId("channel"); + builder.setContentText(orangeMessage.getContent()); + builder.setAutoCancel(true); + builder.setDefaults(Notification.DEFAULT_ALL); + Notification notification = builder.build(); + manager.notify(1, notification); + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + } +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_background.xml b/app/src/main/res/drawable-v24/ic_launcher_background.xml deleted file mode 100644 index eed7a42..0000000 --- a/app/src/main/res/drawable-v24/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable-v24/address.png b/app/src/main/res/drawable/address.png similarity index 100% rename from app/src/main/res/drawable-v24/address.png rename to app/src/main/res/drawable/address.png diff --git a/app/src/main/res/drawable/all.png b/app/src/main/res/drawable/all.png new file mode 100644 index 0000000000000000000000000000000000000000..131c4fd5cbf997a1519dd40440bdd380a0971649 GIT binary patch literal 1045 zcmV+w1nT>VP)q?Rk(M)1uBc%`;<|FSx5J@HrrFBuT(1l9e zh(ZvONukA9qgdxFE!DQ#DilhW?LsLSsiHO;Gn1Cd%sb`Im~me6X5QCe@*s=MyZ785 z=YBuJCVyy?``{V46p3^SMQLQ_Mm&n9$6vem2#6OUuz(f)7WJj>cu9gQ;F6{d3g!*~ zhXCv-0|eu-L-&jx#sUcEQPAh8FZHcctRrAH66qx&-eRE3v>`KKWkI6r(De_gH~FPq zs4ZZ2WTYAS{7C>>&A?W`|0>Uca^n=Z@P`%D5||wx?gP=M0G_rA2Kzu6>Mj@|>P=j# z6}KjENmWk>;9X1DY5`}!QZ2#&1rpy>YojVKt7-edeA6~g7IXtFBB_f4@yljynF2Wy zX2s63c43@h3ECmvSmO#0bK!}v1%y}7u zl?@5JPTh%fhLve8WLZ_etGdovsl8;d6#GZ&NxWDUm{HXs0?t@Ds=oIQ1O#Py5lheFr#V5i1~f@ zy7E@1dx`-dCzRt`y3f6507ldNHh>9F!Kr{u%V(ZK$jV#v!aI|Dhd(d?$5I?2!i=Zr zbpjHxHr*CBcJXMM2L$l-W&i^Ga?BSlUJuH%cr?MCLV>qsrcN0|ex)V0U;Etvl>bE2 z{FmVpi8|K*q0J$RC*5ul{WdC<~2V;N7Bt+qPik z5$$fPBPboyzM=9d+OmsR3ydZB1yXR`Hqu1~nYe$ZEu5^@hUKS^H&fiyK*f8?OO{Xv zKn4~7gl2r9?`y@i1j@>h%e-~leS8E!o*An@c7cS?S9FY@_J`!oRXe0rfy(#MBtHjH zM4Cgbfj<#wV%irp+&G+Db;~v@ZhGKDEs|t7g22|C P00000NkvXXu0mjfWqIjS literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-v24/apple.png b/app/src/main/res/drawable/apple.png similarity index 100% rename from app/src/main/res/drawable-v24/apple.png rename to app/src/main/res/drawable/apple.png diff --git a/app/src/main/res/drawable-v24/applep.png b/app/src/main/res/drawable/applep.png similarity index 100% rename from app/src/main/res/drawable-v24/applep.png rename to app/src/main/res/drawable/applep.png diff --git a/app/src/main/res/drawable-v24/arrow_down.png b/app/src/main/res/drawable/arrow_down.png similarity index 100% rename from app/src/main/res/drawable-v24/arrow_down.png rename to app/src/main/res/drawable/arrow_down.png diff --git a/app/src/main/res/drawable-v24/arrow_left.png b/app/src/main/res/drawable/arrow_left.png similarity index 100% rename from app/src/main/res/drawable-v24/arrow_left.png rename to app/src/main/res/drawable/arrow_left.png diff --git a/app/src/main/res/drawable-v24/arrow_right.png b/app/src/main/res/drawable/arrow_right.png similarity index 100% rename from app/src/main/res/drawable-v24/arrow_right.png rename to app/src/main/res/drawable/arrow_right.png diff --git a/app/src/main/res/drawable-v24/button_login.xml b/app/src/main/res/drawable/button_login.xml similarity index 100% rename from app/src/main/res/drawable-v24/button_login.xml rename to app/src/main/res/drawable/button_login.xml diff --git a/app/src/main/res/drawable-v24/button_register.xml b/app/src/main/res/drawable/button_register.xml similarity index 100% rename from app/src/main/res/drawable-v24/button_register.xml rename to app/src/main/res/drawable/button_register.xml diff --git a/app/src/main/res/drawable/cart.png b/app/src/main/res/drawable/cart.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e1190318bac5a414c75ec24d955fae176d1a7c GIT binary patch literal 5573 zcmYM2cTm$ow}yYzNH?LV6qO)YXkq}RNRd#bOF()LH56&mqX>pBQZyhSL5dJTqy$1Q zQX~*TiWn(^6zLra2shuobLZQc-TiNOXZP$m@B73X8)|c~^0NW}z@e)HH>J&w|I^Pf z(?$gs`C$OyP11#{n?1H$vt@gI1relD;)x8Nu#7ve4n3RM+ljyC{S(I(;IvvR6ZN8zTQvOqoxIUR@S!j@(?) z7HX}w4=N!Rmo*X_%N9dhD_bXgkER01ccZ7R34`2@1p^)|GjHrBJ7yi|W)x0DURMM8 zQPe*RpIrNijYJ}mqjO2C%Ln+HTE_y$ZYuji^T|fulsc5tTz7I&17`0H@ESXvgz-I4 z-f;NG22eu-V$gS)0BcQ`a>w(jOZL#=)0|P%7@e}L?5zut1a~N?_@Z`x8dpB7NF&8(cHfLvNP=;R7JmAL)y(k4miVc?<)jY$f@}@}^d-yD` ztb{k6y!f*w<4ku^P|&8yrSIhfO_v78^VATcS~C0$_8H*EO!3}piBoyU!E0*e%dKKWkxq)Bs9B<=39Y}JitB(-JJ7g z!vowfb~CA5vOkQd%a3KxkpWVZlA3tIoXzKztu!wwm2a858^2t4j=MJMepgb3PM#Me{c^r7nnIXx+H_so&228js2|%q5<* zgE1#YusuC`D=#mvDpTCT&=BjryFx3tNYDlAdEQ zPa~y(RbB!geB@x+A4)8qyiDMAXjY5wJrBIG;(7>fc#84yB&cO$jY5J{^6f3T+<~vw zA@)krPAG=gSR+$E@D`fCbyu>Q<@=^0y;?p9Xw?4j0DjTp1!Zpz#nx7_@&kGc0>WdI z<1mHr-92RRSA7APtZX3KBm3V;N{R~?I3UYa!Ez^0p^bFR0elVlQMzA7-{?Ms8$y(u zul0sitre3=VRP#s^qkW|OBQDE%gaiAI^+Te;1@=s_mMMzjgOBXR7;$@!|e{Me!AMd z`3M9S%ID3;(ve66IyJ$$FhOfeNl&q1*9Gp#7o)?xKB;ovm3zjn z1|EDis-HB3U%gVoGY#WKV-NRVTRe%)wFZff2O06D35XC;S8y;ZrUqBESJR>tI_GTe zuV24Ha*8jw!aWY}Hi)9V+)Me|49@s82*9Gx11;Pa$I80PJ^&zEm;V#LPP~qeBxGND#sQ+{d7bZ$XREwt0A&YAcz)^82t+pjHTKTO_Av9( zVgR{dU?QdpRtRsoA(Q<)a9Ic0!UUM@@OtOO>)gFB;K{*&?+ye0mS8Lwa;a6qy0^bh z1lb17w(^2Ivp=NXUY7lOwyh;+zzC`=<0Fd8UKi)U`xb};cTxiQpyr|IQa2qVBeF?y z{i!VD#}#5eZyNde*~g=@1BHt*h|GTXBu0d$*37&9$Rk(nw zQc+-^*mqfA8-c-O`@^7AmzP*>I=tbZILA^)l~qC$bO|{p{`FL%ud7`}NJwaLe}7+P zVyXUcI3K&gjCN*Nk$jwYkaA^kFCGXM)Xtp`(;z>U%yP|z9Jg8_KPo!BQHKjGvNpFYXEowvDrizb^Y?Ew`>y5j zVAz*bBA}GA6AC}}Zk{ZkZmeiDhcgQ>-Glqop^l{ag>L6lwcp2S{&u3&dD;1S(XT%D z^Yk{j^F`Y9_Aez}u;2z@QFMv%`yU#x!ynV6(T6U zw-YdCS>{WVt3z=S?uDo%1=${4R2}wTe5CnXsSefCAl6f2GF-z#OUZ1SW2%ik7sH!G zlhtk_qX6LK9Xl)3=cB}m^df`K2fWOx^9L+5d*?&GSBB7F5G;Tb=ulc_gVzvwnfsk> z$D2*zCyHt-EYO5xYdz<|2DKQh9Ctf8rsNX9e%8dr-B^N_NXo3XOWzv9f0Mr@kX;wZ zK-;`-X#eKQ&v9a|0WxKftvYK8=g(Pmf1}z z!fRNN zkwk=VQ1@1p?4u6nqq#KIY&7BR&W%!ENy;C8h8V16?w^tO6~hUiXIIAXmW4gRp2=7QTYw4rZCtaU4m_Lwx=BtY z&{%Qg3O+OgW+>hi&c;J{tC&o+7}td4Uad^O5??d5y<0i}tdp@POe zIl2yx=7fRIZa1M*mRt^}(Bo)fwSBg$#<}#gkDM)U+$kg^6Zk4$*by8k+1}EfVOsz%0Mv)|J*p^;4%<_#& zXzmxCJkx)!q4y32l8hoVFF!-XJkcOs!wwerA4>f;{&ERoren3bl}lOv_4^DJe-n?Gv3 z!ikNIo#Yl$?hovtC-4`J9$Jhqofv5e5E}nN)zZ>Rxy4?n7osX7Q$^7{XKSXbi(uL; zdSyqY4h{}3me<{x73=>bTO(85OWu)nxVSdlvXKuH13AEv%J;8p%OqeHt+ROR1>oG$NCak*U%W)&aXLGtYV>kxV|Ii41>ZTQ99fn7O`$f}3sQmX z14lFj04ZVI4Z?)PGswL9Z0M9gK*P^yq|CI<+Xlx@<{hkC-utkX_aMI!aBloXMTwcT zv@~b-&aeEM?dIQ{jgiRs#5BbUU_I=LYM(0&6ifRPlm9!$AdN?X{sFhyO+U;q#q{i zBsa8BkHT5-sCeyf$i*$Tg15Mhou*7HP78?ENi%_Q$Cczg5Q|%%?V)L#54Rp+mGb zrB9Y=_Re4@=An!ardP5K<>h%C%l8t1l{>#v)XB1r3~)3{s$^}l?HjNe|A)gwD7NkP z!_6xF#+n#aS2MGFXD-cu5`kW-Ln*Cxr^g#(E$7n9o>CMQ6{n^sl=43b=d9G|N%$Lm zdhuwul#+>I2;jgCCTI{}**xl-vbD8EYy?BMLumU#UdNhqd@Q>j!g6d8S)z2RU^6dY zF88Qf{sMCv+jxXpm+!-@q6_xT+@jyS|6Fd`;q>J5|+(oB1IYNTjbU zP`q#2p&|s7AK!aeha!9iE~U$tqRus6NbumbCgJS_qK!|;aZky(4sA`B7!(B+-h zF|*5;k$r)vx<54`|C!-u_?zcBL7$lSK00S}B@9W#49c{AVd zMp1G4$7?Yr9vQ%l5ZrA3^{XP9#B_csk|^n>;QON{oiXSt_M873ad6d3rh-4RdM7e> zMZs29Nn)1z4P3AlXJHfSPpzf8YG3|G-&p5j@2PvKGDmL?T)mg5>-sms&26z@jp&`J z?kBi-2QEmD?xe8jTLl!+`8^XZtu>4L&uSMu_(}32cWTdhrQIj*OvPffLS3ozPcJw z)7pA!;juGET-O4>e-}82$EQU9O1O~}^dBj|-_fxfVZ<%@vovL^a}o|oYP@)yJRHmiPL^+c z5jOXd=SZz9N3!4Z{^avBwwoEEHOr;-K9j_|JBP;~g!9Y2?^6!Rv-PtX8=_FxYoq3c zioqkwmxOV?C12Dq50fA5|MIZjz8YeCzzO7!% znM&Y=Z1Prl8PNCT^X-nIrUg^*P_2ac65)-G>@WQK$=m&mS9|%NkHYe97pVpQ81xUT zqN#?ew`Lu}uYP@hClO%yJpJ=C?k>$Y^5nB7^-cx`FR+%}37-FE^t{5KxSy7$NNnX5 z(?7%3e(#E7raQ@|RrKEu@xcZ!4S%`$(xcmD2X61~?ftWWP^0dYb|VoHx&QpvB)9C4 zV?nmo@Zu3x9X6L9f9lz)E-^_6@vVmwL0h+hEOVJ%@2d>l2gaZ!$BS zWSND?Y*b>YoLAwP#1)=_RgbA=&uYbBBC}j$%aQUOIX?=G)Vj(Nt?#1gE?3_Q{nevR zkKUmf^+rxk&V?1ppR}+)Dee^XkK5j@Tu*G<)9>eDWT?yV%l z1GUPVO6Wgwed^{E;z5><>erGYB!Oc@N9>dayq%qn<+QM=xeF}A#tICp1U*vZDJ=G^hDvAwS@KMM#}t$1;$e>4k4`30%=s6cgpHSJU{ zF!mD(?Em6iJXWtyx38WOVYFX#I&b=3_Q(2MZEo+8nCf2l8LyIzA7?YQo}&NY}Wzsd~kf|B>tPpn6cMKd+6f&GweT_|oa++WnCc5|x~MY%2J z8YQ;>0My`A^|%GI`~0VO@Tc-PhS6>CkiptaD+)ML3bkjt02n4)3qpOsY2rUb(KXNT zZ3{bxnJvVs*+xNJ>x9KGmE5tWy`>u7nOiVYggkUVLC3o)b%H(+;sD+PN6JBQdb;1k z+TQK`s{!z&qjl9t;H_HELi@e0OYyxlV4xwQDgF&&EGU$`&7H<2j1!YdWlwnkQUK0x z{P}aiy5W&4Vs;&WDE=*99^KFWSL+`l>b1LDa_ppLmWL8kazgPPG-*LgIWpx> zt;BJ-|00{3ID(;4o2%Mr!^QulNLTv24*=-YV(1jtU2>zdgTu_Y#|En;A5ALB0Dcls z&(GUoMNxK;wDR5b{`oRxli>x)>&+J!{IHJ6vD?bNOwh9A25`u$ML=%!2siC&b@-oFSDN$?I+ywBey98U;7`UqqQ~0*CY@OEsLS|4Ze*eI39`2M$rJ+ zbiozpS{G^!#)jtnN3&dO*XT1De_sIkVLem>5#j|>x7jsLvvv7KDpdF_H$wBK5^ft9 z8v4)x+%c+g!N(=<0-K*7INK0sc0&?`esFec(}U4^gYLh~E@#W%vYLM8@^>qX zS4)daj|rxW1!?vnPg|@s?y<%G{C^fGk+;Y4*PYmpXSm~8#6N~ZDv@_MrE)gz@tUQd z(J^@Qe{7LDRi>%1cZv+k;RdvY-_EmSNm`Fhj*gC^&THL<1~Z_eY78*F&lW?u4Gw`&E4ItCMuyWiADSh`7xbAuMfre)RT}?xH J#XX0o{{y$Isht1- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-v24/chengzi.png b/app/src/main/res/drawable/chengzi.png similarity index 100% rename from app/src/main/res/drawable-v24/chengzi.png rename to app/src/main/res/drawable/chengzi.png diff --git a/app/src/main/res/drawable-v24/city.png b/app/src/main/res/drawable/city.png similarity index 100% rename from app/src/main/res/drawable-v24/city.png rename to app/src/main/res/drawable/city.png diff --git a/app/src/main/res/drawable/dangao.JPG b/app/src/main/res/drawable/dangao.png similarity index 100% rename from app/src/main/res/drawable/dangao.JPG rename to app/src/main/res/drawable/dangao.png diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..971add5 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable-v24/index.png b/app/src/main/res/drawable/index.png similarity index 100% rename from app/src/main/res/drawable-v24/index.png rename to app/src/main/res/drawable/index.png diff --git a/app/src/main/res/drawable-v24/index_menu.xml b/app/src/main/res/drawable/index_menu.xml similarity index 100% rename from app/src/main/res/drawable-v24/index_menu.xml rename to app/src/main/res/drawable/index_menu.xml diff --git a/app/src/main/res/drawable-v24/juzi.png b/app/src/main/res/drawable/juzi.png similarity index 100% rename from app/src/main/res/drawable-v24/juzi.png rename to app/src/main/res/drawable/juzi.png diff --git a/app/src/main/res/drawable-v24/juzip.png b/app/src/main/res/drawable/juzip.png similarity index 100% rename from app/src/main/res/drawable-v24/juzip.png rename to app/src/main/res/drawable/juzip.png diff --git a/app/src/main/res/drawable-v24/lemon.png b/app/src/main/res/drawable/lemon.png similarity index 100% rename from app/src/main/res/drawable-v24/lemon.png rename to app/src/main/res/drawable/lemon.png diff --git a/app/src/main/res/drawable-v24/lemonp.png b/app/src/main/res/drawable/lemonp.png similarity index 100% rename from app/src/main/res/drawable-v24/lemonp.png rename to app/src/main/res/drawable/lemonp.png diff --git a/app/src/main/res/drawable-v24/li.png b/app/src/main/res/drawable/li.png similarity index 100% rename from app/src/main/res/drawable-v24/li.png rename to app/src/main/res/drawable/li.png diff --git a/app/src/main/res/drawable-v24/mangguo.png b/app/src/main/res/drawable/mangguo.png similarity index 100% rename from app/src/main/res/drawable-v24/mangguo.png rename to app/src/main/res/drawable/mangguo.png diff --git a/app/src/main/res/drawable-v24/orange.png b/app/src/main/res/drawable/orange.png similarity index 100% rename from app/src/main/res/drawable-v24/orange.png rename to app/src/main/res/drawable/orange.png diff --git a/app/src/main/res/drawable-v24/password.png b/app/src/main/res/drawable/password.png similarity index 100% rename from app/src/main/res/drawable-v24/password.png rename to app/src/main/res/drawable/password.png diff --git a/app/src/main/res/drawable-v24/pearson.png b/app/src/main/res/drawable/pearson.png similarity index 100% rename from app/src/main/res/drawable-v24/pearson.png rename to app/src/main/res/drawable/pearson.png diff --git a/app/src/main/res/drawable/price.png b/app/src/main/res/drawable/price.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a125c637fe7e76f6205712079db25bf3a959e7 GIT binary patch literal 1047 zcmV+y1nB#TP)vI4VJ~OqYP#V z=xUQ0uykCXRpEq1z_Xz*4_N4$N-_aXeyzF7%b2FW-7@f*(3eLowb#iq0S1x&0^IEq zP=!;|c^P)G$#jzhk(wvTHrGI_`o++f?Jl-X84M!*8@R(IKojj!=*xhu4{N|6(%*s2 zwvJPDODnf<-^_FJXPQ4Nz*3}h+VK=~1Ii-8?l3Puw}VUtEJb=$;gz&2&A5Lu^kr9O zz*1FTROPdb!R^eHcf%2RyOp?Q2KUYBz{Va<11%3(b9A7b7ueq{fWk3>hkys$(h9r6 zyqs*NX$cra8UW>Xj@O=TL8RXUI~w|!sjwgiCywj$B7BjO&JRLgCS3umzzb=0QW&51 zWya`&NdExtRG~PXm&$=Jb*NUuye70AZUufQ`|_|W;6Ffr8ep=o912GynU*K2T5y4@ z`(LTCWu_>^hQI*m^iGKXn&y^+sryX4`6PsIldvu9rAwDu%|FgTn<$ejBJdwAaHUC?BTvie6!0 z`XyQFZU)zR>!idNYiy_#rDg@VdSv|A?vPF#*=2A$%6lmp{5JIEN!MfM4dDH@jx7L< zed>u2^JZ9(rmoR_~c116cgIRh(k%y9i^>IiW4t~O0J}$laX>kVYWW~*!XY)tUC;7*u7Dn7;bH_Hee=%e>9oTgN@&K~fcpjoMvnK>nz;g56CONr_SwstF=g1GNDWM8ING zO9Gl!zPl};5Cb6)n;m{wKO!N97!pI9)I@_83u?6N++$|iF1zi{+&i?I-efaB_I=NJ z=FZ$R_a4F+A2d?FD^C{{lOb{e&Lu{!9ghh;0QImXd#-Cc)jpCOz5%&>_Dz=6R{}y1 zj1mCZ3V>b^4ufGDM#f>$R;&jV6al>#VO2h< zYjbo2d}~C_f^?>|fL2-P4JO{8o#lp`VQkq6WM(-QKH3J^T(50+Aer7YT4V1HH4Oud zmxZ1I@g6_X>4|cP1uv&qtfghZuf8gZT|l1=w8r)(2TB37OG*4stHal7&CZ2bwFQ(n zIR#KQtOJ|J{oE())g2gb6egFT6hJE+dY!?W{6rPC^`L3@4zuu=UqIH?`Uy4gKGF&! z8rwW*OaMAx2-(-+rwF^jIq%`uCgkQ-&dhSxkNTj5E<R(QW99u6G@_$i$L;`!G=b4xv? zd}tTs{vDuc_d(Qt;ArK??}Lwjs*!>Y1){NeLjZ%908CK1>9H`x!YY*v+}Z@$)&yjY zgYn6+fmyf$`SvpK4`)>V%YmplF#+gonFJ~4pQhXmQL`1u$W$e`3JAd1x(B%BHpjzX z#UQt=R{JGCVsF))cQ76a%>(lRmCJ^s=`&QaevrW#oR|ZnA(|-S&ZDkb0zUV>cO0Vm zftJ|80l?r3VC?X6(B!EQ>$hvcIid?cgWHb+_sjxKnV#a~Bl{tDJ8Qsw5Echo%#R#E zD;!+Oz(!B~+)~(!V>AYzJq@|$RRtfaji~vaHlSF(4s?HLH29ntR>V6NAqg-ZQ9oj@ zqI@mXDnKMZVx2|u{{tp15}h(5Ua0{UJ$fyZHO!;)4svptaY{`%_`BB$O_W!{-ZhWL zkbAa)5AX8|)fTRG{5h`@vn$YIE=&as z2NwhIEOcVU22jC6BZA~3`yh93Q^lwZL`|nI``d0^eHdS!<|GPV3y|WzXx!^T> z>9`e?U{s|40x~K5I9{|RJpcdz07*qoM6N<$ Eg43}^wEzGB literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-v24/search.png b/app/src/main/res/drawable/search.png similarity index 100% rename from app/src/main/res/drawable-v24/search.png rename to app/src/main/res/drawable/search.png diff --git a/app/src/main/res/drawable-v24/setting.png b/app/src/main/res/drawable/setting.png similarity index 100% rename from app/src/main/res/drawable-v24/setting.png rename to app/src/main/res/drawable/setting.png diff --git a/app/src/main/res/drawable-v24/sex.png b/app/src/main/res/drawable/sex.png similarity index 100% rename from app/src/main/res/drawable-v24/sex.png rename to app/src/main/res/drawable/sex.png diff --git a/app/src/main/res/drawable-v24/shoppingcart.png b/app/src/main/res/drawable/shoppingcart.png similarity index 100% rename from app/src/main/res/drawable-v24/shoppingcart.png rename to app/src/main/res/drawable/shoppingcart.png diff --git a/app/src/main/res/drawable-v24/shuiguo.png b/app/src/main/res/drawable/shuiguo.png similarity index 100% rename from app/src/main/res/drawable-v24/shuiguo.png rename to app/src/main/res/drawable/shuiguo.png diff --git a/app/src/main/res/drawable-v24/spinner_drop_down_shape.xml b/app/src/main/res/drawable/spinner_drop_down_shape.xml similarity index 100% rename from app/src/main/res/drawable-v24/spinner_drop_down_shape.xml rename to app/src/main/res/drawable/spinner_drop_down_shape.xml diff --git a/app/src/main/res/drawable-v24/sure_apssword.png b/app/src/main/res/drawable/sure_apssword.png similarity index 100% rename from app/src/main/res/drawable-v24/sure_apssword.png rename to app/src/main/res/drawable/sure_apssword.png diff --git a/app/src/main/res/drawable-v24/tab_menu_text.xml b/app/src/main/res/drawable/tab_menu_text.xml similarity index 100% rename from app/src/main/res/drawable-v24/tab_menu_text.xml rename to app/src/main/res/drawable/tab_menu_text.xml diff --git a/app/src/main/res/drawable/tiantianquan.JPG b/app/src/main/res/drawable/tiantianquan.JPG deleted file mode 100644 index c1c4f253c5458edef2c24060628e4dc063511e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68948 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 z 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-v24/user.png b/app/src/main/res/drawable/user.png similarity index 100% rename from app/src/main/res/drawable-v24/user.png rename to app/src/main/res/drawable/user.png diff --git a/app/src/main/res/drawable-v24/user_account.png b/app/src/main/res/drawable/user_account.png similarity index 100% rename from app/src/main/res/drawable-v24/user_account.png rename to app/src/main/res/drawable/user_account.png diff --git a/app/src/main/res/drawable-v24/user_general.png b/app/src/main/res/drawable/user_general.png similarity index 100% rename from app/src/main/res/drawable-v24/user_general.png rename to app/src/main/res/drawable/user_general.png diff --git a/app/src/main/res/drawable-v24/user_icon.png b/app/src/main/res/drawable/user_icon.png similarity index 100% rename from app/src/main/res/drawable-v24/user_icon.png rename to app/src/main/res/drawable/user_icon.png diff --git a/app/src/main/res/drawable-v24/user_pay.png b/app/src/main/res/drawable/user_pay.png similarity index 100% rename from app/src/main/res/drawable-v24/user_pay.png rename to app/src/main/res/drawable/user_pay.png diff --git a/app/src/main/res/drawable-v24/user_sex.png b/app/src/main/res/drawable/user_sex.png similarity index 100% rename from app/src/main/res/drawable-v24/user_sex.png rename to app/src/main/res/drawable/user_sex.png diff --git a/app/src/main/res/drawable-v24/xigua.png b/app/src/main/res/drawable/xigua.png similarity index 100% rename from app/src/main/res/drawable-v24/xigua.png rename to app/src/main/res/drawable/xigua.png diff --git a/app/src/main/res/drawable-v24/xiguap.png b/app/src/main/res/drawable/xiguap.png similarity index 100% rename from app/src/main/res/drawable-v24/xiguap.png rename to app/src/main/res/drawable/xiguap.png diff --git a/app/src/main/res/drawable-v24/youzi.png b/app/src/main/res/drawable/youzi.png similarity index 100% rename from app/src/main/res/drawable-v24/youzi.png rename to app/src/main/res/drawable/youzi.png diff --git a/app/src/main/res/drawable-v24/youzip.png b/app/src/main/res/drawable/youzip.png similarity index 100% rename from app/src/main/res/drawable-v24/youzip.png rename to app/src/main/res/drawable/youzip.png diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 8efbc79..b9990ed 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -15,7 +15,7 @@ --> diff --git a/app/src/main/res/layout/cart_have_product.xml b/app/src/main/res/layout/cart_have_product.xml new file mode 100644 index 0000000..c1d9101 --- /dev/null +++ b/app/src/main/res/layout/cart_have_product.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cart_no_product.xml b/app/src/main/res/layout/cart_no_product.xml new file mode 100644 index 0000000..9f4a2f1 --- /dev/null +++ b/app/src/main/res/layout/cart_no_product.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + +