diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..aa724b7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..baaea39
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+Fruit
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..61a9130
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml
new file mode 100644
index 0000000..70f212e
--- /dev/null
+++ b/.idea/dbnavigator.xml
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..614b471
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..84d03c2
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..a5f05cd
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..639900d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..d55f2cc
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,51 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "30.0.3"
+
+ defaultConfig {
+ applicationId "com.example.fruit"
+ minSdkVersion 16
+ targetSdkVersion 30
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+ implementation 'com.google.android.material:material:1.1.0'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ testImplementation 'junit:junit:4.+'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ //litePal
+ implementation 'org.litepal.android:core:1.6.1'
+ //glide图片加载框架
+ implementation 'com.github.bumptech.glide:glide:4.11.0'
+ //recyclerview
+ implementation 'androidx.recyclerview:recyclerview:1.1.0'
+ compile 'com.google.code.gson:gson:2.7'
+ //网络请求
+ implementation 'com.squareup.okhttp3:okhttp:4.4.0'
+ implementation 'com.squareup.okhttp3:logging-interceptor:4.4.0'
+ implementation 'com.zhy:okhttputils:2.0.0' //glide图片加载框架
+ implementation 'com.github.bumptech.glide:glide:3.6.1'
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/example/fruit/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/fruit/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..e06f5b0
--- /dev/null
+++ b/app/src/androidTest/java/com/example/fruit/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.fruit;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.example.fruit", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..80dfae8
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/assets/db.json b/app/src/main/assets/db.json
new file mode 100644
index 0000000..9c26b45
--- /dev/null
+++ b/app/src/main/assets/db.json
@@ -0,0 +1,223 @@
+{
+ "fruit": [
+ {
+ "typeId":0,
+ "title": "烟台红富士苹果水果新鲜当季整箱应季一级脆甜包邮",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/908/28/95cbf2bab4eee7d625c24cb2c09ca369FBFN6f.jpg",
+ "content": "烟台富士苹果具有个大、圆润饱满、果质甜脆、成熟期晚和耐储存的特点。充足的光照条件能够使烟台富士苹果甜脆可口,水果中含有大量维生素和微量元素成分,能够帮助人体更好的消化,还具有降脂降压、美容养颜和改善便秘的作用功效。\n\n烟台富士苹果生产量大,个大量重,平均一个在260克左右。外形圆润,颜色深红,部分带有黄色。苹果表面平滑,部分苹果表面表皮上有竖纹和小黄点,苹果甜脆可口,果肉为黄白色。烟台富士成熟期比较晚,苹果长时间储存也不会影响口感。\n\n烟台富士苹果对生长环境要求较高,适合在高海拔区域生长。受海拔影响,海拔越高,昼夜温差越大,越有利于水果糖分的积累,使苹果更甜,颜色更鲜艳。但红富士不耐寒,树木在生长期间若受寒就会被冻坏,栽养过程中需要做好防寒防冻措施。\n\n烟台富士苹果喜光照,喜欢干燥的温带气候环境,怕寒怕冻。烟台富士苹果树适宜在16度左右的环境下生长,需要充足的光照保证果实的质量和数量。多生长在山地、平地等光照条件较好的位置,在我国山东、华北和西北等地区有栽培。\n\n富士苹果含有大量的果糖、果胶和维生素等成分,能够补充人体能量和营养,促进人体新陈代谢,还有降脂和保养皮肤的作用功效。它含有钾成分和黄酮类物质,能够保护血管,增强人体免疫力,具有降压和抗癌的作用。",
+ "issuer":"18.80",
+ "date":"2021-9-28 19:35:14"
+ }, {
+ "typeId":0,
+ "title": "威海无花果新鲜水果现摘现发青皮无花果应季水果",
+ "img": "https://gd4.alicdn.com/imgextra/i4/2210180086598/O1CN01eiqF5H1ybvwRluqcT_!!2210180086598.jpg",
+ "content": "威海无花果的基本介绍\n无花果属桑科,无花果属,果型扁圆、球型或倒卵型,成熟时皮色浅黄或浅绿,果肉浅红或深红。果甘甜,富含葡萄糖、果糖、蛋白质、脂肪及多种维生素。根、叶、果均可入药,治疗痢疾、痔瘘、肠炎、腹泻等病症。果可鲜食,制果酱、罐头、果干、果脯、蜜饯和酿酒等。具有结果早,产量高,病虫害少,土壤适宜性强等优点。\n营养价值\n药用价值\n健胃清肠,消肿解毒。治肠炎,痢疾,便秘,痔疮,喉痛,痈疮疥癣,利咽喉,开胃驱虫。\n用于食欲不振,脘腹胀痛,痔疮便秘,消化不良,痔疮,脱肛,腹泻、乳汁不足,咽喉肿痛,热痢,咳嗽多痰等症。\n观赏价值\n无花果树势优雅,是庭院、公园的观赏树木,一般不用农药,是一种纯天然无公害树木。其叶片大,呈掌状裂,叶面粗糙,具有良好的吸尘效果,如与其他植物配置在一起,还可以形成良好的防噪声屏障。无花果树能抵抗一般植物不能忍受的有毒气体和大气污染,是化工污染区绿化的好树种。此外,无花果适应性强,抗风、耐旱、耐盐碱,在干旱的沙荒地区栽植,可以起到防风固沙、绿化荒滩地作用。\n产品特点\n威海无花果有10余个品种,主栽品种为青皮、布兰瑞克等,多数品种夏、秋两季结果,6—11月份陆续成熟。果实皮薄无核,肉质柔软,甘甜爽口,\n获奖荣誉\n2010年,经中国国家质检总局审核通过,决定从2010年5月24日起,对威海无花果实施国家地理标志产品保护。",
+ "issuer":"23.80",
+ "date":"2021-9-28 19:35:14"
+ }, {
+ "typeId":0,
+ "title": "东北海棠果可口新鲜水果小果5斤 整箱清脆酸爽",
+ "img": "https://sbike.cn/z/haitangguo/1.jpg",
+ "content": "海棠果:别名山楂海棠,为蔷薇目、蔷薇科、苹果属、蔷薇系列农作物,原产于亚洲中国,长白山西南坡海拔1100-1300m的针阔混交林中。1920年命名。初夏,一簇簇白花在枝顶集成的伞状花序,随山风舞动,在绿叶的映衬下显得素雅而美丽。秋天,金红如玛瑙珠般亮泽的果实挂满枝头,令人垂涎欲滴。因此是培育苹果属矮化品种的遗传基因库,也是研究苹果属抗寒性的宝贵材料。海棠果的果实与山楂十分相似,区别在于海棠果上有八道棱状突起,且表皮光滑,山楂的表皮比较粗糙。。\n\n属较为珍稀的野生植物,花果并茂,有很高的观赏价值。果实比苹果小,可食用,口感较为松散,味道酸甜,富含维生素C,可生食和制作果汁、果酱。适量食用,能助消化及健脾胃、止咳化痰。还能够补充人体需要的维他命及其糖源。\n\n颜色分类:红色_黄色 \n作物分类:仁果 \n味道分类:酸甜 \n形状分类:球形 \n光照需求:中强 \n开花季节:夏季 \n培育难度:较难 \n适宜温度:20℃±5℃ \n酸碱范围:5.5±.4(PH)",
+ "issuer":"28.00",
+ "date":"2021-9-28 19:35:14"
+
+ }, {
+ "typeId":0,
+ "title": "火龙果五斤新鲜当季水果大果红肉十整箱一级包邮",
+ "img": "http://www.tesegu.com/public/upload/photos/000/000/095/20/91f329fa1873352ae25ef0c8443ef5b28z88e8.jpg",
+ "content": "火龙果的基本介绍\n火龙果是海南省三亚市的特产。火龙果又称红龙果、青龙果,是仙人掌蜜果的新品种,原产于墨西哥中美洲热带地区,近年三亚市场出现了一种紫芯火龙果,果重250克以上,味道很甜,多汁。\n营养价值\n1.火龙果中含糖量较高,水分83.75克,还有丰富的蛋白质、膳食纤维、维生素B2、维生素B3、维生素C、铁、磷、镁、钾、胡萝卜素、果糖、葡萄糖、水溶性膳食纤维。\n2.含有特有的植物性蛋白和花青素。\n3.火龙果中含铁元素量比一般水果要高。\n4.火龙果是一种低能量、高纤维的水果,水溶性膳食纤维含量非常丰富。\n产品特点\n果实,呈椭圆形,直径10-12厘米,外观为红色或黄色,有绿色圆角三角形的叶状体,白色、红色或黄色果肉,具有黑色种子的水果。\n历史民俗\n一位贫苦的阿兹特克妇女在沙漠中迷路,疼痛而呼救无门,处境十分危险,正在她陷入绝望奄奄一息,幻觉中慢慢进入另一个世界的路上……\n悠悠中听到一股上天传来却十分清晰有力的声音!那声音告诉她赶快食用身旁的植物!赶快食用身旁的植物!她艰难地伸手去摸,已睁不开眼的她却幻觉到身旁全是盘枝错落、蔓延无度的量天尺,在这片特别酷热的沙漠上几乎没有其它植物,她幻觉中看到闪烁的红光,那是点缀在量天尺丛中星星点点的火龙果,如一把把猎猎跃动的火苗又如一颗颗卟卟跳动的心脏在此起彼伏地呼喊和激励着她挺住!一习小风千百万个满怀抱拥巨大百合花的妙龄佳丽向她跑来!\n如梦如幻中,她的手触摸到了一根吹来,她感觉到了一群群摇曳多姿的仙女和一簇簇温莞灿烂的鲜花在眼前交替变换着,象是碧绿而肥厚的量天尺,当她神奇般使力拉扯并折断它时,手被刺得血淋淋的了,但她没有感觉疼痛,她似乎在被一种神奇的力量指使着,机械般地啃咬着这支肥厚的量天尺,又吃下了一颗鲜红夺目的火龙果,……\n就在这近午时分,太阳更显毒狠的时刻,神奇的事件发生了!这位阿兹特克妇女舒醒过来了,体力快速恢复了,几近干裂的嘴唇魔幻般红润起来,并如波浪式地渐次传遍全身,顺利的走出沙漠!\n火龙果的传说从此代代相传下来,量天尺被人们奉为神仙草,火龙果亦被称为神仙果、仙蜜果,无论其枝条、花朵、果实还是根系都成为当地人们不可缺少的独具药食功能的特别作物。作为一种神圣的象征,量天尺火龙果被世人敬重,这个传统后来随着欧洲殖民主义在全球的侵略扩张而传遍了全球。火龙果在人类可食植物果实中位居上流,并蕴意吉祥、健康、富贵、长寿等人类众多美好的理想,人们无论是拜见亲友还是探望病人,随手携带的果蓝中央必备一只火龙果,预示着诸多良好祈望,无论上至国家领导还是普通百姓,供奉祖先时都常离不开火龙果。\n三亚火龙果的品尝吃法\n火龙果的果皮里面因为不含单宁酸和单宁,所以不会像一般的水果皮那样觉得涩口,但是由于它肉质化了,所以口感还是可以让人接受的。在吃火龙果时,可以用小刀刮下内层的紫色果皮—他们可以生吃,也可以凉拌或者像霸王花一样放入汤里。",
+ "issuer":"30.80",
+ "date":"2021-9-28 19:35:14"
+ }, {
+ "typeId":0,
+ "title": "四川攀枝花芒果新鲜包邮当季水果整箱应季甜芒果",
+ "img": "http://www.tesegu.com/public/upload/photos/000/000/984/89/c7aebd77eee9dc61d35b1035f00f8884Mpv1h6.jpg",
+ "content": "芒果的基本介绍\n芒果\"水果之王\",适性于亚热带的木本水果,永德县则是全国为数不多的主产区之一,丰富的热区资源,给芒果生长带来了有利条件。历经历届县委、政府的高度重视,永德建成了云南省最大的芒果生产基地,因其拥有4.3万亩的芒果面积而被誉为 \"芒果之乡\"。\n营养价值\n芒果果实含有糖、蛋白质、粗纤维,芒果所含有的维生素A的前体胡萝卜素成分特别高,是所有水果中少见的。其次维生素C含量也不低。矿物质、蛋白质、脂肪、糖类等,也是其主要营养成分。\n产品特点\n芒果又名檬果、漭果、闷果、蜜望、望果、庵波罗果,漆树科。芒果的外形很有趣:有的为鸡蛋形,也有圆形、肾形、心形;皮色有多种:浅绿色、黄色、深红色;果肉为黄色,有纤维,味道酸甜不一,有香气,汁水多而果核大。芒果集热带水果精华于一身,被誉为“热带水果之王”。\n历史民俗\n永德县芒果栽培历史悠久,早在三百多年前有了人工栽培。现永康镇端德村端楞组李0承包地内保留一株有三百多年以上树龄的\"三年芒\"老果树,如今还果实累累,单株年产鲜芒果1200公斤以上。在永德县1000米以下地区,到处可见到野生野长的芒果树。品种有:小香芒、三年芒等品种,据云南省芒果专家李子天认为,永德县的热区属芒果起源地之一。\n永德县自一九七四年,永康林业站由西双版纳热作所引入马切苏芒果试种,到一九八0年,单株产量到50公斤以上。一九八二年在勐底旧寨沟,开建了连片芒果园360亩,以后陆续从西双版纳引进了芒果品种11个,并请热作所的芒果专家李子天到农场作栽培管理技术指导,到一九八七年种植成功,并在农场推广。一九八七年,永德县委、政府决定利用世界银行贷款发展商品性芒果园,到一九八九年底止,全县种植商品性芒果园6973亩(含农场4000亩)。\n永德芒果的制作方法\n芒果布丁\n材料:芒果1只约500克左右,牛奶100克,鱼胶粉10克,水3大匙(用于溶鱼胶粉),砂糖60克,淡奶油100克\n做法\n1、芒果去皮,顺着果核横剖成两半,一半切大块搅拌成泥,一半切丁待用\n2、牛奶加砂糖小火加热至80度左右,熄火后将泡发的鱼胶粉倒入,搅拌使其溶化\n3、一半芒果和淡奶油放入搅拌机中搅拌成泥(如果喜欢细腻口感的过筛)\n4、将芒果泥倒入稍冷却的牛奶中混合\n5、将芒果丁加入,混合均匀\n6、装入模具中(若要倒扣,事先在模具内抹黄油),放入冰箱冷藏至凝固即可\n7、芒果布丁凝固后,用刀插入沿碗边旋转一圈,倒扣,用芒果装饰,并浇上芒果酱\n获奖荣誉\n一九九0年,永德县生产的大白玉芒果,在全省热果评选工作会上,被评为全省优质芒果商品第一名,同时永德县也被评列为全省发展水果商品生产基地县之一。",
+ "issuer":"20.80",
+ "date":"2021-9-28 19:35:14"
+ }, {
+ "typeId":0,
+ "title": "罗汉果大果黄金脱水罗汉果白芯泡茶正品特级大果",
+ "img": "http://www.tesegu.com/public/upload/2018/e3xHOsU3ygpM9ZAebdC18mDlp6GVaBZWDW8NKD.jpg",
+ "content": "罗汉果的基本介绍\n罗汉果是一种藤状植物,盛产于桂林市永福县的山区。是名贵的药材、高级清凉饮料兼调味佳品。现永福县罗汉果种植面积达35000多亩,永福罗汉果年产果近2亿个,其中70%以上的永福罗汉果都集中在永福县龙江乡境内。\n营养价值\n成熟的罗汉果含有丰富的糖分,味美香甜,既有清热润肺,化痰止咳,益肝健脾,降血的作用,又有防治呼吸道感染和抗癌的功效,食用其干果,味美香甜,含丰富的葡萄糖,有清热、润肺、止咳、化痰、益肝、健脾、提神生津的作用,还有降低高血压的功效。\n产品特点\n香气浓郁,鲜甜爽口,生津止渴,清肝润肺,化痰止咳,明目益思,回味无穷。罗汉果还可与绿茶、桂花、绿豆等配制成各具特色的保健饮料。\n历史民俗\n相传永福县的一位瑶族农民,在一次上山打柴时,左手背不慎被野蜂蜇了一下,又胀又痛。于是他顺手从身边一条藤子上摘下一个野果擦伤,结果胀痛止住。他感到奇怪,用鼻子闻,野果有一种清香,用嘴巴尝,它清甜如蜜。此时后来被一位叫罗汉的乡村医生知道了,他请那位瑶族农民带他上山踩果,并对这种野果反复研究,用来治疗咳嗽等病,效果很好。后来,人们为了纪念这位瑶族医生,而把这种野果叫做罗汉果,并进行栽培,至今已有近300年的历史了。\n永福罗汉果的品尝吃法\n罗汉果茶是罗汉果与优质茶叶加工成的细沫。方便的小包装,温水一冲即可。取罗汉果10克,蜂蜜适量,山楂片10克,净水250克。将罗汉果洗净、压碎,山楂洗净,与罗汉果同放锅中。锅内加净水,上火煮熟后,去渣留汁倒入杯中。最后将蜂蜜适量放入杯中,搅匀,作夏季饮料饮用。",
+ "issuer":"23.00",
+ "date":"2021-9-28 19:35:14"
+ }, {
+ "typeId":1,
+ "title": "云南新鲜橘子水果密橘当季无籽柑桔青皮桔子包邮",
+ "img": "https://gd3.alicdn.com/imgextra/i3/2212078797092/O1CN01z1zt8v22GBbf1k3Lk_!!2212078797092.jpg",
+ "content": "陇川橘子的基本介绍\n橘,历来是中国的国粹物。陇川远古种橘的历史无从夸。洪武二十九年往谕麓川的明朝特使钱古训,于著《百夷传》载“大如斗之柑。”则是和橘大有干系。李时珍《本草纲目》引孔安国言:“小日橘,大曰柚,皆为柑也。”钱氏所记“大如斗之柑”无疑是巨柚,其亲近橘,柑美胜一筹无不种之理,很可能是麓川橘无大异于内地常见者,故钱特使惟猎奇式地持书一笔超乎寻常斗大之柑柚。傣族称为橘是老家带来的,柚是跟亲戚要来的。 \n \n橘在陇川分布很广,东之曼打、弄炳,南之勐约,西之拉允、拉线,北之户撒曼门,中部广等、姐乌,都栽得有好橘子。 \n \n解放初期,广等半坎橘子是陇川顶呱呱的。家家栽橘 子,姓姓有橘园。好年景每棵总要收上两几筐。1958年后征购过“左”已故的老政协委员奘罕家“公司来收橘子,有10棵挨家果还小,请求留给娃娃。远处的趸趸卖。原先同意了,事后又来摘房边的,作揖也不行,娃娃他妈气不过,拿竹杆生生熟熟挎掉完。哪个也吃不成”。橘园再也无人照料,皮枵肉肥清香醇甜的半坎橘,调凋零衰败,从此一蹶不起。 \n \n六十年代前期调整生产结构,鼓励发展经济林。1964年,县林业站建设了广瓦扪帕和广等弄缓两个橘子样板,红火的户撒曼门、广瓦拱共(勐约)、罗浪工读学校(曼线)等。广瓦扪帕橘子样板后来成了美名日盛的扪帕橘的引窝蛋。与半坎仅有曼允河相隔的弄缓橘子样板。百般侍候也只栽出些烟渣黄骸树,零三四碎地地是几个寡酸僵果。真应了古训:橘生淮南为橘,生淮北为枳。 \n \n户撒凉坝子橘子竟也长得不赖。曼门寨黎德章自留地人40来株秋橘,三秋一过,枝头总坠满朱红得可爱水露露光灿灿的果实。那年头生产队分红低,黎老头曾自豪地吹“儿子挣一年的工分还比不上那几棵橘子。” \n \n好的本地橘都被叫做金橘。可连皮吞的湖广江浙金橘姆指大,陇川金橘三五两枚不稀奇,大一瓣足可噎死饕餮客。陇川水果金橘王,王中之王扪帕柑(橘)。扪帕的橘应该就是和女作家冰心终身不忘的“大红的橘子”(《小橘灯》)。朱自清先生的眼里它是“朱红的“《背影》,其特点为皮薄且光、肉嫩且肥、汁多且醇,味甜且清。绝对比那”味道好极了”的广告物“更上一层楼”。有顺口溜曰:“扪帕橘子熟,老缅黄果(广甜柑)哭。扪帕橘上街,百果卖不开”。年尾冬腊月扪帕橘大上市,县城街天,人拥最多的摊位,十有九是扪帕橘,嗟呼,瞥货叫卖,美人淡妆。洒香深短,公主不愁嫁。 \n \n陇川橘,最上乘的还数扪帕大金橘,皮色如黄橘,金红多香雾,状似塌橘前瓣多液,里似穿心橘心空松嫩,兼绵橘的鲜软可爱之为金橘。兴许不仅外观闪烁诱人的金黄色,更要紧的是甘美至极无与伦比。 \n \n好橘子已非扪帕独有,龙江河谷半坡,近年来相继跃上来的曼打、曼线、弄炳、弄糯等地,大有和扪帕橘平分秋色之势。 \n \n龙江热谷橘子好只好在半坡,半坡又数陇川这片当阳坡,当阳坡又在接近江雾处。据专家分析,龙江热谷西片当阳坡,质地气候条件独特,原始森林演变的偏酸黄褐沃壤细腻酥松厚实肥足,日照长又江风习习不嫌燥;雨量足又坡不攒水根不;隆冬无寒流冷霜,树幼林连岁无恙。天成地就一方乐土,不仅橘,同样是其它热带经济作物的理想选择。 \n \n陇川本土之橘大体可分为自然型和嫁接(改良)两种。曼门、半坎、扪帕大金橘都属自然型,几乎全都是土法栽培。也有些看相萎缩,非酸即涩如似《橘谱》之乳橘、油橘者,多差别是在水土不服之处或腻(蚜)虫害,或老衰。罗朗工读学校黄老师,1964年往城子街子买25公斤平平常常酸酸甜甜的橘子去种,旺旺四两八。大金橘是有鲜黄橙红二色,前提水鲜“早黄橘”微酸,经霜霜养得到熟得透者朱黄富丽甘醇蜜香,馥郁柒齿。歌曰:“扪帕橘在口,不识天下馐。”",
+ "issuer":"12.80",
+ "date":"2021-9-28 19:35:1 4"
+ }, {
+ "typeId":1,
+ "title": "现摘丑橘新鲜10斤橘子耙耙柑包邮当季水果丑八怪橘",
+ "img": "https://img.alicdn.com/imgextra/i3/2208646352726/O1CN01UMNkTt1W0YNkjsotZ_!!2208646352726.jpg_430x430q90.jpg",
+ "content": "丑橘中文学名不知火,别称丑柑、凸顶柑、丑八怪等,由日本农水省园艺试验场于1972年以清见与中野3号椪柑杂交育成,其营养价值比同类水果高出很多,具有生津止渴、化痰理气的功效,下面我们就一起来看一看丑橘的功效与作用吧!\n丑橘的功效与作用\n\n丑橘中文学名不知火,别称丑柑、凸顶柑、丑八怪等,由日本农水省园艺试验场于1972年以清见与中野3号椪柑杂交育成,其营养价值比同类水果高出很多,具有生津止渴、化痰理气的功效,下面我们就一起来看一看丑橘的功效与作用吧!\n\n丑橘的功效与作用\n\n丑橘的营养价值\n\n丑橘的营养价值比同类水果高出很多,果肉富含维生素C及人体所需的微量元素,每100克丑橘的营养素含量为热量36.89大卡、碳水化合物9.02克、蛋白质0.82克、纤维素1.64克。而且丑橘的维生素C含量要远远大约其他同类水果,每100克丑橘的维生素C的含量是50毫克/100克,普通丑橘的维生素C含量大约28毫克/100克,橙子的维生素C含量大约33毫克/100克,柠檬的维生素C含量为22毫克/100克。\n\n丑橘的功效与作用\n\n丑橘的功效与作用\n\n【性味】味甘、酸,性凉。\n\n【归经】脾、胃、膀胱经。\n\n【功效】开胃理气、润肺止渴、预防癌症、促进消化、润肠通便、预防高血压和脑出血,主治胸隔结气、呕逆少食、胃阴不足、口中干渴、肺热咳嗽及饮酒过度。\n\n1、丑橘富含维生素C与柠檬酸,前者具有美容作用,后者则具有消除疲劳的作用。\n\n2、丑橘内侧薄皮含有膳食纤维及果胶,可以促进通便,并且可以降低胆固醇。\n\n3、橘皮苷可以加强毛细血管的韧性,降血压,扩张心脏的冠状动脉,故丑橘是预防冠心病及动脉硬化的食品。研究证实,食用柑橘可以降低沉积在动脉血管中的胆固醇,有助于使动脉粥样硬化发生逆转。\n\n4、在鲜柑橘汁中有一种抗癌活性很强的物质“诺米灵”,能使致癌化学物质分解,抑制和阻断癌细胞的生长,能使人体内除毒酶的活性成倍提高,阻止致癌物对细胞核的损伤,保护基因的完好。\n\n丑橘的功效与作用\n\n丑橘的食用禁忌事项\n\n1、带苦味橘子不能吃:若吃到有点苦味的橘子就不能食用了,因为橘子肯定是放的时间太久了变质了。\n\n2、橘络不用扯掉:有人吃丑橘总是喜欢把丑橘果肉上连着的白色橘络扯掉再吃,其实橘络具有通络化痰、顺气活血的功效,有药用作用,对人体的健康非常有益。\n\n3、吃丑橘不可贪多:有人特喜欢吃丑橘,总是一个接一个吃好多,其实每天吃3个就足够满足人体的吸收了,吃多了反而对口腔、牙齿有害,还有可能引起尿结石、肾结石等疾病。\n\n4、婴儿不可多喝丑橘汁:有些家长觉得婴儿没法吃丑橘,或者孩子不爱喝水,所以干脆将丑橘打成丑橘汁给孩子喝,以为可以补充维生素,其实婴儿的肝脏发育并不健全,婴儿喝多橘汁后表现为皮肤色泽发黄,还会出现厌食、烦躁等症状。\n\n5、胃功能欠佳者少吃:患有胃炎、胃溃疡等胃部功能欠佳的患者,尽量少吃丑橘,吃多丑橘可能会引起胃粪石的症状。\n\n6、不可与萝卜同时食用:丑橘不可与白萝卜同时食用,也不可吃完丑橘后再食用白萝卜,白萝卜中的硫氰酸与丑橘中的黄酮在一起会影响甲状腺功能。\n\n7、不可与牛奶同时食用:牛奶中的蛋白质易与丑橘中的果酸和维生素C发生反应,凝固后成块状,不但影响消化吸收,还会引起腹胀、腹泻等症状,一定注意吃丑橘前后1小时内不要喝牛奶。\n\n8、不用新鲜丑橘皮泡茶:新鲜的丑橘皮有一种清香,爱喝茶的人喜欢泡两片丑橘皮饮用,其实丑橘表面被喷洒了保鲜剂,这种化学制剂泡茶后被人体吸收会危害身体健康。\n\n9、服药前后不吃丑橘:丑橘中含有大量的维生素、果酸,吃药前后食用丑橘会影响药效,使药物起不到治病的效果。\n\n10、空腹不可吃丑橘:坚决不要空腹吃丑橘,因为丑橘中含有一定量的有机酸,容易对胃黏膜产生刺激。",
+ "issuer":"25.50",
+ "date":"2021-9-28 19:35:14"
+ }, {
+ "typeId":1,
+ "title": "小金桔5斤新鲜青金桔小青桔小青柠檬奶茶店整件包邮",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/591/59/34a4b211bea09ddf433efddfa892f04e5CicDh.jpg",
+ "content": "金桔的基本介绍\n融安金桔是金桔的一种,因出产地在融安县而称之。金桔详见金桔百科知识。融安金桔主要有“滑皮金桔”和“普通金桔”两种,呈椭圆形,汁多,味甜,色泽金黄,单果重约15g,每年11月开始成熟上市。果实不仅美观,其果实含有丰富的维生素C、金桔甙等成分,对维护心血管功能,防止血管硬化、高血压等疾病有一定的作用。\n营养价值\n果实含有丰富的维生素C、 金桔 甙等成分,对维护心血管功能,防止血管硬化、高血压等疾病有一定的作用。金橘含有特殊的挥发油、金橘甙等特殊物质,具有令人愉悦的香气,是颇具特色的水果。\n历史民俗\n融安金桔主产地在融安县大将、雅瑶、板榄、城东、大坡等乡镇,总面积1200公顷,年产金桔1万吨,已有200多年的栽培历史,在全国金桔产区的五省六县中,融安金桔的面积、产量、品质均列首位。广西首届“融安金桔”文化节暨商贸洽谈会于2009年12月25-27日在融安县圆满举行,来自浙江、湖南、南宁、柳州等广西区内外的2万多嘉宾、群众参加开幕式。历时三天的节会活动将以\"庆丰收、展成就,以桔会友、以桔招商\"为主题,举办了\"融安金桔\"擂台赛、融安金桔展销会、\"桔乡情韵\"文艺展演,生态果园观光、品果活动;同时举办广西金桔产业发展论坛、招商引资项目推介签约会。\n获奖荣誉\n1、1985年11月在首届全国金桔研讨会上,融安金桔在品质评比中被评为全国第一名。\n2、1993、1994、1999年在广西优质果品评比中被评为优质果品一等奖。\n3、2004年,融安金桔生产基地通过广西区无公害水果生产基地的认定。\n4、2005年“融安金桔”取得无公害农产品认证。\n5、2010年,融安县被认定为第一批广西农业(柑桔)产业科技重点示范县。\n6、2011年“融安金桔”获得了绿色食品认证。\n融安金桔的品尝吃法\n1.金橘皮色金黄、皮薄肉嫩、汁多香甜。它皮肉难分,洗净后可连皮带肉一起吃下。\n2.吃金桔前後一小时不可喝牛奶,因牛奶中之蛋白质遇到金桔中之果酸会凝固,不易消化吸收,会腹胀难过。\n3.饭前或空腹时亦不宜多吃金桔,因所含有机酸会刺激胃壁黏膜,胃部会有不适感。\n4.喉痛发痒、咳嗽时,喝金桔茶时不宜加糖,糖放多了反易生痰。",
+ "issuer":"18.20",
+ "date":"2021-9-28 19:35:14"
+ }, {
+ "typeId":1,
+ "title": "爆汁夏橙新鲜橙子9斤装当季水果整箱脐橙现摘包邮10",
+ "img": "https://iknow-pic.cdn.bcebos.com/35a85edf8db1cb1326a02dbfd154564e93584b54?x-bce-process%3Dimage%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_jpg",
+ "content": "橙子主要分为甜橙、脐橙、血橙、冰糖橙、红橙几个品种。\n在中国,幼果、落果可干制作药用。耐贮运。成熟期差异大,可延长鲜果和加工原料的供应期。橙子品种按果实成熟期有早、中、晚熟之分。\n鉴于橙子的商业化程度比较高,于是在市场的需求下诞生了很多各具特色的栽培种,像是填补市场空白期的晚熟夏橙(蜜奈夏橙、奥林达),利于鲜食的地理保护品种无核橙赣南脐橙等。许多橙子的种类是以产地命名的(如中国新会橙),一些橙种甚至已经注册了商标(如美国香吉士)。\n橙子在人类长期栽培过程产生过一些变异种,某些变异种因对人类有利而被保留下来。该种也常与其他柑橘类植物杂交以产生更加优良的品种,有时柑橘类植物的栽培品种中也会含有橙字,但实际上不属于该种。\n根据果实的形状和特点,可分为以下4个品种类群:\n甜橙\n甜橙系列有:冰糖橙、红肉脐橙、新奇士橙、夏橙等\n红肉脐橙果实性状\n红肉脐橙果实性状 [2]\n乔木,枝少刺或近于无刺。叶通常比柚叶略小,翼叶狭长,明显或仅具痕迹,叶片卵形或卵状椭圆形,很少披针形,长6-10厘米,宽3-5厘米,或有较大的。花白色,很少背面带淡紫红色,总状花序有花少数,或兼有腋生单花;花萼5-3浅裂,花瓣长1.2-1.5厘米;雄蕊20-25枚;花柱粗壮,柱头增大。果圆球形,扁圆形或椭圆形,橙黄至橙红色,果皮难或稍易剥离,瓢囊9-12瓣,果心实或半充实,果肉淡黄、橙红或紫红色,味甜或稍偏酸;种子少或无,种皮略有肋纹,子叶乳白色,多胚。花期3-5月,果期10-12月,迟熟品种至次年2-4月。\n血橙\n血橙系类有:塔罗科血橙、玫瑰血橙、红玉血橙等\n果肉及果汁全呈紫红色或暗红色。果肉细嫩多汁,具特殊香味,地中海地区是其起源地和主产地。\n血橙内颜色\n血橙内颜色\n是橙的变种,但一般比橙还要小主要因为果肉和与汁液因含有花色苷呈红色而得名。血橙表皮平滑,体积小于一般的橙,通常有小凹点,颜色为红色;由于血橙中存在一种花色苷成分,因此果肉呈红色。血橙源于欧洲,现种植在西班牙、北美和意大利。在我国主要种植区为重庆市、江西、湖南、浙江等地有栽培。\n红橙\n甜橙外观\n甜橙外观\n红橙主要产于广东湛江廉江,廉江红橙果实大(单果重150克左右),果型好、肉色橙红、嫩滑、汁化渣、甜中带酸,味清甜带香,深受欢迎,因而被列为国宴佳果,廉江因此而被命为“中国红橙之乡”。1984年春,日本首相中曾根来访问我国,首相品尝后连声称好,并要求带一些回去,国家派专机来湛江取了10箱廉江红橙送给中曾根。美国总统里根来访,国家领导人仍以廉江红橙招待,同样得到好评。1976年开始畅销香港、澳门、新加坡、马来西亚等国家和地区、深受欢迎,其中1985年出口14450吨。廉江红橙分“红江橙”和“廉江红”。\n脐橙\n脐橙系列有:赣南脐橙、信丰脐橙、寻乌脐橙、富川脐橙\n赣南脐橙\n赣南脐橙\n(学名CitrussinensisOsbeck):赣南脐橙就是脐橙的一种变异品种。果实比一般橙类更大,一般无种子,单性结实,更容易剥离。因此脐橙更加适合鲜食。主要特征是果实中有一圆锥状副果,特征为果顶有脐,即有一个发育不全的小果实包埋于果实顶部。无核,肉脆嫩,味浓甜略酸。\n冰糖橙\n冰糖橙\n冰糖橙\n冰糖橙又名冰糖柑,原产湖南怀化黔阳县(今洪江市),冰糖橙是湖南黔阳大红甜橙优育出来的品种,是黔阳优质冰糖橙品种的别称,中国国家地理标志产品。怀化地区的黔阳县(今洪江市)和麻阳县,农业生产条件优越,柑桔,明清时已美名远播,冰糖橙以品种优良、味浓香甜、果皮薄、不塞牙、肉质脆嫩等而倍受市场欢迎。系当地普通甜橙的变异,湖南栽培较多,四川、重庆、贵州、云南、两广有少量栽培。",
+ "issuer":"13.50",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":1,
+ "title": "白肉柚子梅州新鲜水果非平和特价柚便宜包邮蜜柚",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/679/39/7f9d476354a1e9c91df4620a42b18a140Ko1YO.jpg",
+ "content": "柚子的基本介绍\n西双版纳柚子是云南省西双版纳州的特产。柚子俗称大泡果,西双版纳傣语称“麻景掌”或“麻哦”。西双版纳各地均有栽培,主产于景洪,橄榄坝,勐仑,勐腊等低海拔河谷盆地。\n营养价值\n1、 柚子中含有高血压患者必需的天然微量元素钾,几乎不含钠,因此是患有心脑血管病及肾脏病患者(如果肾功能不全伴有高钾血症,则严禁食用)最佳的食疗水果之一;\n2、柚中含有大量的维生素C,可以降低血液中的胆固醇;\n3、柚子的果胶不仅可降低低密度脂蛋白水平,而且可以减少动脉壁的损坏程度;\n4、 柚子还有增强体质的功效,它帮助身体更容易吸收入钙及铁质,所含的天然叶酸,对于怀孕中的妇女们,有预防贫血症状发生和促进胎儿发育的功效;\n5、新鲜的柚子肉中含有作用类似于胰岛素的成分铬,能降低血糖;\n6、具有健胃、润肺、补血、清肠、利便等功效,可促进伤口愈合,对败血病等有良好的辅助疗效;\n7、柚子含有生理活性物质皮甙,可降低血液的黏滞度,从而减少血栓的形成,对脑血管疾病如脑血栓、中风等有较好预防作用。\n产品特点\n柚子树属芸香料果木,植株强健,分枝较多,每年春天开花结果,花朵色白气香。果实单个生长或二三个结团生长,果型呈扁球形或尖圆形,果实硕大,单果重在1-3千克之间,幼果青绿生辉,成熟时果皮淡黄或绿黄。果皮光滑,密生油腺,含有气味特殊的黄色挥发油,果皮较厚,内层泡松柔软状若海绵。果实耐储存搬运,只要不压破果肉,保存十天半月均不会坏。果肉多瓣聚合,一个果实内有瓤瓣12-18瓣,瓣内果肉是粒状瓤,有白色,红色两种,味甜或酸甜。\n制作方法\n1、柚子生食或捣烂绞汁饮用,可用于胃阴不足,口渴心烦,饮酒过度,以及胃肠气滞,嗳气,食欲不佳。\n2、柚子适量,连皮煎汤,加红糖调味服,用于胃气不和,呕逆少食。\n3、柚子一个,去皮除核,切片放入酒内浸泡一夜,取出煮烂,拌蜂蜜,时时含咽,用于咳嗽、痰多、气喘。\n4、柚子一个,取果肉与鸡同蒸熟食用,柚子皮切片用开水泡茶饮,用于老年人咳嗽痰喘。",
+ "issuer":"25.50",
+ "date":"2021-9-28 19:35:14"
+ },{
+ "typeId":2,
+ "title": "新西兰进口奇异果27个装原箱装进口膳食纤维猕猴桃",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/774/26/b0e82d2152fa10505f8067f30e5394fe8cg7zl.jpg",
+ "content": "猕猴桃的基本介绍\n金寨猕猴桃是安徽省六安市金寨县的特产。2014年8月22日,金寨县第一家农民专业合作社联合社—金寨金果乡猕猴桃农民专业合作社联合社成立,标志着金寨猕猴桃从此步入了一个新的阶段。\n营养价值\n猕猴桃除含有猕猴桃碱、蛋白水解酶、单宁果胶和糖类等有机物,以及钙、钾、硒、锌、锗等微量元素和人体所需17种氨基酸外,还含有丰富的维生素、葡萄酸、果糖、柠檬酸、苹果酸、脂肪。\n一颗猕猴桃能提供一个人一日维生素C需求量的两倍多,被誉为“水果之王”。猕猴桃还含有良好的可溶性膳食纤维,作为水果最引人注目的地方当属其所含的具有出众抗氧化性能的植物性化学物质sod,据美国农业部研究报告称,猕猴桃的综合抗氧化指数在水果中名列居前,仅次于刺梨、蓝莓等小众水果,远强于苹果、梨、西瓜、柑橘等日常水果。与蓝莓等同属第二代水果中颇具代表性的。与甜橙和柠檬相比,猕猴桃所含的维生素C成分是前两种水果的2倍,因此常被用来对抗坏血病。不仅如此,猕猴桃还能稳定情绪、降胆固醇、帮助消化、预防便秘,还有止渴利尿和保护心脏的作用。\n产品特点\n金寨县野生猕猴桃果实不是很大,而且大小不均匀,味道清香鲜美,甜酸宜人,耐贮藏。\n品尝吃法\n冬天常吃猕猴桃可以调节人体机能,增强抵抗力,补充人体需要的营养。 适合的量:1-2个是能被人体充分吸收的量。 适合时段:不能空腹吃,饭前饭后1-3个小时吃都比较合适。 吃法:可去皮后直接食用;也可在猕猴桃汁中加适量水、白糖和香蕉丁、苹果丁一起煮沸后,用水调淀粉勾芡食用。",
+ "issuer":"22.50",
+ "date":"2021-5-19 19:35:14"
+ }, {
+ "typeId":2,
+ "title": "水蜜桃正宗蜜桃16个装桃子新鲜水果当季应包邮整箱冬桃",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/922/32/de3ccf37c7eef89ef02d3ef5ab1694cbydHhYX.jpg",
+ "content": "水蜜桃的基本介绍\n 武进种植水果历史悠久,很多水果品种在国家和省、市评比中获奖。近几年来,武进区林业部门和区果品协会坚持以林果板块为依托,果品协会为载体,做强做优林果产业为目标,带领农户推进林果精品工程建设,全力打造“阳湖”林果品牌,让果农充分尝到了“集团化”的好处。基层各林果合作社,统一品牌,统一包装,统一收购和销售,全力打造“阳湖”品牌,扩大“阳湖”的市场知名度。\n 常州市雪堰镇水蜜桃专业合作社组建于2002年3月。合作社社员从建社时的13名发展壮大为现在的103名,已成为当地的农业龙头企业,带动着该镇2000多户果农的水蜜桃种植。合作社建有示范基地1000多亩,2009年该镇生产水蜜桃7000多吨,产值达5000多万元。“阳湖”牌水蜜桃已被认证为绿色食品、无公害农产品,并连续荣获第三届、第四届“神园杯”省优质水果金奖、市名优农产品、市信得过产品等诸多荣誉。\n 为了打响“阳湖”水蜜桃品牌,雪堰镇水蜜桃专业合作社每年组织社员参加区林果节,扩大知名度。同时,充分发挥当地水蜜桃产业资源优势,做大做优做强全镇水蜜桃产业。通过整合品种资源,调整品种结构,创新栽培技术,并制定了无公害农产品、绿色食品水蜜桃生产技术规程,推广标准化生产,提高产量和产品质量,合作社的示范园区——谢家村水蜜桃生产基地已经成为江苏省水蜜桃标准化示范园区、常州市现代农业科技示范园区和武进区现代农业示范园区,该村水蜜桃面积由2001年的120亩迅速发展到1100亩,而且沟、渠、路、桥、喷滴灌等基础设施建设配套,颇具现代农业园气息。近几年,通过园区的示范带动,该镇水蜜桃面积连年增加,2009年全年产水蜜桃7000多吨,产值近5000万元。\n 如今,雪堰水蜜桃已成为常武地区市民一致公认的地方特色产业。该镇水蜜桃特色产业连年发展,水蜜桃面积由2002年的千亩左右发展到目前7000亩左右,水蜜桃生产已经走上了规模化、专业化、标准化、商品化生产轨道,这一地方特色果品经济的迅速发展,为当地农业增效、农民增收发挥了重要作用。现在一般果树亩产值在7000元左右,高的可达1万余元。据调查,谢家村火舍浜、杨树浜两个村民小组共53户农户,靠水蜜桃收入超5万元的有5户,超3万元的有20户,户均收入超3.5万元。雪堰水蜜桃已成为致富一方的摇钱树。“一村一品”、“一品一社”的发展格局已在雪堰镇初步形成。\n营养价值\n 水蜜桃的营养价值:无论是蟠桃,还是水蜜桃,同样是肉甜汁多,含丰富铁质,能增加人体血红蛋白数量,古人相传常吃桃子能“益颜色”,原因可能在此。桃子的贡献,除了桃肉能养血美颜,当中的桃仁还有活血化瘀、平喘止咳的作用。中医有一条药方,名为五仁汤,能润肠通便,其中的成分正是桃仁、火麻仁、郁李仁、柏子仁和杏仁,对於大便燥结,肝热血瘀和闭经之人特别有帮助。需要注意的是,桃仁能活血,经量过多或行经期间不宜食用。桃树流出来的树胶就又是一味妙药,既能强壮滋补,又能调节血糖水平。\n 鲜桃还有护肤功效。宫廷秘方有用桃花煮水洗面、沐浴、饮用。也有用桃子榨汁加淘米水洗面,以润泽肌肤之说。不过,桃子虽然营养丰富,含较多脂肪和蛋白质,但《本草纲目》早有明言:“不宜多食”。原因何在呢?一则桃子性温,多吃会令人内热过盛。二则营养过于丰富,过量会导致胃胀胸闷。不过,只要适量食用,便不会有问题了。\n产品特点\n 果圆形,两半稍不对称,果实大,平均果重 200克,最大果重500克以上,果顶圆平,缝合线浅。果皮底色黄稍带绿,着红色斑纹或红晕,果肉乳白色,核周红色,肉质致密,纤维少,汁液中多, 香气浓,风味甜微酸。品质优良。7月中旬果实成熟。\n历史民俗\n 常州是全国水蜜桃主要产地之一,也是江苏三大主产地中举足轻重的一个,而\"阳湖\"水蜜桃更是由来已久。据武进雪堰、潘家等地乡志记载,武进很早就有了水蜜桃种植的记录,最早栽种水蜜桃的是晚清秀才段孟陶。据《武进县志》记载,1926年,武进产桃20万斤。所产水蜜桃,外形美观、汁浓、味甜,为桃中上品,脱颖于浙江奉化水蜜桃。解放前,主产于雪堰、潘家两乡,1949年,就有桃树种植1200多亩,产量245万斤,1985年的产量更是超过了318万斤。",
+ "issuer":"17.80",
+ "date":"2021-5-19 19:35:14"
+ }, {
+ "typeId":2,
+ "title": "黄桃甜桃毛桃新鲜水果应季多汁大桃子整箱5斤包邮",
+ "img": "http://www.tesegu.com/public/upload/photos/000/000/027/14/4c62f424fd42ef1117780f250d7d711fS839Y7.jpg",
+ "content": "黄桃的基本介绍\n黄桃,又称黄肉桃,属于桃类的一种。从历史文献中可知,黄桃早在三、四千年前,在中国大地上已受到重视并人工栽培。到秦汉时期,已培育出各种品种,用古代毛桃嫁接出的金桃,延续繁衍成今天的黄桃种群。\n营养价值\n黄桃是上海桃子中的独特品种,具有外观艳丽,肉质柔软、纤维少、汁多、味浓、无苦涩味等特点,并且内含人体所需的蛋白质、天门冬氨酸、苏氨酸、谷氨酸、钙、铁、胡萝卜素等多种的氨基酸、维生素和矿物质微量元素,因此具有很高的营养和药用价值。\n产品特点\n奉贤黄桃,上海市奉贤区特产,中国地理标志产品。该区黄桃以“锦香、锦园、锦绣、锦花”等四个优质品种为主,具有“果大、味甜、汁多”的 特点,奉贤黄桃是黄桃中的独特品种,为上海市奉贤区所特有。\n获奖荣誉\n荣获“上海市安全优质卫生食品”、“国家绿色食品”\n\n“世博特供果品(2010年)”\n“国家地理标志保护认定产品”\n“国家级标准化农业示范项目”等荣誉。",
+ "issuer":"25.80",
+ "date":"2021-5-19 19:35:14"
+ }, {
+ "typeId":2,
+ "title": "杨桃6个装大果新鲜家水果热带应季时令水果酸甜五菱子",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/073/94/dab9c6c98ad69e290b69406b34d3fedbWBbBWA.jpg",
+ "content": "杨桃的基本介绍\n下河杨桃是云霄传统的拳头产品之一,一度曾以粒大、果甜、色亮泽等优点,畅销港澳东南亚市场。下河乡下河村种植杨桃己有148年的历史。\n营养价值\n1、补充营养。阳桃中所含的大量糖类及维生素、有机酸等,是人体生命活动的重要物质,常食之,可补充机体营养,增强机体的抗病能力。\n2、利小便,解酒毒,生津止渴。阳桃中糖类、维生素C及有机酸含量丰富,且果汁充沛,能迅速补充人体的水分而止渴,并使体内部热或酒毒随小便排出体外。\n3、和中消食。杨桃果汁中含有大量草酸、柠檬酸、苹果酸等,能提高胃液的酸度,促进食物的消化而达和中消食之效。\n历史民俗\n下河乡是漳州杨桃的主产区,已有上百年的杨桃种植历史。近年来,下河乡以下河村新品种杨桃示范基地为依托,引进台湾软枝杨桃、马来西亚红肉杨桃、泰国杨桃等新品种,目前全乡推广优质杨桃种植面积达5500亩,年可产5000吨杨桃,产量的70%销往全国各地市场,年可助农增收500万元以上。\n制作方法\n醋渍阳桃。新鲜阳桃1枚,红醋50毫升。将阳桃以清水洗净,后用水果刀一分为二;将鲜果放人杯中,加红醋浸10分钟后取出,慢慢嚼服。此桃具有消食和中的功效,可用以治疗消化不良,胸闷腹胀等病症。 ",
+ "issuer":"36.80",
+ "date":"2021-5-19 19:35:14"
+ }, {
+ "typeId":2,
+ "title": "黄金油桃黄水蜜桃水果新鲜当季整箱10黄油桃脆桃现摘5斤包邮",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/707/13/01b7e9d687996750ea72045e49c74975jpLEPH.jpg",
+ "content": "油桃的基本介绍\n四井岗在枣阳市平林镇,这里是鄂西北最大的“油桃之乡”。油桃(Nectarine)是普通桃(果皮外被茸毛)的变种,是一种果实作为水果的落叶小乔木。外表像李子一样光滑,但味道和口感都跟桃子相似。\n\n平林镇农兴油桃基地始建于1994年,镇油桃协会在其建立初期就确立了绿色、环保和无公害的发展方向,同时大力推广科技成果,通过牵线搭桥,先后与郑州果树研究所、华中农业大学联姻,引进“千年红”等优质品种油桃大面积栽植。在枣阳市技术监督局、枣阳市农业局的指导下,果农严格按照无公害生产标准组织生产,坚持全面开发扩面积、科学管理增效益、更新品种攻质量,全镇油桃种植面积从最初的2000多亩发展到现在的1.5万亩,油桃优质品种率达到80%以上,年产绿色无公害油桃1800万公斤,年产值2000万元,产品畅销武汉、广州、深圳、上海、南宁等10多个大中城市本地有万亩油桃,品种有超级518、五月火、千年红、曙光、艳光、潍坊1号等,每年阳历五月六日上市,可出售周期三个月。油桃于5月10号(农历4月份)千年红甜油桃可出货,品质好,味甘甜纯;西瓜,香瓜,7月份出货。\n\n地域范围\n 枣阳市平林镇四井岗油桃产于枣阳市平林镇平林村、余咀村、方湾村、新庄村、杜湾村、台子湾村、高冲村、北棚村、宋集村、柴家湾村、清水店村、范湾村、吴集村、包畈村、胡湾村、新集村、雷山村、杨集村等18个村。平林镇位于湖北省西北部,地理坐标为东经112°42′-112°43′,北纬31°40′-32°40′之间。全境无高山,海拔高度达125400米。平林镇位于枣阳市南45公里处的枣阳、钟祥、宜城、随州四市结合部,东邻枣阳市吴店镇玉皇村朝王庙4.5公里,西接宜城市板桥镇东湾村大马山21公里,北与吴店镇易仓村6.5公里交界,南与随州双河镇解放村相邻。生产面积1000公顷,年产量3000吨。\n营养价值\n油桃富含维生素C,油桃由桃改良栽培而成,比桃甜,营养也丰富一些。一个新鲜油桃所含的维生素C,几乎可以满足成人一天所需。维生素C不仅有助于身体吸收铁和维护免疫系统,而且对合成皮肤的重要组成部分胶原至关重要。胶原还能促进伤口结疤,对伤口愈合十分重要。 油桃的皮比毛桃光滑,没有讨厌的绒毛。果肉较硬,颜色有粉红、黄色、白色的,比毛桃香味浓。油桃所含热量比毛桃略多,平均为三十六大卡。\n产品特点\n(1)外在感官特征:四井岗油桃果实近球形,具有香气,果皮白红色,蜡质厚有光泽,果点大而明显。单果重60-140g。\n\n(2)内在品质指标:四井岗油桃皮薄、肉厚,果肉白色,肉质细嫩、松脆、汁多、酸甜适口。可溶性固形物含量15%,可溶性糖13.5%,可溶性酸0.25%。\n\n(3)安全要求:四井岗油桃执行《绿色食品温带水果》(NY/T844-2004)\n历史民俗\n(1)土壤地貌情况:枣阳市平林镇土壤大体可分为白山土、油沙土、黄沙土、黄浆泥土、红土等5类,以黄浆泥土和红泥土居多,其它土类只有零星分布。土壤pH值在5.4-7.7之间。土壤肥力状况中等,有机质含量0.8-1.5%之间。平林镇地质结构属大洪山余脉的一部分。全镇属丘陵地区,四周群山起伏环绕,中间为丘陵盆地。\n\n(2)水文情况:平林镇境内主要河流有婴河、熊河,还有中小型水库23座,镇内年平均地表径流1.17亿m3。平林镇地下水资源丰富,总贮量达\n\n 3000万m3/年,水质清澈、纯净,是理想的工农业生产和生活用水。\n\n(3)气候情况:枣阳市平林镇四季分明,属于严热带季风季风气候。春季干旱少雨,升温较快,蒸发量大;夏季炎热,雨量集中,湿度大;秋季冷凉少雨,日照充足,昼夜温差大;冬季寒冷多雪,气候干燥。年平均气温15.2℃,年平均降雨量557-1200mm,年总降水量7500万m3。年平均日照时数2100小时,太阳辐射年总量136.7kcal/cm2。全年盛行西北风和南风,年平均风速为4.3m/s。初霜平均在10月中旬,终霜平均在4月上旬,平均无霜期230天。平林镇作物生长季节日照充沛,雨量适中,热量条件可满足平林镇四井岗油桃生长。\n\n(4)人文历史情况:平林镇历史悠久,境内有多处古遗址。抗日战争中平林镇曾是著名的四井岗战役的主要战场。平林镇自引进油桃以来,镇委、镇政府制定了明确的发展目标,把发展油桃作为全镇三大支柱产业之一,并直接与镇、村领导班子的政绩挂钩。全镇每年定期召开生产技术交流现场会,经常派出业务干部学习新技术,加强果农培训,同时,镇村两级还注意抓好产前、产中服务,解决果农卖果难等后顾之忧,使得平林镇四井岗牌油桃的生产与管理水平不断得到提升,农民增收效果显著。2006年平林镇四井岗油桃被中国绿色食品发展中心认定为绿色食品A级产品。",
+ "issuer":"20.80",
+ "date":"2021-5-19 19:35:14"
+ }, {
+ "typeId":3,
+ "title": "西瓜种子特大冰糖麒麟西瓜种子高产四季西瓜种籽",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/686/18/7ef6e7865ea10996154f522f539268a3bKM9bB.jpg",
+ "content": "西瓜的基本介绍\n北京大兴素有“中国西瓜之乡”的美誉,“大兴西瓜”早已成为京城百姓信赖的品牌。大兴西瓜种植历史悠久,在距今千年以前的辽太平年间,大兴就有栽培西瓜的历史。地理标志产品--国家标准明确规定了大兴西瓜的品种。\n营养价值\n西瓜可清热解暑,除烦止渴。西瓜中含有大量的水分,在急性热病发烧、口渴汗多、烦躁时,吃上一块又甜又沙、水分十足的西瓜,症状会马上改善。\n在治疗肾炎和降低血压方面,西瓜可算是果菜之中的好医生。它所含的的糖和盐能利尿并消除肾脏炎症;蛋白酶能把不溶性蛋白质转化为可溶的蛋白质,增加肾炎病人的营养;它还含有能使血压降低的物质。\n吃西瓜后尿量会明显增加,这可以减少胆色素的含量,并可使大便通畅,对治疗黄疸有一定作用。\n产品特点\n(1)果型:中果型,果实圆形或高圆形;\n(2)单瓜重:4至8公斤;\n(3)果皮:果皮薄脆,厚度不超过1.2厘米,皮色为绿底上覆深绿色条带;\n(4)瓤色:粉红色至桃红色,色泽鲜艳;\n(5)质地与风味:瓜瓤脆沙,甘甜多汁,纤维含量少,爽口。\n历史民俗\n西瓜一词,最早见于宋欧阳修所撰《新五代史》(四夷附录)一书。距今1000多年前,河北省已有种植,并传入北京。大兴为著名的西瓜主产地和集散地。大约400年前,明万历年间,大兴西瓜[2] 即有入贡的记载。大兴地处北京东南郊,境内永定河东侧。北臧村乡天宫院村以南,以庞各庄为代表的10个乡,这里不仅自然条件有利于西瓜生长,西瓜分布面积也比较集中,是该县西瓜的主要产地。该地区地处洪积、冲积平原,多为沙性土。在5-7月西瓜的蔓生期、开花期和座瓜期,要求的最适温度在18-35℃之间,而这里的月平均气温为20-26℃,极端最高气温35℃以上。6月中、下旬西瓜的需水量约为总需水量的47%,这时该区季风雨已经来临。加之昼夜温差大,在西瓜的生长季节日较差可达10℃以上,这里不仅自然条件有利于西瓜生长,而且农技人员和上千名种瓜能手有丰富的种瓜技术经验。所产西瓜素以沙、甜、脆著称,在京、津一带颇负盛名。在大兴区每年一届的西瓜节期间,各乡瓜农擂台竞赛,吸引了许多中外宾客。\n大兴西瓜的制作方法\n西瓜汁\n主料:西瓜100克\n调料:白砂糖10克\n做法\n1、将西瓜瓤放入碗内,用匙捣烂,再用纱布过滤;\n2、汁内加入白糖,调匀即成。",
+ "issuer":"20.80",
+ "date":"2021-5-19 19:35:14"
+ }, {
+ "typeId":3,
+ "title": "新疆哈密瓜吐鲁番西州蜜甜瓜7斤新鲜一箱应季水果顺丰包邮",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/919/72/c00a03bf5398439af3e7e7e6e243dd2dlsq0ik.jpg",
+ "content": "密瓜的基本介绍\n 三塘湖乡隶属于哈密地区巴里坤县,东接伊吾县淖毛湖镇,南与奎苏镇、八墙子乡相连,西与大红柳峡乡毗邻,北与蒙古人民共和国接壤。三塘湖哈密瓜地理标志登记保护区域范围包括:三塘湖乡上湖村、中湖村、下湖村、岔哈泉村共计4个行政村。地理坐标位于:东经93°51′30\"~94 °17′,北纬43°48′~44°18′,海拔高度900~990米。三塘湖哈密瓜地域保护面积为175公顷,哈密瓜年产量3600吨。 \n 哈密瓜虽然不是夏天消暑的水果,但是能够有效防止人被晒出斑来。夏日紫外线能透过表皮袭击真皮层,令皮肤中的骨胶原和弹性蛋白受到重创,这样长期下去皮肤就会出现松弛、皱纹、微血管浮现等问题。同时导致黑色素沉积和新的黑色素形成,使皮肤变黑、缺乏光泽,造成难以消除的太阳斑。哈密瓜中含有丰富的抗氧化剂,而这种抗氧化剂能够有效增强细胞抗防晒的能力,减少皮肤黑色素的形成。另外,每天吃半个哈密瓜可以补充水溶性维生素C和B族维生素,能确保机体保持正常新陈代谢的需要。\n营养价值\n1、哈密瓜不但香甜,而且富有营养价值。据分析,哈密瓜的干物质中,含有4.6%—15.8%的糖分,纤维素2.6%—6.7%, 还有苹果酸、果胶物质、维生素A、B、C,尼克酸以及钙、磷、铁等元素。其中铁的含量比鸡肉多两三倍,比牛奶高17倍。新疆人很爱食哈密瓜,认为多吃瓜可以祛病延年,这一说法不无道理。\n2、哈密瓜除供鲜食,还可制作瓜干、瓜脯、瓜汁。哈密瓜削皮可以用果蔬削皮机中的大果削皮机适用于食品规模加工。瓜蒂瓜籽可入药治病,瓜皮喂羊能促肥增膘。\n3、哈密瓜籽可用于做精油,富含药用、美容、保健、生理活性的哈密瓜种子,采取纯物理、冷榨方式精制而成。其色泽金黄,滋味清香,还有令人愉快的水果滋味;充分保留了哈密瓜籽中独有的药用、美容、保健营养成分不受破坏。具有超强的抗氧能力,实属上等纯天然药用、美容、保健、营养精油,可广泛应用在医药、美容、保健、营养食品等领域。\n4、哈密瓜有“瓜中之王”的美称,含糖量高,形态各异,风味独特,有的带奶油味,有的含柠檬香,但都味甘如蜜,奇香袭人,饮誉国内外。在诸多哈密瓜品种中,以“红心脆”、“黄金龙”品质最佳。哈密瓜不仅好吃,而且营养丰富,药用价值高。\n产品特点\n 三塘湖哈密瓜外形椭圆形,果皮艳黄,果面布细密网纹。纵径0厘米-45厘米,横径8厘米-5厘米,单瓜重.5公斤-4.5公斤。果皮与果肉界限分明,果肉呈桔黄色,肉厚4厘米-6厘米、肉质细嫩,口感脆甜、爽口。三塘湖哈密瓜总糖ɡ∕00ɡ6.5~8.5,含钙mg∕kg90~00,锌mg∕kg.5~5.0,总酸ɡ∕kg.0~.5,还原型抗坏血酸mɡ∕00ɡ50~600。",
+ "issuer":"68.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":3,
+ "title": "柳河沟香瓜10斤包邮新鲜当季应季水果脆甜网纹蜜瓜香瓜",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/895/62/c2a229e2346ff0d83cfae5e7ef2bfaf37IAVh9.jpg",
+ "content": "香瓜的基本介绍\n 柳河沟香瓜产地范围为柳河沟地区,香瓜种植面积达4.5万亩,亩产香瓜超3500公斤。随着产业发展的逐步完善,新农寒富苹果和柳河沟香瓜已成为新民市农业发展的特色产业,其中新农寒富苹果还出口到俄罗斯等国家,已然变为新民农业发展的又一张靓丽名片。\n\n 柳河沟香瓜产地范围为辽宁省新民市柳河沟地区柳河沟镇、周坨子镇、大柳屯镇、梁山镇、大红旗镇、红旗乡、金五台子乡、卢家屯乡、姚堡乡、于家窝堡乡现辖行政区域。\n\n香瓜品种很多,但适应云南各地推广使用的主要品种有:\n 美国西葫芦、早青西葫芦、脆玉一号、京滇碧玉、黑秀丽等高产抗病品种群,农户可根据实际需求选用。盘溪稻后栽培适宜播期为8-10月,最迟不得超过11月15日。春播可选择在2-3月,但以确保清明、谷雨节令收获为好。一般来讲,生育期长的,如美国西葫芦可考虑早播,生育期短的可迟播,如早青西葫芦。\n营养价值\n1. 甜瓜含大量碳水化合物及柠檬酸等,且水分充沛,可消暑清热、生津解渴、除烦;\n\n2. 甜瓜中的转化酶可将不溶性蛋白质转变成可溶性蛋白质,能帮助肾脏病人吸收营养;\n\n3. 甜瓜蒂中的维生素B能保护肝脏,减轻慢性肝损伤;\n\n4. 现代研究发现,甜瓜子有驱杀蛔虫,丝虫等作用;\n\n5. 甜瓜营养丰富,可补充人体所需的能量及营养素。\n品尝吃法\n 炒香瓜\n\n食材:香瓜一个(闻起来清香扑鼻,吃起来粉面香甜的),基围虾8个,鸡胸肉一块。红辣椒一个,葱姜蒜适量。生抽,花生油,食盐、淀粉、胡椒适量。\n\n做法:1,鸡胸肉切片,用生抽,食盐,胡椒腌制一会。\n\n2,基围虾烫熟,去皮。\n\n3,香瓜去皮去籽,切块。\n\n4,葱姜蒜红辣椒根据个人喜好改刀。\n\n5,腌制好的鸡胸肉,加淀粉,拌匀,再加适量(不用太多,主要目的是防止肉片粘连)花生油,拌匀。\n\n6,炒锅大火烧热,加适量花生油,下葱姜蒜红辣椒炒出香味,下拌好的鸡胸肉,划散,翻炒。\n\n7,待鸡胸肉颜色开始变白,肉片不再软塌时,倒入基围虾仁和香瓜块,翻炒,加盐,继续翻炒,香瓜块粉碎。\n\n8,关火,装盘。\n\n香瓜和基围虾都是寒性食物,基围虾还有点偏湿,所以我配了具有温补的鸡肉和少量辛辣的胡椒和辣椒来综合一下。\n\n提示:\n\n1. 香瓜的热量情况适合运动量少而有强烈减脂需求的年轻白领一族。\n\n2. 脾胃虚寒、腹胀者忌食。有吐血、咳血病史患者,胃溃疡及心脏病者宜慎食。",
+ "issuer":"28.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":3,
+ "title": "木瓜云南老品种红心牛下奶青冰糖心海南雷州新鲜水果",
+ "img": "http://www.tesegu.com/public/upload/photos/000/000/941/80/560834f8972491a4b50f4dd085e0681e8M082N.jpg",
+ "content": "木瓜的基本介绍\n白河木瓜,陕西省安康市白河县特产,中国国家地理标志产品。木瓜又称香木瓜,万寿果,是该县的乡土品种,种植历史悠久。白河县是中国最大光皮木瓜生产基地之一。白河光皮木瓜色泽金黄、气味芳香,该县利用木瓜生产的木瓜酒、果醋也是该县具有竞争力的优特产品,市场反映良好。\n营养价值\n《本草纲目》记载,木瓜性温和酸,具有平肝和胃、舒筋络、收气脱、疗霍乱、愈脚气、治腰酸背痛、降血压等药用功效。\n中医学研究认为,木瓜具有舒筋活血、化瘀止痛、平肝和胃的功效。临床作为治疗风湿性关节炎、腰膝酸痛、脚气肿胀、消化不良及吐泻腹痛等症。\n药理研究表明,光皮木瓜含有糖类、蛋白质、脂肪、矿物质、维生素A、D族,CE和胡萝卜素、黄酮、果酸、皂苷、木瓜碱、齐墩果酸、苹果酸、枸橼酸,酒石酸等成份。木瓜碱具有抗淋巴性白血病细胞的强烈抗癌活性,齐墩果酸具有保肝护肝抗肝炎特效。\n经天津轻工学院,北京营养源研究所分析表明;木瓜果实中含丰富的木瓜酵素,多种有机酸,二种生物酶,对脂肪有高的分解能力,且矿物质含量,微量元素,维生素含量均高于其它水果,还含有多种氨基酸、皂甙、黄酮类、苹果酸、柠檬酸、鞣酸、果胶、消化酶等物质。其中木瓜酵素可以帮助消化,所含脂肪酶成份,对于肥胖证有一定的减肥作用。最近医学研究证明,木瓜的乳汁制品除作消化剂外,从动物试验证明:其成份中的木瓜蛋白酶还可用于除绦虫、蛔虫、鞭虫。医学界从动物试验证明:其成份中的木瓜碱具有抗肿瘤、抑制结核杆菌、杀死阿米巴原虫的作用。\n产品特点\n感官特征:圆形或长椭圆形,单果重平均在300克以上,果皮金黄色,果面光滑,果肉黄白色,果实芳香\n获奖荣誉\n国家质检总局组织了对白河木瓜地理标志产品保护申请的审查。经审查合格,批准自2010年4月6日起对白河木瓜实施地理标志产品保护",
+ "issuer":"20.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":3,
+ "title": "香脆地瓜片地瓜干红薯脆片红薯干办公室解馋零食小吃",
+ "img": "http://www.tesegu.com/public/upload/2018/j2caiS9nLmDeWfGkB0ffmo8sZeiBjgFTD302KM.jpg",
+ "content": "地瓜干的基本介绍\n连城地瓜干是福建连城传统的汉族小吃。属于闽西八大干之一。这种地瓜干保留着自然的色泽和品质,颜色黄中透红,味道清香甜美,质地松软耐嚼,而且还有很高的葡萄糖和维生素A、B含量。一般是将整块地瓜蒸熟去皮,然后压制、烘烤。制成之后可保存几年不坏,既可当零食,也可切成小块,拌上面料、鸡蛋、香料,经油炸再沾上冰糖粉作为酒席名菜。这是早期的制法,主要产地是连城隔田。将整块地瓜去皮,然后制片或切条、蒸熟、速冻、油炸。\n营养价值\n地瓜干地瓜本身是低热食品, 地瓜含有丰富的粘液多糖,能够提高人体的免疫力,而且在人体内不容易被转化为脂肪,加上地瓜本身的膳食纤维丰富,还含有丰富的维生素微量元素, 因此多吃地瓜不但能排毒养颜,减少肠癌的发生概率,还能减肥,对人身体是很有好处的。因此地瓜被称为是果蔬保健之王,是爱美爱健康的人们的首选休闲食品!\n红薯营养十分丰富,是中国人民喜爱的粮菜兼用的天然滋补食品。现代科学研究证实,红薯中含有多种人体需要的营养物质。每500克红薯约能产生热能2658.75千焦耳(635千卡),含蛋白质11.5克、糖14.5克、脂肪1克 、磷100毫克、钙90毫克、铁2克、胡萝卜素0.5毫克,另含有维生素B1、维生素B2、维生素C与尼克酸、亚油酸等 。其中维生素B1、维生素B2的含量分别比大米高6倍和3 倍,维生素C的含量是苹果、葡萄、\n梨的10倍至30倍。\n特别是红薯含有丰富的能促进人体新陈代谢、助长发育的赖氨酸,而大米、面粉恰恰缺乏赖氨酸。此外,红薯与米面混吃,还可发挥蛋白质的大补作用,提高其营养功效。红薯还含有大量粘液物质,包括粘液蛋白、粘液多糖等。它们能保持人体心血管壁的弹性,防止动脉粥样硬化的发生,还能保持呼吸道、消化道、关节腔的润滑。另外,红薯所含的淀粉和纤维素在肠道内可吸附大量水分,增大粪便体积。这既可防治便秘,又能减少肠癌的发生。\n制作方法\n1、一般是将整块地瓜蒸熟去皮,然后压制、烘烤。制成之后可保存几年不坏,既可当零食,也可切成小块,拌上面料、鸡蛋、香料,经油炸再沾上冰糖粉作为酒席名菜。\n2、将整块地瓜去皮,然后制片或切条、蒸熟、速冻、油炸。",
+ "issuer":"28.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":4,
+ "title": "香蕉9斤新鲜甜香焦当季水果banana芭蕉水果整箱包邮10",
+ "img": "http://www.tesegu.com/public/upload/photos/000/000/010/92/fdbc1e059f2c6afd468f6437c870a6afhkcEH5.jpg",
+ "content": "香蕉的基本介绍\n浦北香蕉是指产于广西壮族自治区浦北县的香蕉,蕉皮呈金黄色,蕉体饱满,营养丰富。香蕉,芭蕉科(Musaceae)芭蕉属(Musa)植物,又指其果实。热带地区广泛栽培食用。香蕉味香、终年可收获,在温带地区也很受重视。\n营养价值\n香蕉每花穗由5--20果梳组成,每果梳有果指10--20个,单果重100--150克,主要果期在10--12月,果实经后熟可食用,果实甘美味香,营养丰富。据分析每百克果肉中,含碳水化合物20克、蛋白质1.2克、脂肪0.6克、粗纤维0.4克、钙18毫克、磷28毫克、铁0.5毫克、维生素C24毫克、VB0.08毫克,每百克果肉发热量90千卡。香蕉属高热量水果,。在一些热带地区香蕉还作为主要粮食。香蕉果肉营\n此外,还含多种微量元素和维生素。其中维生素A能促进生长,增强对疾病的抵抗力,是维持正常的生殖力和视力所必需;硫胺素能抗脚气病,促进食欲、助消化,保护神经系统;核黄素能促进人体正常生长和发育。\n香蕉除了能平稳血清素和褪黑素外,它还含有可具有让肌肉松弛效果的镁元素,经常工作压力比较大的朋友可以多食用。香蕉富含钾和镁,钾能防止血压上升、及肌肉痉挛,镁则具有消除疲劳的效果。因此,香蕉是高血压患者的首选水果。糖尿病患者进食香蕉可使尿糖相对降低,故对缓解病情也大有益处。香蕉含有的泛酸等成分是人体的“开心激素”,能减轻心理压力,解除忧郁。睡前吃香蕉,还有镇静的作用。荷兰科学家研究认为:最合营养标准又能为人脸上增添笑容的水果是香蕉。\n产品特点\n盛产的香蕉蕉皮呈金黄色,蕉体长大饱满、皮薄、肉嫩、味香,营养丰富,含有16种人体所需的氨基酸和多种维生素,含糖量高达14.11%,无农药残留。最大的果丛有果360个之多,重可达32公斤,一般的果丛有果8-10段,约有果150-200个。果身弯曲,略为浅弓形,幼果向上,直立,成熟后逐渐趋于平伸,长12-30厘米,直径3.4-3.8厘米,果棱明显,有4-5棱,先端渐狭,非显著缩小,果柄短,果皮青绿色,在高温下催熟,果皮呈绿色带黄,在低温下催熟,果皮则由青变为黄色,并且生麻黑点(即“梅花点”),果肉松软,黄白色,味甜,无种子,香味特浓。\n历史民俗\n中国汉代就栽培香蕉,那时称为“甘蕉”。据说,汉武帝起扶荔宫时,收集天下奇花异木时,其中就有香蕉。晋人稽含记述香蕉说:“剩其子上皮,色黄白,味似葡萄,甜而脆,亦疗肌。”宋代陆佃所著《埤雅》云:“蕉不落叶,一叶舒则一叶蕉,故谓之蕉。”\n公元三世纪时,亚历山大远征印度发现香蕉,此后才传向世界各地。据埃及考古学家在出土文物中发现,远在四千年前的埃及陶器上就画有香蕉的图案,非洲栽培香蕉的历史比中国还早。据说希腊人在四千多年前就开始食用香蕉。古印度和波斯民间认为,金色的香蕉果实乃是“上苍赐予人类的保健佳果”。传说,佛教始祖释迦牟尼由于吃了香蕉而获得了智慧,因而被誉为“智慧之果”。\n浦北香蕉的获奖荣誉\n浦北县素有“蕉乡”之称。1991年浦北香蕉被指定为北京亚运会专用水果之一。\n品尝吃法\n果实可供鲜食,也可制香蕉干(片)、香蕉粉、香蕉酱等。南方、北方人都很喜爱。香蕉有润肺、滑肠、解酒、降血压以及减肥的作用。",
+ "issuer":"28.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":4,
+ "title": "广东绿芭蕉5斤包邮青大蕉新鲜水果牛角蕉自然熟零添加",
+ "img": "http://www.tesegu.com/public/upload/photos/000/001/543/63/f1a1470b68021b2d634e96bd9765f29eBbR2EV.jpg",
+ "content": "芭蕉的基本介绍\n芭蕉系芭蕉科,属多年生宿根草本植物。芭蕉(Basho)是 多年生草本植物。叶子很大。长椭圆形,花白色,果实跟香蕉很相似。香蕉与芭蕉的区别,香蕉和芭蕉同属于芭蕉科芭蕉属,是一个家族中两个品种。\n营养价值\n芭蕉能吃,芭蕉与香蕉的营养差不多,但从中医角度讲,都有润肠通便功效,但香蕉性凉,芭蕉中性,固胃寒者不宜多吃,一般老人宜吃芭蕉。\n产品特点\n这里产出的芭蕉,个大皮薄,肉嫩细滑,清甜爽口,具有开胃助消食的功效。\n历史民俗\n相传古时有位冯先生,夏日傍晚在书斋前偶见一绿衣女子从窗前经过,十分美丽,问其,自称\"蕉氏\"。冯拉扯女子入房,女子不从,匆忙而去,冯只扯下女子一片衣角,晚上藏于席下。次日看时竟是芭蕉叶,原来女子是芭蕉所变。\n海南芭蕉的品尝吃法\n1、一切肿毒。用芭蕉根捣烂涂患处。\n2、流动性红色风疹。治方同上。\n3、风火牙痛及虫牙痛。用芭蕉根取汁一碗,煎热含漱。\n4、消渴,骨节烦热。用芭蕉根捣汁,随时饮一、二合。\n5、血淋涩痛。用芭蕉根、旱莲草等分,水煎服。一天服两次。",
+ "issuer":"40.00",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":4,
+ "title": "福建红美人香蕉新鲜水果包邮当季香焦红皮蕉9斤批发10",
+ "img": "https://bkimg.cdn.bcebos.com/pic/d788d43f8794a4c21e908d5301f41bd5ad6e3912?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U5Mg==,g_7,xp_5,yp_5/format,f_auto",
+ "content": "红香蕉是广西科技厅2001年从马来西亚引进的香蕉新品种,具有抗寒性强、生长旺盛、果实大、外观美、颜色粉红、含糖高、香气浓、口感好等特点。\n\n广西科学技术厅名优农产品示范基地生产的南洋红香蕉施用生物有机肥,不使用人工化学物质,达到绿色食品的要求。\n红美观,皮较厚;果肉淡黄色,肉质细腻、皮香蕉在未成熟时果皮为紫红色,略发黑,熟后呈红色,具有很强的耐储存性,蕉皮不易受伤,而且果脂饱满、整齐,外形滑润,味清香,口感佳,糖分含量稍低,有特殊的兰花香味,营养也十分丰富,维生素的含量极高。红皮香蕉的产量极低,一般几十车的帝王蕉里才能出一箱红皮香蕉,而且价格高,但丝毫没有阻止它的受关注度,尤其香蕉外表的红色,更是有种喜气的意味,还是有消费者以此为礼物,表达他们对于亲朋好友的美好祝福。\n\n营养分析编辑 语音\n1. 红香蕉含有大量糖类物质及其他营养成分,可充饥、补充营养及能量。\n2. 红香蕉性寒能清肠热,味甘能润肠通便,可治疗热病烦渴等症。\n3. 红香蕉能缓和胃酸的刺激,保护胃黏膜。\n4. 红香蕉中含血管紧张素转化酶抑制物质,可以抑制血压的升高。\n5. 红香蕉果肉甲醇提取物对细菌、真菌有抑制作用,可消炎解毒。\n6. 红香蕉中大量的碳水化合物、膳食纤维等可以防癌抗癌。\n7.小孩便秘时吃红香蕉也有通肠胃的好处。",
+ "issuer":"48.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":4,
+ "title": "广西小米蕉当季水果新鲜9斤自然熟整箱苹果香蕉包邮10",
+ "img": "https://bkimg.cdn.bcebos.com/pic/e850352ac65c1038928a5b3bb2119313b17e8957?x-bce-process=image/crop,x_0,y_71,w_1600,h_1056/watermark,image_d2F0ZXIvYmFpa2UxODA=,g_7,xp_5,yp_5/format,f_auto",
+ "content": "小米蕉的外观与其它香蕉小的时候很像,几乎能以假乱真,也是生在芭蕉树上。小米蕉的皮是绿色的,摸上去手感滑润。就好象是在摸玻璃,皮还厚厚的,别看小米蕉那么娇小,它的皮可是又厚又粘,用手把小米蕉的皮掰开,里面的果肉就象玉米糖一样,颜色没有那么鲜艳,是平淡而又纯洁的乳白色,咬上一口,给你的感觉并没有那么甜,而是酸中带甜,咬起来也没那么松,就是糯糯的感觉。\n粉蕉含有丰富的营养成分,除鲜食外,还可加工成罐头食品,也可烘干、晒干制成蕉粉、蕉片或发酵酿酒,并可深加工成香蕉香精,作为各种饮料香剂。\n小米蕉\n小米蕉(5张)\n分布范围编辑 语音\n主要分于台山、陵水、三亚、平南、文昌、琼海、万宁、澄迈、临高等地区。\n园地选择\n应择取背风、向阳、土层深厚 、水质好 、排灌方便、 地势开阔 、空气流通 、冻害较轻的园地作为种植地 。 进 而小米蕉对土地的养分要求高 , 因此 ,种植过一轮的蕉园必须轮作,轮作作物可选择水稻 、莲藕 、甘蔗等。 前作是黄瓜 、番茄 、辣椒 等作物的土地 。不能种植小米蕉 ,更不能在蕉园中间种上述作物 ,以免感染香蕉花叶心腐病和束顶病 ",
+ "issuer":"28.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":4,
+ "title": "糯米蕉布依族苗族自治州册亨县特产暂无货源",
+ "img": "https://bkimg.cdn.bcebos.com/pic/8601a18b87d6277f27d1494327381f30e824fc8e?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U5Mg==,g_7,xp_5,yp_5/format,f_auto",
+ "content": "糯米蕉,贵州省黔西南布依族苗族自治州册亨县特产,全国农产品地理标志。\n地域范围编辑 语音\n黔西南布依族苗族自治州册亨县所辖岩架镇、丫他镇、双江镇、弼佑镇、八渡镇、巧马镇、百口乡、坡妹镇、者楼街道办、纳福街道办共计10个乡镇(街道)98个行政村。地理坐标为东经105°27′~106°12′,北纬 24°38′~25°19′。 [1] \n证书持有者\n册亨县经济作物管理站",
+ "issuer":"00.00",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":5,
+ "title": "葡萄树苗巨峰黑夏葡萄果苗南北方种植蓝宝石果树果苗爬藤",
+ "img": "http://www.tesegu.com/public/upload/photos/000/000/033/14/dee43b74d5a5c1bae397e4a49075bca6JdHkky.jpg",
+ "content": "葡萄的基本介绍\n大泽山葡萄产于山东省平度市大泽山镇,是山东省着名特产之一,有上百年的栽培史。大泽山葡萄风味独特,品质优良,穗大粒饱,色泽鲜艳,皮薄肉嫩,口味宜人。广泛栽培的品种有十几个,玫瑰香栽培最多。2008年,国家质检总局批准对大泽山葡萄实施地理标志产品保护。\n营养价值\n经化验,其含有机酸0.5~1%,PH值在3.1左右,含蛋白质0.5~0.9%,含矿物质0.3~0.5%,并含有多种维生素和抗坏血酸和氨基酸,经常食用具有软化血管、滋润肌肤、减肥、防癌等功效。谚语云:\"眼看稳头美,刀切不流水,入口胜蜜糖,满口清香味。\"\n产品特点\n大泽山出产的葡萄具有几大特点:\n一是穗大粒饱,色泽鲜艳,使人感觉美观涎羡而倍受青睐;\n二是清爽可口,致密而脆,酸甜适中,风味淳厚。果肉呈可溶性,吃到嘴里丰富的汁液脱果而出,舒适可口,而肉质又十分致密,即使是含糖份低的品种龙眼也能以刀切块而浆液不外溢,被誉为\"切得住\";\n三是糖度高,经化验其含糖量为17~23.5%,最高可达33%,每公斤葡萄可供人体700~900卡热量,不仅可生食,而且是酿造佳品;\n四是具祛病健体,补内益气,延年益寿之药用价值。\n获奖荣誉\n大泽山葡萄鲜食品种中的玫瑰香、泽香两个品种,曾在1995年第二届全国农业博览会上获金奖。\n1999年在昆明举办的世界园艺博览会上,大泽山葡萄11个品种荣获金奖产品称号。\n用大泽山葡萄酿制的中国第一瓶“单品种、年份、产地”葡萄酒—华东莎当妮多次在国际大赛上荣获金奖,伦敦酒食协会主席盖而特誉之为“中国最好的干白葡萄酒”。\n青岛华东葡萄酒有限公司用大泽山葡萄酿造的薏思琳、莎当妮葡萄酒,连续两届在比利时布鲁塞尔举行的世界葡萄酒精英大赛上获金奖。\n2005年9月,大泽山镇被国家农业部确定为“国家级农业标准化示范园区”,2006年大泽山葡萄在奥运推荐果品、中华名果展评会上,在青岛市推荐的三个水果品种中获唯一一个一等奖,被命名为“中华名果”。\n2008年7月大泽山葡萄通过“地理标志保护产品”认定。\n2009年9月,大泽山镇被中国农学会命名为“全国鲜食葡萄第一镇”。",
+ "issuer":"28.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":5,
+ "title": "安德鲁速冻红醋栗200g盒装装饰果粒两盒顺丰包邮",
+ "img": "https://bkimg.cdn.bcebos.com/pic/83025aafa40f4bfbfa1b400a054f78f0f63618a0?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U5Mg==,g_7,xp_5,yp_5/format,f_auto",
+ "content": "醋栗为醋栗科植物山麻子的果实,浆果球形,径7~9毫米,红色,果期7~8月,采取成熟果实,晒干。生于杂木林或针阔混交林中。分布我国东北、华北、山西、陕西、甘肃等地。欧洲人自中世纪起来就拿来享用的夏季浆果,采收季节非常短。又名灯笼果,近圆形或椭圆形,成熟时果皮黄绿色,光亮而透明,几条纵行维管束清晰可见,比较小,花萼宿存,很像灯笼,故名灯笼果。我国各地野生醋栗很多,栽培的种类和品种是从外国引入的。\n红醋栗是醋栗科、茶藨子属、茶藨亚属小灌木,株高 1~115 cm,果实成串着生在果枝上,红色,故名红醋栗。醋栗是中国重要经济树种之一,果实香甜可食,可做罐头、果酱、酿酒、饮料等 ,具有很高的经济价值,还可作观赏树种。红醋栗可用作解乏,治疗视力障碍以及关节炎的药物。红醋栗药贴膏对于治疗皮肤病效果显著。黑色浆果也经常被制作成果脯用在糕点类中以增添风味。红醋栗种子油蕴含丰富的亚麻酸,该酸主要蕴藏在植物油中。\n我国栽培黑穗醋栗与醋栗的历史很短,仅有80余年历史,从北方到南方均有栽培,主要产区在黑龙江省和吉林省,辽宁、内蒙古、甘肃等地有少量引种栽培。黑穗醋栗在黑龙江省主要分布于阿城、尚志、海林、牡丹江等地;吉林省主要分布在蛟河、延边等地。\n20世纪80年代末90年代初期,由于天然果汁饮料和果酒市场不景气,黑穗醋栗种植业受到很大冲击,栽培面积明显减少。我国醋栗栽培面积较小,产量很少。",
+ "issuer":"22.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":5,
+ "title": "无籽提子新鲜当季孕妇水果整箱带箱4斤青提阳光玫瑰葡萄",
+ "img": "https://bkimg.cdn.bcebos.com/pic/b2de9c82d158ccbf81ef328613d8bc3eb135413f?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U5Mg==,g_7,xp_5,yp_5/format,f_auto",
+ "content": "提子具有果脆个大、甜酸适口、极耐贮运、品质佳等优点,虽然价格不菲,但在市场上以其 “贵族身份”而备受青睐。提子皮和提子籽内含抗氧化物质,对于心脑血管疾病具预防作用。\n所谓“提子”一词是香港人对葡萄的称呼,红、绿、黑是根据葡萄品种的颜色不同而进行的称谓。现在有些专家。种植者及商标上也把葡萄称“提子”,这是不科学的\n1果实性状\n果穗短圆锥形,极大,长26.4cm,宽16.8cm,平均穗重880g,最大可达2035g。果穗大小较整齐,果粒着生紧密。果粒近圆形或卵圆形,红色或紫红色,特大,纵径3.3cm,横径2.8cm,平均粒重12g,最大16.7g。果粉中等厚,果皮薄而韧,与果肉较易分离。\n果肉硬脆,可切片,汁多,味甜,爽口,无香味。含糖16.3%,含酸0.5%~0.6%,品质上等。\n提子\n提子\n2生长结果习性\n植株生长势较强,隐芽萌发力、结实力均较强。副芽萌。发力中等,芽眼萌发率60%~70%,结果枝率68.3%,结果系数1.32。进入结果期较早,极丰产,正常结果树可产30000kg/hm2,生长期145~155d。\n3抗病性\n对白腐病抗性中等,抗黑痘病和霜霉病力弱。\n4综合评价\n为优良的晚熟品种,是世界著名的优良鲜食葡萄品种。穗大、粒大、色艳,果肉硬脆,优质,耐贮运,丰产,喜肥水,适宜在无霜期150d以上,降水少,气候干燥的地区种植。宜小棚架或高宽垂架栽培,采用中、短梢修剪为主的长、中、短梢混合修剪。",
+ "issuer":"26.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":5,
+ "title": "阳光玫瑰青提3斤无籽葡萄甜大提子应季新鲜水果整箱包邮",
+ "img": "https://bkimg.cdn.bcebos.com/pic/d62a6059252dd42aacfbf4070d3b5bb5c8eab8a8?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U5Mg==,g_7,xp_5,yp_5/format,f_auto",
+ "content": "醉金香是欧美杂种四倍体鲜食葡萄新品种,系辽宁省农科院园艺研究所育成.亲本为.7601×巨峰.1981年杂交,1983年结果,1987年开始区试,1997年通过审定并定名. 具有优质、抗病、高产、稳产等特点。嫩梢、幼叶绿色,绒毛中多。\n叶片特大、心脏形。叶面粗糙,有泡状突起,叶背绒毛中多。枝条粗壮,成熟后为浅褐色。果穗圆锥形、大穗、中度紧密、平均穗重800克。果粒灯泡形,成熟金黄色,平均粒重12克,最大粒重19.1g。果皮薄,与果肉易分离。果实具有浓郁的茉莉香味,肉质软硬适度,适口性好,品质上等,可溶性固形物可达18%以上。品种别名:茉莉香,品种来源:醉金香,是辽宁农科院研究所以沈阳玫瑰(7601)为母本、巨峰为父本杂交选育而成的欧美杂交四倍体鲜食品种。1997年通过品种审定。",
+ "issuer":"18.80",
+ "date":"2021-5-19 19:35:14"
+ },{
+ "typeId":5,
+ "title": "新疆玻璃脆葡萄新鲜当季水果吐鲁番无核白三色鲜葡萄无籽提子4斤",
+ "img": "https://bkimg.cdn.bcebos.com/pic/8435e5dde71190ef23568a63c61b9d16fcfa60d8?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U4MA==,g_7,xp_5,yp_5/format,f_auto",
+ "content": "赤霞珠(Cabernet Sauvignon)是一种用于酿造葡萄酒的红葡萄品种,原产自法国波尔多(Bordeaux)地区,生长容易,适合多种不同气候,已于各地普遍种植。品尝赤霞珠酿造的红葡萄酒的时候要注意食物的搭配,因为赤霞珠是浓郁型红葡萄酒,所以搭配口味浓重、特别是某些油多的菜肴很合适。\n赤霞珠是高贵的酿造红葡萄酒品种之王,是传统的酿造红葡萄酒的优良品种。这个品种适宜在炎热的砂砾土质中生长,因为果粒小但皮比较厚,所以成熟的时间比较晚,也不太会有秋天采摘前雨水较多导致的果粒腐烂的问题。同时因为春天发芽比较晚,春寒霜冻也很难影响到它的生长。如此好的种植性和产量稳定性,也是它在全世界范围内广受欢迎的一大原因。\n赤霞珠在法国主要种植在波尔多地区以及法国西南部。在波尔多,赤霞珠通常与美乐(Merlot)和品丽珠(Cabernet Franc)一起混酿,在很多其他产区也会采用这样的“波尔多混酿”(Bordeaux Blend)的经典组合。在法国西南部的朗格多克产区。\n由赤霞珠葡萄酿制的高档干红葡萄酒,淡宝石红,澄清透明,具青梗香,滋味醇厚,回味好。\n像所有优质红葡萄酒一样,由赤霞珠酿制而成红葡萄酒非常醇厚,此外,它还带有黑醋栗、浆果的水果味,甚至还有一些胡椒的感觉,令你的味蕾困惑不已。赤霞珠是欧亚种,又称苏维翁,有的时候也被音译为解百纳。原产法国,是全世界范围内最为广泛种植的红葡萄品种。值得一提的是法国波尔多左岸以种植赤霞珠为主,果穗小,平均穗重165.2克,圆锥形。果粒着生中等密度,平均粒重1.9克,圆形,紫黑色,有青草味,可溶性固形物含量16.3%~17.4%,含酸量0.56%。赤霞珠颜色深,有黑醋栗,黑樱桃(略带柿子椒、薄荷、雪松)味道,果味丰富、高单宁、高酸度、陈年长有烟薰、香草、咖啡的香气,具有藏酿之质。赤霞珠的魅力来自于实践的培养,真正的赤霞珠可陈年15年或更久。适合温、热气候,在冷气候或冷的年份无法成熟。",
+ "issuer":"20.80",
+ "date":"2021-5-19 19:35:14"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/app/src/main/assets/litepal.xml b/app/src/main/assets/litepal.xml
new file mode 100644
index 0000000..28a7667
--- /dev/null
+++ b/app/src/main/assets/litepal.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/example/fruit/MyApplication.java b/app/src/main/java/com/example/fruit/MyApplication.java
new file mode 100644
index 0000000..3018111
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/MyApplication.java
@@ -0,0 +1,27 @@
+package com.example.fruit;
+
+import android.app.Activity;
+import android.app.Application;
+
+import org.litepal.LitePal;
+
+public class MyApplication extends Application {
+ public static MyApplication Instance;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ Instance = this;
+ //初始化LitePal数据库
+ LitePal.initialize(this);
+
+ }
+ private Activity mMainActivity;
+
+ public Activity getMainActivity() {
+ return mMainActivity;
+ }
+
+ public void setMainActivity(Activity mainActivity) {
+ mMainActivity = mainActivity;
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/adapter/BrowseAdapter.java b/app/src/main/java/com/example/fruit/adapter/BrowseAdapter.java
new file mode 100644
index 0000000..0c8bff7
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/adapter/BrowseAdapter.java
@@ -0,0 +1,83 @@
+package com.example.fruit.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.fruit.R;
+import com.example.fruit.bean.Browse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 浏览记录适配器
+ */
+
+public class BrowseAdapter extends RecyclerView.Adapter {
+ private List list =new ArrayList<>();
+ private Context mActivity;
+ private ItemListener mItemListener;
+ private LinearLayout llEmpty;
+ private RecyclerView rvNewsList;
+ public void setItemListener(ItemListener itemListener){
+ this.mItemListener = itemListener;
+ }
+ public BrowseAdapter(LinearLayout llEmpty, RecyclerView rvNewsList){
+ this.llEmpty = llEmpty;
+ this.rvNewsList =rvNewsList;
+ }
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+ mActivity = viewGroup.getContext();
+ View view= LayoutInflater.from(mActivity).inflate(R.layout.item_rv_collect_list,viewGroup,false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
+ Browse browse = list.get(i);
+ if (browse != null) {
+ viewHolder.title.setText(browse.getTitle());
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mItemListener!=null){
+ mItemListener.ItemClick(browse);
+ }
+ }
+ });
+ }
+ }
+ public void addItem(List listAdd) {
+ //如果是加载第一页,需要先清空数据列表
+ this.list.clear();
+ if (listAdd!=null){
+ //添加数据
+ this.list.addAll(listAdd);
+ }
+ //通知RecyclerView进行改变--整体
+ notifyDataSetChanged();
+ }
+ @Override
+ public int getItemCount() {
+ return list.size();
+ }
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ private TextView title;
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ title = itemView.findViewById(R.id.title);
+ }
+ }
+ public interface ItemListener{
+ void ItemClick(Browse browse);
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/adapter/CarAdapter.java b/app/src/main/java/com/example/fruit/adapter/CarAdapter.java
new file mode 100644
index 0000000..0481c09
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/adapter/CarAdapter.java
@@ -0,0 +1,161 @@
+package com.example.fruit.adapter;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.recyclerview.widget.RecyclerView;
+import com.bumptech.glide.request.RequestOptions;
+import com.example.fruit.R;
+import com.example.fruit.bean.Car;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.bean.User;
+import com.example.fruit.ui.activity.FruitYActivity;
+import org.litepal.crud.DataSupport;
+import java.util.ArrayList;
+import java.util.List;
+
+//购物车适配器
+
+public class CarAdapter extends RecyclerView.Adapter {
+ private List list =new ArrayList<>();
+ private Context mActivity;
+ private RequestOptions headerRO = new RequestOptions().circleCrop();//圆角变换
+ private LinearLayout llEmpty;
+ private RecyclerView rvOrderList;
+ private ItemListener mItemListener;
+
+
+ public void setItemListener(ItemListener itemListener){
+ this.mItemListener = itemListener;
+ }
+ public CarAdapter(LinearLayout llEmpty, RecyclerView rvOrderList){
+ this.llEmpty = llEmpty;
+ this.rvOrderList =rvOrderList;
+ }
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+ mActivity = viewGroup.getContext();
+ View view= LayoutInflater.from(mActivity).inflate(R.layout.item_rv_car_list,viewGroup,false);
+
+ return new ViewHolder(view);
+
+
+ }
+
+
+
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
+ Car car = list.get(i);
+
+
+ User user = DataSupport.where("account = ? ", car.getAccount()).findFirst(User.class);
+ if (car != null && user!=null ) {
+
+ viewHolder.j.setText(String.format("¥%s",car.getIssuer()));//order.getNumber
+
+ viewHolder.title.setText(car.getTitle());
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+
+ }
+ });
+
+ viewHolder.zf.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ if (!viewHolder.cb.isChecked()) {
+ Toast.makeText(mActivity, "您还没有选择商品哦!", Toast.LENGTH_LONG).show();
+ }else {
+ Intent intent = new Intent(mActivity, FruitYActivity.class);
+ Fruit fruit = DataSupport.where("title = ?",car.getTitle()).findFirst(Fruit.class);
+ intent.putExtra("fruit",fruit);
+ mActivity.startActivity(intent);
+ return;
+ }}
+ });
+
+ viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ AlertDialog.Builder dialog = new AlertDialog.Builder(mActivity);
+ dialog.setMessage("确认要删除该商品吗");
+ //消息框确认按钮
+ dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ list.remove(car);
+ car.delete();
+ notifyDataSetChanged();//刷新ListView与数据库同步
+ Toast.makeText(mActivity,"删除成功", Toast.LENGTH_LONG).show();
+ if (list!=null && list.size() > 0){
+ rvOrderList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ }else {
+ rvOrderList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ //消息框取消按钮
+ dialog.setNeutralButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ return false;
+ }
+ });
+ }
+ }
+
+ public void addItem(List listAdd) {
+ //如果是加载第一页,需要先清空数据列表
+ this.list.clear();
+ if (listAdd!=null){
+ //添加数据
+ this.list.addAll(listAdd);
+ }
+ //通知RecyclerView进行改变--整体
+ notifyDataSetChanged();
+ }
+ @Override
+ public int getItemCount() {
+ return list.size();
+ }
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ private Button zf;
+ private TextView j;
+ private LinearLayout ll_img;
+ private TextView title;
+ private CheckBox cb;
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ zf=itemView.findViewById(R.id.zf);
+ ll_img=itemView.findViewById(R.id.ll_img);
+ title = itemView.findViewById(R.id.title);
+ j=itemView.findViewById(R.id.j);
+ cb=itemView.findViewById(R.id.cb);
+ }
+ }
+ public interface ItemListener{
+ void ItemClick(Car car);
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/adapter/FruitAdapter.java b/app/src/main/java/com/example/fruit/adapter/FruitAdapter.java
new file mode 100644
index 0000000..4129f36
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/adapter/FruitAdapter.java
@@ -0,0 +1,138 @@
+package com.example.fruit.adapter;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.example.fruit.R;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.util.SPUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class FruitAdapter extends RecyclerView.Adapter {
+ private List list =new ArrayList<>();
+ private Context mActivity;
+ private ItemListener mItemListener;
+ private LinearLayout llEmpty;
+ private RecyclerView rvfruitList;
+ public void setItemListener(ItemListener itemListener){
+ this.mItemListener = itemListener;
+ }
+ public FruitAdapter(LinearLayout llEmpty, RecyclerView rvfruitList){
+ this.llEmpty = llEmpty;
+ this.rvfruitList =rvfruitList;
+ }
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+ mActivity = viewGroup.getContext();
+ View view= LayoutInflater.from(mActivity).inflate(R.layout.item_rv_fruit_list,viewGroup,false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
+ Fruit fruit = list.get(i);
+ if (fruit != null) {
+ viewHolder.title.setText(fruit.getTitle());
+ viewHolder.author_name.setText(String.format("¥%s",fruit.getIssuer()));
+
+ Glide.with(mActivity)
+ .asBitmap()
+ .load(fruit.getImg())
+ .error(R.drawable.ic_error)
+ .skipMemoryCache(true)
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .into(viewHolder.img);
+ Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mItemListener!=null){
+ mItemListener.ItemClick(fruit);
+ }
+ }
+ });
+ if (isAdmin){
+ viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ AlertDialog.Builder dialog = new AlertDialog.Builder(mActivity);
+ dialog.setMessage("确认要删除该水果吗?");
+ dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ list.remove(fruit);
+ fruit.delete();
+ notifyDataSetChanged();
+ Toast.makeText(mActivity,"删除成功", Toast.LENGTH_LONG).show();
+ if (list!=null && list.size() > 0){
+ rvfruitList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ }else {
+ rvfruitList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ dialog.setNeutralButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ return false;
+ }
+ });
+ }
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return list.size();
+ }
+ public void addItem(List listAdd) {
+ //如果是加载第一页,需要先清空数据列表
+ this.list.clear();
+ if (listAdd!=null){
+ //添加数据
+ this.list.addAll(listAdd);
+ }
+ //通知RecyclerView进行改变--整体
+ notifyDataSetChanged();
+ }
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ private TextView title;
+ private TextView author_name;
+
+ private ImageView img;
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ title = itemView.findViewById(R.id.title);
+ author_name = itemView.findViewById(R.id.author_name);
+
+ img = itemView.findViewById(R.id.img);
+ }
+ }
+
+ public interface ItemListener{
+ void ItemClick(Fruit fruit);
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/adapter/OrderAdapter.java b/app/src/main/java/com/example/fruit/adapter/OrderAdapter.java
new file mode 100644
index 0000000..e97805a
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/adapter/OrderAdapter.java
@@ -0,0 +1,146 @@
+package com.example.fruit.adapter;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.request.RequestOptions;
+import com.example.fruit.ui.activity.FruitXActivity;
+import com.example.fruit.R;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.bean.Orders;
+import com.example.fruit.bean.User;
+import com.example.fruit.util.SPUtils;
+
+import org.litepal.crud.DataSupport;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class OrderAdapter extends RecyclerView.Adapter {
+ private List list =new ArrayList<>();
+ private Context mActivity;
+ private RequestOptions headerRO = new RequestOptions().circleCrop();//圆角变换
+ private LinearLayout llEmpty;
+ private RecyclerView rvOrderList;
+ private ItemListener mItemListener;
+ public void setItemListener(ItemListener itemListener){
+ this.mItemListener = itemListener;
+ }
+ public OrderAdapter(LinearLayout llEmpty, RecyclerView rvOrderList){
+ this.llEmpty = llEmpty;
+ this.rvOrderList =rvOrderList;
+ }
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+ mActivity = viewGroup.getContext();
+ View view= LayoutInflater.from(mActivity).inflate(R.layout.item_rv_order_list,viewGroup,false);
+
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
+ Orders order = list.get(i);
+
+
+ User user = DataSupport.where("account = ? ", order.getAccount()).findFirst(User.class);
+ if (order != null && user!=null ) {
+ viewHolder.nickName.setText(String.format("用户:%s",user.getNickName()));
+ viewHolder.number.setText(String.format("订单号:%s",order.getNumber()));
+ viewHolder.j.setText(String.format("¥%s",order.getIssuer()));//order.getNumber
+ viewHolder.date.setText(order.getDate());
+
+ viewHolder.title.setText(order.getTitle());
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(mActivity, FruitXActivity.class);
+ Fruit fruit = DataSupport.where("title = ?",order.getTitle()).findFirst(Fruit.class);
+ intent.putExtra("fruit",fruit);
+ mActivity.startActivity(intent);
+ }
+ });
+ Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);
+ if (isAdmin){
+ viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ AlertDialog.Builder dialog = new AlertDialog.Builder(mActivity);
+ dialog.setMessage("确认要删除该订单吗");
+ dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ list.remove(order);
+ order.delete();
+ notifyDataSetChanged();
+ Toast.makeText(mActivity,"删除成功", Toast.LENGTH_LONG).show();
+ if (list!=null && list.size() > 0){
+ rvOrderList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ }else {
+ rvOrderList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ dialog.setNeutralButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ return false;
+ }
+ });
+ }
+ }
+ }
+ public void addItem(List listAdd) {
+ //如果是加载第一页,需要先清空数据列表
+ this.list.clear();
+ if (listAdd!=null){
+ //添加数据
+ this.list.addAll(listAdd);
+ }
+ //通知RecyclerView进行改变--整体
+ notifyDataSetChanged();
+ }
+ @Override
+ public int getItemCount() {
+ return list.size();
+ }
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ private TextView nickName;
+ private TextView date;
+ private TextView j;
+ private TextView number;
+ private TextView title;
+ // private ImageView img;
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ nickName = itemView.findViewById(R.id.nickName);
+ date = itemView.findViewById(R.id.date);
+ number = itemView.findViewById(R.id.number);
+ title = itemView.findViewById(R.id.title);
+ j=itemView.findViewById(R.id.j);
+ // img=itemView.findViewById(R.id.img);
+ }
+ }
+ public interface ItemListener{
+ void ItemClick(Orders order);
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/adapter/UserAdapter.java b/app/src/main/java/com/example/fruit/adapter/UserAdapter.java
new file mode 100644
index 0000000..08190ae
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/adapter/UserAdapter.java
@@ -0,0 +1,124 @@
+package com.example.fruit.adapter;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.recyclerview.widget.RecyclerView;
+
+
+import com.example.fruit.R;
+import com.example.fruit.bean.Car;
+import com.example.fruit.bean.User;
+import com.example.fruit.ui.activity.UserDetailActivity;
+import com.example.fruit.util.SPUtils;
+
+import org.litepal.crud.DataSupport;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class UserAdapter extends RecyclerView.Adapter {
+ private List list =new ArrayList<>();
+ private Context mActivity;
+ private LinearLayout llEmpty;
+ private RecyclerView rvUserList;
+
+ public UserAdapter(LinearLayout llEmpty, RecyclerView rvUserList){
+ this.llEmpty = llEmpty;
+ this.rvUserList =rvUserList;
+ }
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+ mActivity = viewGroup.getContext();
+ View view= LayoutInflater.from(mActivity).inflate(R.layout.item_rv_user_list,viewGroup,false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
+ User user = list.get(i);
+ if (user!=null) {
+ String account = (String) SPUtils.get(mActivity,SPUtils.ACCOUNT,"");
+ viewHolder.itemView.setVisibility(account.equals(user.getAccount())? View.GONE: View.VISIBLE);
+ viewHolder.nickName.setText(String.format("用户昵称:%s",user.getNickName()));
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(mActivity, UserDetailActivity.class);
+ intent.putExtra("user",user);
+ mActivity.startActivity(intent);
+ }
+ });
+ viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ AlertDialog.Builder dialog = new AlertDialog.Builder(mActivity);
+ dialog.setMessage("确认要删除该用户吗");
+ dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ //删除收藏记录和浏览记录
+ List brows = DataSupport.where("account = ?",user.getAccount()).find(Car.class);
+ if (brows !=null && brows.size() > 0){
+ for (Car car : brows) {
+ car.delete();
+ }
+ }
+ list.remove(user);
+ user.delete();
+ notifyDataSetChanged();
+ Toast.makeText(mActivity,"删除成功", Toast.LENGTH_LONG).show();
+ if (list!=null && list.size() > 1){
+ rvUserList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ }else {
+ rvUserList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ dialog.setNeutralButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ return false;
+ }
+ });
+ }
+ }
+ public void addItem(List listAdd) {
+ //如果是加载第一页,需要先清空数据列表
+ this.list.clear();
+ if (listAdd!=null){
+ //添加数据
+ this.list.addAll(listAdd);
+ }
+ //通知RecyclerView进行改变--整体
+ notifyDataSetChanged();
+ }
+ @Override
+ public int getItemCount() {
+ return list.size();
+ }
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ private TextView nickName;
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ nickName = itemView.findViewById(R.id.nickName);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/bean/Browse.java b/app/src/main/java/com/example/fruit/bean/Browse.java
new file mode 100644
index 0000000..c6ec6d6
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/bean/Browse.java
@@ -0,0 +1,33 @@
+package com.example.fruit.bean;
+
+import org.litepal.crud.DataSupport;
+
+
+/**
+ * 浏览记录
+ */
+public class Browse extends DataSupport {
+ private String account;//账号
+ private String title;//水果标题
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public Browse(String account, String title) {
+ this.account = account;
+ this.title = title;
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/bean/Car.java b/app/src/main/java/com/example/fruit/bean/Car.java
new file mode 100644
index 0000000..2a875b9
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/bean/Car.java
@@ -0,0 +1,81 @@
+package com.example.fruit.bean;
+
+import org.litepal.crud.DataSupport;
+
+import java.io.Serializable;
+
+public class Car extends DataSupport implements Serializable {
+ private String account;//账号
+ private String title;//标题
+ private String number;//编号
+ private String issuer;//价格
+ private String img;//图片
+ private String amount;//数量
+ private String date;//时间
+
+ public String getImg() {
+ return img;
+ }
+
+ public void setImg(String img) {
+ this.img = img;
+ }
+
+ public String getIssuer() {
+ return issuer;
+ }
+
+ public void setIssuer(String issuer) {
+ this.issuer=issuer;
+ }
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+
+ public String getAmount() {
+ return amount;
+ }
+
+ public void setAmount(String amount) {
+ this.amount = amount;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public Car(String issuer, String account, String title, String number, String amount, String date) {
+ this.issuer=issuer;
+ this.account = account;
+ this.title = title;
+ this.number = number;
+ this.amount = amount;
+ this.date = date;
+
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/bean/Fruit.java b/app/src/main/java/com/example/fruit/bean/Fruit.java
new file mode 100644
index 0000000..04962d1
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/bean/Fruit.java
@@ -0,0 +1,75 @@
+package com.example.fruit.bean;
+
+import org.litepal.crud.DataSupport;
+
+import java.io.Serializable;
+
+
+/**
+ * 水果
+ */
+public class Fruit extends DataSupport implements Serializable {
+ private Integer typeId;//类型
+ private String title;//标题
+ private String img;//图片
+ private String content;//内容
+ private String issuer;//价格
+ private String date;//时间
+
+ public Integer getTypeId() {
+ return typeId;
+ }
+
+ public void setTypeId(Integer typeId) {
+ this.typeId = typeId;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getImg() {
+ return img;
+ }
+
+ public void setImg(String img) {
+ this.img = img;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public String getIssuer() {
+ return issuer;
+ }
+
+ public void setIssuer(String issuer) {
+ this.issuer = issuer;
+ }
+
+ public Fruit(Integer typeId, String title, String img, String content, String issuer, String date) {
+ this.typeId = typeId;
+ this.title = title;
+ this.img = img;
+ this.content = content;
+ this.issuer = issuer;
+ this.date = date;
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/bean/Orders.java b/app/src/main/java/com/example/fruit/bean/Orders.java
new file mode 100644
index 0000000..834a494
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/bean/Orders.java
@@ -0,0 +1,81 @@
+package com.example.fruit.bean;
+
+import org.litepal.crud.DataSupport;
+
+import java.io.Serializable;
+
+public class Orders extends DataSupport implements Serializable {
+ private String account;//账号
+ private String title;//标题
+ private String number;//编号
+ private String issuer;//价格
+ private String img;//图片
+ private String amount;//数量
+ private String date;//时间
+
+ public String getImg() {
+ return img;
+ }
+
+ public void setImg(String img) {
+ this.img = img;
+ }
+
+ public String getIssuer() {
+ return issuer;
+ }
+
+ public void setIssuer(String issuer) {
+ this.issuer=issuer;
+ }
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+
+ public String getAmount() {
+ return amount;
+ }
+
+ public void setAmount(String amount) {
+ this.amount = amount;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public Orders(String issuer,String account,String title, String number, String amount, String date) {
+ this.issuer=issuer;
+ this.account = account;
+ this.title = title;
+ this.number = number;
+ this.amount = amount;
+ this.date = date;
+
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/bean/User.java b/app/src/main/java/com/example/fruit/bean/User.java
new file mode 100644
index 0000000..e7f7ac2
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/bean/User.java
@@ -0,0 +1,66 @@
+package com.example.fruit.bean;
+
+import org.litepal.crud.DataSupport;
+
+import java.io.Serializable;
+
+
+/**
+ * 用户
+ */
+public class User extends DataSupport implements Serializable {
+ private String account;//账号
+ private String password;//密码
+ private String nickName;//昵称
+ private String age;//年龄
+ private String email;//邮箱
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getNickName() {
+ return nickName;
+ }
+
+ public void setNickName(String nickName) {
+ this.nickName = nickName;
+ }
+
+
+ public String getAge() {
+ return age;
+ }
+
+ public void setAge(String age) {
+ this.age = age;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public User(String account, String password, String nickName, String age, String email) {
+ this.account = account;
+ this.password = password;
+ this.nickName = nickName;
+ this.age = age;
+ this.email = email;
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/AddFruitActivity.java b/app/src/main/java/com/example/fruit/ui/activity/AddFruitActivity.java
new file mode 100644
index 0000000..48c197e
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/AddFruitActivity.java
@@ -0,0 +1,132 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.Spinner;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.example.fruit.R;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+
+/**
+ * 添加页面
+ */
+public class AddFruitActivity extends AppCompatActivity {
+ private ActionBar mActionBar;//标题栏
+ private Activity myActivity;
+ private EditText etTitle;//标题
+ private EditText etIssuer;//发布单位
+ private EditText etImg;//图片
+ private Spinner spType;//类型
+ private EditText etContent;//内容
+ private ImageView ivImg;//图片
+ SimpleDateFormat sf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ private Fruit mfruit;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ myActivity = this;
+ setContentView(R.layout.activity_fruit_add);
+ etTitle = findViewById(R.id.title);
+ etIssuer = findViewById(R.id.issuer);
+ spType = findViewById(R.id.type);
+ etImg = findViewById(R.id.img);
+ etContent = findViewById(R.id.content);
+ ivImg = findViewById(R.id.iv_img);
+ mActionBar = findViewById(R.id.myActionBar);
+ //侧滑菜单
+ mActionBar.setData(myActivity,"编辑水果信息", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ initView();
+ }
+
+ private void initView() {
+ mfruit = (Fruit) getIntent().getSerializableExtra("fruit");
+ if (mfruit !=null){
+ etTitle.setText(mfruit.getTitle());
+ spType.setSelection(mfruit.getTypeId());
+ etImg.setText(mfruit.getImg());
+ etIssuer.setText(mfruit.getIssuer());
+ etContent.setText(mfruit.getContent());
+ spType.setSelection(mfruit.getTypeId(),true);
+ Glide.with(myActivity)
+ .asBitmap()
+ .load(mfruit.getImg())
+ .error(R.drawable.ic_error)
+ .skipMemoryCache(true)
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .into(ivImg);
+ }
+ ivImg.setVisibility(mfruit ==null? View.GONE: View.VISIBLE);
+ }
+
+ public void save(View view){
+ String title = etTitle.getText().toString();
+ String issuer = etIssuer.getText().toString();
+ String img = etImg.getText().toString();
+ String content = etContent.getText().toString();
+ Integer typeId = spType.getSelectedItemPosition();
+ if ("".equals(title)) {
+ Toast.makeText(myActivity,"标题不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(issuer)) {
+ Toast.makeText(myActivity,"价格不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(img)) {
+ Toast.makeText(myActivity,"图片地址不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(content)) {
+ Toast.makeText(myActivity,"描述不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ Fruit fruit = null;
+ if (!title.equals(mfruit != null? mfruit.getTitle():"")){
+ fruit = DataSupport.where("title = ?",title).findFirst(Fruit.class);
+ }
+ if (fruit == null ){
+ if (mfruit != null){
+ fruit = DataSupport.where("title = ?", mfruit.getTitle()).findFirst(Fruit.class);
+ fruit.setTypeId(typeId);
+ fruit.setTitle(title);
+ fruit.setIssuer(issuer);
+ fruit.setImg(img);
+ fruit.setContent(content);
+ }else {
+ fruit = new Fruit(typeId,title,img,content,issuer,sf.format(new Date()));
+ }
+ fruit.save();
+ setResult(RESULT_OK);
+ finish();
+ Toast.makeText(myActivity,"保存成功", Toast.LENGTH_LONG).show();
+ }else {
+ Toast.makeText(myActivity,"该标题已存在", Toast.LENGTH_LONG).show();
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/BrowseActivity.java b/app/src/main/java/com/example/fruit/ui/activity/BrowseActivity.java
new file mode 100644
index 0000000..41f4122
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/BrowseActivity.java
@@ -0,0 +1,101 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.fruit.R;
+import com.example.fruit.adapter.BrowseAdapter;
+import com.example.fruit.bean.Browse;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+import java.util.List;
+
+
+/**
+ * 浏览记录
+ */
+public class BrowseActivity extends AppCompatActivity {
+ private Activity myActivity;
+ private ActionBar mTitleBar;//标题栏
+ private LinearLayout llEmpty;
+ private RecyclerView rvBrowseList;
+ private BrowseAdapter mBrowseAdapter;
+ private List mBrowses;
+ private String account;
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_browse);
+ myActivity = this;
+ rvBrowseList = findViewById(R.id.rv_collect_list);
+ llEmpty = findViewById(R.id.ll_empty);
+ mTitleBar = (ActionBar)findViewById(R.id.myActionBar);
+ mTitleBar.setData(myActivity,"浏览记录", R.drawable.ic_back, 0, 0,getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ initView();
+ }
+
+ private void initView() {
+ account = (String) SPUtils.get(myActivity, SPUtils.ACCOUNT,"");
+ LinearLayoutManager layoutManager=new LinearLayoutManager(myActivity);
+ //=1.2、设置为垂直排列,用setOrientation方法设置(默认为垂直布局)
+ layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+ //=1.3、设置recyclerView的布局管理器
+ rvBrowseList.setLayoutManager(layoutManager);
+ //==2、实例化适配器
+ //=2.1、初始化适配器
+ mBrowseAdapter=new BrowseAdapter(llEmpty,rvBrowseList);
+ //=2.3、设置recyclerView的适配器
+ rvBrowseList.setAdapter(mBrowseAdapter);
+ loadData();//加载数据
+ mBrowseAdapter.setItemListener(new BrowseAdapter.ItemListener() {
+ @Override
+ public void ItemClick(Browse collect) {
+ Intent intent = new Intent(myActivity, FruitDetailActivity.class);;
+ Fruit news = DataSupport.where("title = ?",collect.getTitle()).findFirst(Fruit.class);
+ intent.putExtra("fruit",news);
+ startActivityForResult(intent,100);
+ }
+ });
+ }
+
+ /**
+ * 加载数据
+ */
+ private void loadData(){
+ mBrowses = DataSupport.where("account = ?",account).find(Browse.class);//查询浏览记录
+ if (mBrowses !=null && mBrowses.size()>0){
+ rvBrowseList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ mBrowseAdapter.addItem(mBrowses);
+ }else {
+ rvBrowseList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+ @Override
+ public void onResume() {
+ super.onResume();
+ loadData();
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/FruitDetailActivity.java b/app/src/main/java/com/example/fruit/ui/activity/FruitDetailActivity.java
new file mode 100644
index 0000000..ef36f09
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/FruitDetailActivity.java
@@ -0,0 +1,115 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.example.fruit.R;
+import com.example.fruit.bean.Browse;
+import com.example.fruit.bean.Car;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+
+/**
+ * 水果明细信息
+ */
+public class FruitDetailActivity extends AppCompatActivity {
+ private Activity mActivity;
+ private ImageView ivImg;
+ private TextView tvTitle;
+ private TextView tvDate;
+ private TextView tvContent;
+ private TextView tvIssuer;
+ private Button btnCollect;
+ private Button btnCancel;
+ private ActionBar mActionBar;//标题栏
+ private SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mActivity = this;
+ setContentView(R.layout.activity_fruit_detail);
+ ivImg = findViewById(R.id.img);
+ tvTitle= findViewById(R.id.title);
+ tvDate = findViewById(R.id.date);
+ tvContent = findViewById(R.id.content);
+ tvIssuer = findViewById(R.id.issuer);
+ btnCollect = findViewById(R.id.btn_collect);
+ btnCancel = findViewById(R.id.btn_cancel);
+ mActionBar = findViewById(R.id.myActionBar);
+ //侧滑菜单
+ mActionBar.setData(mActivity,"商品详情", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ Fruit fruit = (Fruit) getIntent().getSerializableExtra("fruit");
+ tvTitle.setText(fruit.getTitle());
+ tvDate.setText(String.format("上架时间:%s",fruit.getDate()));
+ tvContent.setText(fruit.getContent());
+ tvIssuer.setText(String.format("¥ %s",fruit.getIssuer()));
+ Glide.with(mActivity)
+ .asBitmap()
+ .skipMemoryCache(true)
+ .load(fruit.getImg())
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .into(ivImg);
+ String account = (String) SPUtils.get(mActivity,SPUtils.ACCOUNT,"");
+ //浏览记录
+ Browse browse = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Browse.class);//浏览记录
+ if (browse == null) {//不存在该条浏览记录 新增记录
+ Browse browse1 = new Browse(account,fruit.getTitle());
+ browse1.save();
+ }
+
+ Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);
+ if (!isAdmin){
+ Car order = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Car.class);
+ btnCollect.setVisibility(order!=null?View.GONE:View.VISIBLE);
+ btnCancel.setVisibility(order!=null?View.VISIBLE:View.GONE);
+ }
+ //收藏
+ btnCollect.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Car car = new Car(fruit.getIssuer(),account,fruit.getTitle(),"S"+System.currentTimeMillis(),account,sf.format(new Date()));
+ car.save();
+ Toast.makeText(mActivity,"加入购物车成功", Toast.LENGTH_SHORT).show();
+ btnCollect.setVisibility(View.GONE);
+ btnCancel.setVisibility(View.VISIBLE);
+ }
+ });
+ //取消收藏
+ btnCancel.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Car order = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Car.class);
+ order.delete();
+ Toast.makeText(mActivity,"已从购物车移除", Toast.LENGTH_SHORT).show();
+ btnCollect.setVisibility(View.VISIBLE);
+ btnCancel.setVisibility(View.GONE);
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/FruitXActivity.java b/app/src/main/java/com/example/fruit/ui/activity/FruitXActivity.java
new file mode 100644
index 0000000..7d5f82b
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/FruitXActivity.java
@@ -0,0 +1,74 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.example.fruit.R;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.widget.ActionBar;
+
+import java.text.SimpleDateFormat;
+
+
+/**
+ * 订单明细信息
+ */
+public class FruitXActivity extends AppCompatActivity {
+ private Activity mActivity;
+ private ImageView ivImg;
+ private TextView tvTitle;
+ private TextView tvDate;
+ private TextView tvContent;
+ private TextView tvIssuer;
+ private Button btnCollect;
+ private Button btnCancel;
+ private ActionBar mActionBar;//标题栏
+ private SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mActivity = this;
+ setContentView(R.layout.activity_fruit_x);
+ ivImg = findViewById(R.id.img);
+ tvTitle= findViewById(R.id.title);
+ tvDate = findViewById(R.id.date);
+ tvContent = findViewById(R.id.content);
+ tvIssuer = findViewById(R.id.issuer);
+ btnCollect = findViewById(R.id.btn_collect);
+ btnCancel = findViewById(R.id.btn_cancel);
+ mActionBar = findViewById(R.id.myActionBar);
+ //侧滑菜单
+ mActionBar.setData(mActivity,"查看详情", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ Fruit fruit = (Fruit) getIntent().getSerializableExtra("fruit");
+ tvTitle.setText(fruit.getTitle());
+ tvDate.setText(String.format("上架时间:%s",fruit.getDate()));
+ tvContent.setText(fruit.getContent());
+ tvIssuer.setText(String.format("¥ %s",fruit.getIssuer()));
+ Glide.with(mActivity)
+ .asBitmap()
+ .skipMemoryCache(true)
+ .load(fruit.getImg())
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .into(ivImg);
+ String account = (String) SPUtils.get(mActivity,SPUtils.ACCOUNT,"");
+
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/FruitYActivity.java b/app/src/main/java/com/example/fruit/ui/activity/FruitYActivity.java
new file mode 100644
index 0000000..4a7f7e3
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/FruitYActivity.java
@@ -0,0 +1,149 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.example.fruit.R;
+import com.example.fruit.bean.Car;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.bean.Orders;
+import com.example.fruit.ui.activity.JsActivity;
+import com.example.fruit.ui.activity.MainActivity;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+import android.widget.RadioButton;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+
+/**
+ * 结算商品
+ */
+public class FruitYActivity extends AppCompatActivity {
+ private Activity mActivity;
+ private ImageView ivImg;
+ private TextView tvTitle;
+ private TextView tvDate;
+ private TextView tvIssuer;
+ private Button btnCollect;
+ private Button btnCancel;
+ private ActionBar mActionBar;//标题栏
+ private SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mActivity = this;
+ setContentView(R.layout.activity_fruit_y);
+ ivImg = findViewById(R.id.img);
+ tvTitle= findViewById(R.id.title);
+ tvDate = findViewById(R.id.date);
+ tvIssuer = findViewById(R.id.issuer);
+ btnCollect = findViewById(R.id.btn_collect);
+ btnCancel = findViewById(R.id.btn_cancel);
+ mActionBar = findViewById(R.id.myActionBar);
+ //侧滑菜单
+ mActionBar.setData(mActivity,"结算商品", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ final RadioButton rab_weixin = (RadioButton)findViewById(R.id.rab_wenxin);
+ final RadioButton rab_zhifubao = (RadioButton)findViewById(R.id.rab_zhifubao);
+ final RadioButton rab_yinhangka = (RadioButton)findViewById(R.id.rab_yinhangka);
+ final TextView tv_zf = (TextView)findViewById(R.id.tv_zf);
+
+ View.OnClickListener a = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ tv_zf.setText("您选择的支付方式是:"+"\n"+" 微信支付");
+ }
+ };
+ View.OnClickListener b = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ tv_zf.setText("您选择的支付方式是:"+"\n"+" 支付宝支付");
+ }
+ };
+
+ View.OnClickListener c = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ tv_zf.setText("您选择的支付方式是:"+"\n "+" 银行卡支付");
+
+ }
+ };
+ //3、将两个监听器分别配置给两个按钮
+ rab_weixin.setOnClickListener(a);
+ rab_zhifubao.setOnClickListener(b);
+ rab_yinhangka.setOnClickListener(c);
+
+
+ Fruit fruit = (Fruit) getIntent().getSerializableExtra("fruit");
+ tvTitle.setText(fruit.getTitle());
+ tvDate.setText(String.format("上架时间:%s",fruit.getDate()));
+ tvIssuer.setText(String.format("¥ %s",fruit.getIssuer()));
+ Glide.with(mActivity)
+ .asBitmap()
+ .skipMemoryCache(true)
+ .load(fruit.getImg())
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .into(ivImg);
+ String account = (String) SPUtils.get(mActivity,SPUtils.ACCOUNT,"");
+ Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);
+ if (!isAdmin){
+ Car car = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Car.class);
+ btnCollect.setVisibility(car!=null?View.VISIBLE:View.GONE);
+ btnCancel.setVisibility(car!=null?View.GONE:View.VISIBLE);
+ }
+
+ //支付
+ btnCollect.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ if (!rab_yinhangka.isChecked()&&!rab_zhifubao.isChecked()&&!rab_weixin.isChecked()) {
+ Toast.makeText(mActivity, "请选择支付方式!", Toast.LENGTH_LONG).show();
+ return;
+ }
+ Orders orders = new Orders(fruit.getIssuer(),account,fruit.getTitle(),"S"+System.currentTimeMillis(),account,sf.format(new Date()));
+ orders.save();
+ Car car = DataSupport.where("account = ? and title = ?",account,fruit.getTitle()).findFirst(Car.class);
+ car.delete();
+ // Intent intent = new Intent(mActivity, JsActivity.class);
+ // startActivity(intent);
+ Toast.makeText(mActivity,"支付成功,请勿重复支付!", Toast.LENGTH_SHORT).show();
+
+ btnCollect.setVisibility(View.GONE);
+ btnCancel.setVisibility(View.VISIBLE);
+ }
+ });
+ //已支付
+ btnCancel.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Toast.makeText(mActivity,"该商品已支付,请在我的订单中查看!", Toast.LENGTH_SHORT).show();
+
+ btnCollect.setVisibility(View.GONE);
+ btnCancel.setVisibility(View.GONE);
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/JsActivity.java b/app/src/main/java/com/example/fruit/ui/activity/JsActivity.java
new file mode 100644
index 0000000..20abfd1
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/JsActivity.java
@@ -0,0 +1,86 @@
+package com.example.fruit.ui.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.RadioButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.example.fruit.R;
+import com.example.fruit.widget.ActionBar;
+
+/**
+ * 结算
+ */
+public class JsActivity extends AppCompatActivity implements View.OnClickListener{
+ Button btn_ZF;
+ private Activity myActivity;
+ private ActionBar mTitleBar;//标题栏
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_js);
+ mTitleBar = (ActionBar) findViewById(R.id.myActionBar);
+ mTitleBar.setData(myActivity,"付款方式", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ final RadioButton rab_weixin = (RadioButton)findViewById(R.id.rab_wenxin);
+ final RadioButton rab_zhifubao = (RadioButton)findViewById(R.id.rab_zhifubao);
+ final RadioButton rab_yinhangka = (RadioButton)findViewById(R.id.rab_yinhangka);
+ final TextView tv_zf = (TextView)findViewById(R.id.tv_zf);
+
+ View.OnClickListener nanJianTingQi = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ tv_zf.setText("您选择的支付方式是:"+"\n\n"+" 微信支付");
+ }
+ };
+ View.OnClickListener nan2JianTingQi = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ tv_zf.setText("您选择的支付方式是:"+"\n\n"+" 支付宝支付(暂不支持)");
+ }
+ };
+
+ View.OnClickListener nvJianTingQi = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ tv_zf.setText("您选择的支付方式是:"+"\n\n"+" 银行卡支付(暂不支持)");
+
+ }
+ };
+ //3、将两个监听器分别配置给两个按钮
+ rab_weixin.setOnClickListener(nanJianTingQi);
+ rab_zhifubao.setOnClickListener(nan2JianTingQi);
+ rab_yinhangka.setOnClickListener(nvJianTingQi);
+
+
+
+ initView();
+
+ }
+ public void initView() { }
+
+ public void onClick(View v) {
+ Toast.makeText(JsActivity.this, "抱歉,目前仅支持微信扫码支付", Toast.LENGTH_LONG).show();
+ Intent intent = new Intent(JsActivity.this, WxActivity.class);
+ startActivity(intent);
+ }
+
+
+
+}
+
+
diff --git a/app/src/main/java/com/example/fruit/ui/activity/LoginActivity.java b/app/src/main/java/com/example/fruit/ui/activity/LoginActivity.java
new file mode 100644
index 0000000..67c597c
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/LoginActivity.java
@@ -0,0 +1,147 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+
+import com.example.fruit.R;
+import com.example.fruit.bean.User;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+
+/**
+ * 登录页面
+ */
+public class LoginActivity extends Activity {
+ private static final String TAG = "LoginActivity";
+ private Activity activity;
+ private ActionBar mTitleBar;//标题栏
+ private EditText etAccount;//手机号
+ private EditText etPassword;//密码
+ private TextView tvRegister;//注册
+ private Button btnLogin;//登录按钮
+ private RadioGroup rgType;//用户类型
+ private RadioButton rbUser;//用户类型
+ private RadioButton rbAdmin;//用户类型
+ private CheckBox cbAgree;
+ private TextView tv_mm;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ activity=this;
+ setContentView(R.layout.activity_login);//加载页面
+ etAccount =(EditText) findViewById(R.id.et_account);//获取手机号
+ etPassword=(EditText)findViewById(R.id.et_password);//获取密码
+ tvRegister=(TextView)findViewById(R.id.tv_register);//获取注册
+ tv_mm=(TextView)findViewById(R.id.tv_mm);
+ btnLogin=(Button)findViewById(R.id.btn_login);//获取登录
+ rgType = findViewById(R.id.rg_type);
+ rbUser = findViewById(R.id.rb_user);
+ rbAdmin = findViewById(R.id.rb_admin);
+ cbAgree = findViewById(R.id.cb_agree);
+ mTitleBar = (ActionBar)findViewById(R.id.myActionBar);
+ mTitleBar.setData(activity,"登录",0, 0, 0,getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+
+ //注册
+ tvRegister.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //跳转到注册页面
+ Intent intent=new Intent(activity, RegisterActivity.class);
+ startActivity(intent);
+ }
+
+ });
+ tv_mm.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent=new Intent(activity,PasswordActivity.class);
+ startActivity(intent);
+ }
+ });
+ //选择类型
+ rgType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(RadioGroup group, int checkedId) {
+ SPUtils.put(activity,SPUtils.IS_ADMIN,checkedId == R.id.rb_admin);
+ }
+ });
+ //设置点击按钮
+ btnLogin.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //关闭虚拟键盘
+ InputMethodManager inputMethodManager= (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(),0);
+ //获取请求参数
+ String account= etAccount.getText().toString();
+ String password=etPassword.getText().toString();
+ Boolean isAdmit = (Boolean) SPUtils.get(activity,SPUtils.IS_ADMIN,false);
+ if ("".equals(account)){//账号不能为空
+ Toast.makeText(activity,"账号不能为空!", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(password)){//密码为空
+ Toast.makeText(activity,"密码为空!", Toast.LENGTH_LONG).show();
+ return;
+ }
+ User user = DataSupport.where("account = ?", account).findFirst(User.class);
+ if (user != null) {
+ if (!password.equals(user.getPassword())) {
+ Toast.makeText(activity, "密码错误!", Toast.LENGTH_SHORT).show();
+ }else{
+ if (isAdmit && !"admin".equals(user.getAccount())){
+ Toast.makeText(activity,"该账号不是管理员账号!", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if (!isAdmit && "admin".equals(user.getAccount())){
+ Toast.makeText(activity,"该账号不是普通用户账号!", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if (!cbAgree.isChecked()) {
+ Toast.makeText(activity, "请同意用户协议!", Toast.LENGTH_LONG).show();
+ return;
+ }
+ SPUtils.put(LoginActivity.this,"account",account);
+ Intent intent = new Intent(activity, MainActivity.class);
+ startActivity(intent);
+ Toast.makeText(activity,"恭喜你,登录成功!", Toast.LENGTH_SHORT).show();
+
+ finish();
+ }
+ }else{
+ Toast.makeText(activity, "账号不存在", Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/MainActivity.java b/app/src/main/java/com/example/fruit/ui/activity/MainActivity.java
new file mode 100644
index 0000000..3e33eba
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/MainActivity.java
@@ -0,0 +1,226 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.Toast;
+
+import com.example.fruit.MyApplication;
+import com.example.fruit.R;
+import com.example.fruit.ui.fragment.FruitFragment;
+import com.example.fruit.ui.fragment.CarFragment;
+import com.example.fruit.ui.fragment.UserFragment;
+import com.example.fruit.ui.fragment.OrderFragment;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.widget.ActionBar;
+
+
+/**
+ * 主页面
+ */
+public class MainActivity extends Activity {
+ private ActionBar mActionBar;//标题栏
+ private Activity myActivity;
+ private LinearLayout llContent;
+ private RadioButton rbFruit;
+ private RadioButton rbFruitData;
+ private RadioButton rbUserManage;
+ private RadioButton rbUser;
+ private Fragment[] fragments = new Fragment[]{null, null,null,null};//存放Fragment
+ private Boolean mIsAdmin;//是否管理员
+ private String mAccount;//账号
+
+ @Override
+ protected void onCreate( Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ myActivity = this;
+ setContentView(R.layout.activity_main);
+ MyApplication.Instance.setMainActivity(myActivity);
+ mIsAdmin = (Boolean) SPUtils.get(myActivity, SPUtils.IS_ADMIN,false);
+ llContent = (LinearLayout) findViewById(R.id.ll_main_content);
+ rbFruit = (RadioButton) findViewById(R.id.rb_main_fruit);
+ rbFruitData = (RadioButton) findViewById(R.id.rb_main_fruit_data);
+ rbUserManage = (RadioButton) findViewById(R.id.rb_main_setting);
+ rbUser = (RadioButton) findViewById(R.id.rb_main_user);
+ mActionBar = (ActionBar) findViewById(R.id.myActionBar);
+ //侧滑菜单
+ mActionBar.setData(myActivity,"水果商城", 0, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ initView();
+ setViewListener();
+ }
+
+ private void setViewListener() {
+ rbFruit.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mActionBar.setTitle("水果分类");
+ switchFragment(0);
+ }
+ });
+ rbFruitData.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if ("".equals(mAccount)) {////未登录,跳转到登录页面
+ MyApplication.Instance.getMainActivity().finish();
+ startActivity(new Intent(myActivity, LoginActivity.class));
+ }else {//已经登录
+ mActionBar.setTitle("我的购物车");
+ switchFragment(1);
+ }
+ }
+ });
+ rbUserManage.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mActionBar.setTitle("所有订单");
+ switchFragment(2);
+ }
+ });
+ rbUser.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if ("".equals(mAccount)) {////未登录,跳转到登录页面
+ MyApplication.Instance.getMainActivity().finish();
+ startActivity(new Intent(myActivity, LoginActivity.class));
+ }else {//已经登录
+ mActionBar.setTitle("个人中心");
+ switchFragment(3);
+ }
+ }
+ });
+ }
+
+ private void initView() {
+ mIsAdmin = (Boolean) SPUtils.get(myActivity,SPUtils.IS_ADMIN,false);
+ mAccount = (String) SPUtils.get(myActivity,SPUtils.ACCOUNT,"");
+ //设置导航栏图标样式
+ Drawable iconNews=getResources().getDrawable(R.drawable.selector_main_rb_home);//设置主页图标样式
+ iconNews.setBounds(0,0,68,68);//设置图标边距 大小
+ rbFruit.setCompoundDrawables(null,iconNews,null,null);//设置图标位置
+ rbFruit.setCompoundDrawablePadding(5);//设置文字与图片的间距
+ Drawable iconNewsData=getResources().getDrawable(R.drawable.selector_main_rb_buy);//设置主页图标样式
+ iconNewsData.setBounds(0,0,68,68);//设置图标边距 大小
+ rbFruitData.setCompoundDrawables(null,iconNewsData,null,null);//设置图标位置
+ rbFruitData.setCompoundDrawablePadding(5);//设置文字与图片的间距
+ Drawable iconSetting=getResources().getDrawable(R.drawable.selector_main_rb_manage);//设置主页图标样式
+ iconSetting.setBounds(0,0,60,60);//设置图标边距 大小
+ rbUserManage.setCompoundDrawables(null,iconSetting,null,null);//设置图标位置
+ rbUserManage.setCompoundDrawablePadding(5);//设置文字与图片的间距
+ Drawable iconUser=getResources().getDrawable(R.drawable.selector_main_rb_user);//设置主页图标样式
+ iconUser.setBounds(0,0,55,55);//设置图标边距 大小
+ rbUser.setCompoundDrawables(null,iconUser,null,null);//设置图标位置
+ rbUser.setCompoundDrawablePadding(5);//设置文字与图片的间距
+ rbUserManage.setVisibility(mIsAdmin? View.VISIBLE: View.GONE);
+ switchFragment(0);
+ rbFruit.setChecked(true);
+ rbFruitData.setVisibility(mIsAdmin? View.GONE: View.VISIBLE);
+ switchFragment(0);
+ rbFruit.setChecked(true);
+ }
+ /**
+ * 方法 - 切换Fragment
+ *
+ * @param fragmentIndex 要显示Fragment的索引
+ */
+ private void switchFragment(int fragmentIndex) {
+ //在Activity中显示Fragment
+ //1、获取Fragment管理器 FragmentManager
+ FragmentManager fragmentManager = this.getFragmentManager();
+ //2、开启fragment事务
+ FragmentTransaction transaction = fragmentManager.beginTransaction();
+
+ //懒加载 - 如果需要显示的Fragment为null,就new。并添加到Fragment事务中
+ if (fragments[fragmentIndex] == null) {
+ if (mIsAdmin){
+ switch (fragmentIndex) {
+ case 0://NewsFragment
+ fragments[fragmentIndex] = new FruitFragment();
+ break;
+ case 1://CollectFragment
+ fragments[fragmentIndex] = new CarFragment();
+ break;
+ case 2://UserManageFragment
+ fragments[fragmentIndex] = new OrderFragment();
+ break;
+ case 3://UserFragment
+ fragments[fragmentIndex] = new UserFragment();
+ break;
+ }
+ }else {
+ switch (fragmentIndex) {
+ case 0://NewsFragment
+ fragments[fragmentIndex] = new FruitFragment();
+ break;
+ case 1://CollectFragment
+ fragments[fragmentIndex] = new CarFragment();
+ break;
+ case 2://UserManageFragment
+ fragments[fragmentIndex] = new OrderFragment();
+ break;
+ case 3://UserFragment
+ fragments[fragmentIndex] = new UserFragment();
+ break;
+ }
+ }
+
+ //==添加Fragment对象到Fragment事务中
+ //参数:显示Fragment的容器的ID,Fragment对象
+ transaction.add(R.id.ll_main_content, fragments[fragmentIndex]);
+ }
+
+ //隐藏其他的Fragment
+ for (int i = 0; i < fragments.length; i++) {
+ if (fragmentIndex != i && fragments[i] != null) {
+ //隐藏指定的Fragment
+ transaction.hide(fragments[i]);
+ }
+ }
+ //4、显示Fragment
+ transaction.show(fragments[fragmentIndex]);
+
+ //5、提交事务
+ transaction.commit();
+ }
+ /**
+ * 双击退出
+ *
+ * @param keyCode
+ * @param event
+ * @return
+ */
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ exit();
+ }
+
+ return false;
+ }
+
+ private long time = 0;
+
+ public void exit() {
+ if (System.currentTimeMillis() - time > 2000) {
+ time = System.currentTimeMillis();
+ Toast.makeText(myActivity,"再点击一次退出应用程序", Toast.LENGTH_LONG).show();
+ } else {
+ finish();
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/ManageActivity.java b/app/src/main/java/com/example/fruit/ui/activity/ManageActivity.java
new file mode 100644
index 0000000..b932331
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/ManageActivity.java
@@ -0,0 +1,131 @@
+package com.example.fruit.ui.activity;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.example.fruit.R;
+import com.example.fruit.adapter.UserAdapter;
+import com.example.fruit.bean.User;
+import com.example.fruit.util.KeyBoardUtil;
+import com.example.fruit.widget.ActionBar;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+
+import org.litepal.crud.DataSupport;
+
+import java.util.Collections;
+import java.util.List;
+
+
+/**
+ * 用户管理
+ */
+ public class ManageActivity extends AppCompatActivity {
+ private Activity myActivity;
+ private ActionBar mTitleBar;//标题栏
+ private LinearLayout llEmpty;
+ private RecyclerView rvUserList;
+ public UserAdapter mUserAdapter;
+ private FloatingActionButton btnAdd;
+ private EditText etQuery;//搜索内容
+ private ImageView ivSearch;//搜索图标
+ private List mUsers;
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_manage);
+ myActivity = this;
+ rvUserList = findViewById(R.id.rv_user_list);
+ llEmpty = findViewById(R.id.ll_empty);
+ etQuery=findViewById(R.id.et_query);
+ ivSearch=findViewById(R.id.iv_search);
+ mTitleBar = (ActionBar)findViewById(R.id.myActionBar);
+ mTitleBar.setData(myActivity,"用户管理",R.drawable.ic_back, 0, 0,getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ initView();
+ ivSearch.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ loadData();//加载数据
+ }
+ });
+ etQuery.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ return false;
+ }
+ });
+
+ }
+ private void initView() {
+ LinearLayoutManager layoutManager=new LinearLayoutManager(myActivity);
+ //=1.2、设置为垂直排列,用setOrientation方法设置(默认为垂直布局)
+ layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+ //=1.3、设置recyclerView的布局管理器
+ rvUserList.setLayoutManager(layoutManager);
+ //==2、实例化适配器
+ //=2.1、初始化适配器
+ mUserAdapter=new UserAdapter(llEmpty, rvUserList);
+ //=2.3、设置recyclerView的适配器
+ rvUserList.setAdapter(mUserAdapter);
+ loadData();
+ }
+
+ /**
+ * 加载数据
+ */
+ private void loadData(){
+ String content=etQuery.getText().toString();//获取搜索内容
+ if ("".equals(content)){
+ mUsers= DataSupport.where("account != ?","admin").find(User.class);//查询全部
+ }else {
+ mUsers=DataSupport.where("account like ?","%"+content+"%").find(User.class);//通过账号模糊查询用户
+ }
+ Collections.reverse(mUsers);
+ if (mUsers !=null && mUsers.size()>0){
+ rvUserList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ mUserAdapter.addItem(mUsers);
+ }else {
+ rvUserList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 100){
+ initView();
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ loadData();
+ }
+
+ }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/fruit/ui/activity/OpeningActivity.java b/app/src/main/java/com/example/fruit/ui/activity/OpeningActivity.java
new file mode 100644
index 0000000..8e872ca
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/OpeningActivity.java
@@ -0,0 +1,113 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.example.fruit.R;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.bean.User;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.util.StatusBarUtil;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+
+/**
+ * 开屏页面
+ */
+public class OpeningActivity extends AppCompatActivity {
+ private Activity myActivity;
+ private SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ myActivity = this;
+ //设置页面布局
+ setContentView(R.layout.activity_opening);
+ try {
+ initView();
+ } catch (IOException | JSONException e) {
+ e.printStackTrace();
+ }
+
+ }
+ private void initView() throws IOException, JSONException {
+ StatusBarUtil.setStatusBar(myActivity,true);//设置当前界面是否是全屏模式(状态栏)
+ StatusBarUtil.setStatusBarLightMode(myActivity,true);//状态栏文字颜色
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0){
+ finish();
+ return;
+ }
+ Boolean isFirst= (Boolean) SPUtils.get(myActivity,SPUtils.IF_FIRST,true);
+ String account= (String) SPUtils.get(myActivity,SPUtils.ACCOUNT,"");
+ if (isFirst){//第一次进来 初始化本地数据
+ SPUtils.put(myActivity,SPUtils.IF_FIRST,false);//第一次
+ //初始化数据
+ //获取json数据
+ String rewardJson = "";
+ String rewardJsonLine;
+ //assets文件夹下db.json文件的路径->打开db.json文件
+ BufferedReader bufferedReader = null;
+ try {
+ bufferedReader = new BufferedReader(new InputStreamReader(myActivity.getAssets().open("db.json")));
+ while (true) {
+ if (!((rewardJsonLine = bufferedReader.readLine()) != null)) break;
+ rewardJson += rewardJsonLine;
+ }
+ JSONObject jsonObject = new JSONObject(rewardJson);
+ JSONArray fruitList = jsonObject.getJSONArray("fruit");//获得列表
+ //把物品列表保存到本地
+ for (int i = 0, length = fruitList.length(); i < length; i++) {
+ JSONObject o = fruitList.getJSONObject(i);
+ Fruit fruit = new Fruit(o.getInt("typeId"),
+ o.getString("title"),
+ o.getString("img"),
+ o.getString("content"),
+ o.getString("issuer"),
+ sf.format(new Date())
+ );
+ fruit.save();//保存到本地
+ }
+ User user = new User("admin","123","管理员","1632957243","四川省内江市东兴区");
+ user.save();
+ User user1 = new User("0","0","普通人","1632957243","四川省南充市仪陇县");
+ user1.save();
+ } catch (IOException | JSONException e) {
+ e.printStackTrace();
+ }
+ }
+ //两秒后跳转到主页面
+ Intent intent2 = new Intent();
+ if ("".equals(account)) {
+ intent2.setClass(OpeningActivity.this, MainActivity.class);
+ }else {
+ intent2.setClass(OpeningActivity.this, MainActivity.class);
+ }
+ startActivity(intent2);
+ finish();
+ }
+ }, 2000);
+ }
+
+
+ @Override
+ public void onBackPressed() {
+
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/OrderActivity.java b/app/src/main/java/com/example/fruit/ui/activity/OrderActivity.java
new file mode 100644
index 0000000..f1f507d
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/OrderActivity.java
@@ -0,0 +1,131 @@
+package com.example.fruit.ui.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.example.fruit.R;
+import com.example.fruit.adapter.CarAdapter;
+import com.example.fruit.adapter.OrderAdapter;
+import com.example.fruit.bean.Orders;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class OrderActivity extends AppCompatActivity {
+ private ActionBar mTitleBar;//标题栏
+ private Activity myActivity;
+ private LinearLayout llEmpty;
+ private RecyclerView rvOrderList;
+ public OrderAdapter mOrderAdapter;
+ private Boolean mIsAdmin;
+ private EditText etQuery;//搜索内容
+ private ImageView ivSearch;//搜索图标
+ private List mOrder = new ArrayList<>();
+ private String account;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_order);
+ myActivity = this;
+ rvOrderList =findViewById(R.id.rv_order_list);
+ llEmpty =findViewById(R.id.ll_empty);
+ etQuery=findViewById(R.id.et_query);
+ ivSearch=findViewById(R.id.iv_search);
+ mTitleBar = (ActionBar) findViewById(R.id.myActionBar);
+ mTitleBar.setData(myActivity,"我的订单", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ }); initView();
+ ivSearch.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ loadData();//加载数据
+ }
+ });
+ etQuery.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ return false;
+ }
+ });
+
+ }
+ private void initView() {
+
+ mIsAdmin = (Boolean) SPUtils.get(myActivity, SPUtils.IS_ADMIN, false);
+ account = (String) SPUtils.get(myActivity, SPUtils.ACCOUNT, "");
+ LinearLayoutManager layoutManager=new LinearLayoutManager(myActivity);
+ //=1.2、设置为垂直排列,用setOrientation方法设置(默认为垂直布局)
+ layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+ //=1.3、设置recyclerView的布局管理器
+ rvOrderList.setLayoutManager(layoutManager);
+ //==2、实例化适配器
+ //=2.1、初始化适配器
+ mOrderAdapter =new OrderAdapter(llEmpty,rvOrderList);
+ //=2.3、设置recyclerView的适配器
+ rvOrderList.setAdapter(mOrderAdapter);
+ loadData();//加载数据
+
+
+
+
+ }
+ /**
+ * 加载数据
+ */
+ private void loadData(){
+ String content=etQuery.getText().toString();//获取搜索内容
+ if ("".equals(content) && !mIsAdmin){
+ mOrder = DataSupport.where("account = ? " ,account).find(Orders.class);//查询全部
+ }else {
+ mOrder =DataSupport.where("number like ? and account != ?" ,"%"+content+"%","admin").find(Orders.class);//通过标题模糊查询留言
+ }
+ Collections.reverse(mOrder);
+ if (mOrder !=null && mOrder.size()>0){
+ rvOrderList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ mOrderAdapter.addItem(mOrder);
+ }else {
+ rvOrderList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ loadData();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 100){
+ loadData();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/fruit/ui/activity/PasswordActivity.java b/app/src/main/java/com/example/fruit/ui/activity/PasswordActivity.java
new file mode 100644
index 0000000..3c3cc55
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/PasswordActivity.java
@@ -0,0 +1,82 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+
+import com.example.fruit.R;
+import com.example.fruit.bean.User;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+
+/**
+ * 重置密码
+ */
+public class PasswordActivity extends AppCompatActivity {
+ private Activity activity;
+ private ActionBar mTitleBar;//标题栏
+ private EditText etAccount;
+ private EditText etAge;
+ private EditText etNewPassword;
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ activity =this;
+ setContentView(R.layout.activity_password);
+ etAccount = findViewById(R.id.et_account);
+ etAge = findViewById(R.id.et_age);
+ etNewPassword = findViewById(R.id.et_new_password);
+ mTitleBar = (ActionBar)findViewById(R.id.myActionBar);
+ mTitleBar.setData(activity,"重置密码", R.drawable.ic_back, 0, 0,getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ }
+
+ //保存信息
+ public void save(View v){
+ //关闭虚拟键盘
+ InputMethodManager inputMethodManager= (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(),0);
+ String account = etAccount.getText().toString();
+ String age = etAge.getText().toString();
+ String newPassword = etNewPassword.getText().toString();
+ if ("".equals(account)){//账号不能为空
+ Toast.makeText(activity,"账号不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(age)){//为空
+ Toast.makeText(activity,"电话为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(newPassword)){//密码为空
+ Toast.makeText(activity,"新密码为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ User user = DataSupport.where("account = ? and age = ?", account,age).findFirst(User.class);
+ if (user != null) {
+ user.setPassword(newPassword);
+ user.save();
+ Toast.makeText(activity, "密码修改成功", Toast.LENGTH_SHORT).show();
+ finish();
+ }else{
+ Toast.makeText(activity, "账号或者电话错误", Toast.LENGTH_SHORT).show();
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/PersonActivity.java b/app/src/main/java/com/example/fruit/ui/activity/PersonActivity.java
new file mode 100644
index 0000000..bc2c8fe
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/PersonActivity.java
@@ -0,0 +1,104 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+
+import com.example.fruit.R;
+import com.example.fruit.bean.User;
+import com.example.fruit.util.SPUtils;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+
+/**
+ * 个人信息
+ */
+public class PersonActivity extends AppCompatActivity {
+ private Activity mActivity;
+ private ActionBar mTitleBar;//标题栏
+ private TextView tvAccount;
+ private TextView etNickName;
+ private TextView etAge;
+ private TextView etEmail;
+ private Button btnSave;//保存
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_person);
+ mActivity = this;
+ tvAccount = findViewById(R.id.tv_account);
+ etNickName = findViewById(R.id.tv_nickName);
+ etAge = findViewById(R.id.tv_age);
+ etEmail = findViewById(R.id.tv_email);
+ btnSave = findViewById(R.id.btn_save);
+ mTitleBar = (ActionBar) findViewById(R.id.myActionBar);
+ mTitleBar.setData(mActivity,"个人信息", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ initView();
+ }
+
+ private void initView() {
+ String account = (String) SPUtils.get(mActivity,"account","");
+ User user = DataSupport.where("account = ?", account).findFirst(User.class);
+ if (user != null) {
+ tvAccount.setText(user.getAccount());
+ etNickName.setText(user.getNickName());
+ etAge.setText(String.valueOf(user.getAge()));
+ etEmail.setText(user.getEmail());
+ }
+ //保存
+ btnSave.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String account = tvAccount.getText().toString();
+ String nickName = etNickName.getText().toString();
+ String age = etAge.getText().toString();
+ String email = etEmail.getText().toString();
+ User user1 = DataSupport.where("account = ?",account).findFirst(User.class);
+ if ("".equals(nickName)) {
+ Toast.makeText(mActivity,"昵称不能为空", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if ("".equals(age)) {
+ Toast.makeText(mActivity,"电话不能为空", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if ("".equals(email)) {
+ Toast.makeText(mActivity,"收货地址不能为空", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ user1.setNickName(nickName);
+ user1.setAge(String.valueOf(age));
+ user1.setEmail(email);
+ user1.save();
+ Toast.makeText(mActivity,"保存成功", Toast.LENGTH_SHORT).show();
+ finish();//关闭页面
+ }
+ });
+ /* btnLogout.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ MyApplication.Instance.getMainActivity().finish();
+ SPUtils.remove(mActivity,"account");
+ startActivity(new Intent(mActivity, LoginActivity.class));
+ }
+ });*/
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/RegisterActivity.java b/app/src/main/java/com/example/fruit/ui/activity/RegisterActivity.java
new file mode 100644
index 0000000..f924c58
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/RegisterActivity.java
@@ -0,0 +1,126 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+
+
+import com.example.fruit.R;
+import com.example.fruit.bean.User;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+import java.text.SimpleDateFormat;
+
+
+/**
+ * 注册页面
+ */
+public class RegisterActivity extends Activity {
+ private Activity activity;
+ private ActionBar mTitleBar;//标题栏
+ private EditText etAccount;//手机号
+ private EditText etNickName;//昵称
+ private EditText etAge;//
+ private EditText etEmail;//邮箱
+ private EditText etPassword;//密码
+ private EditText etPasswordSure;//确认密码
+
+ private Button btnRegister;//注册按钮
+ private SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ activity=this;
+ setContentView(R.layout.activity_register);//加载页面
+ etAccount =(EditText) findViewById(R.id.et_account);//获取手机号
+ etNickName =(EditText) findViewById(R.id.et_nickName);//获取昵称
+ etAge =(EditText) findViewById(R.id.et_age);//获取年龄
+ etEmail =(EditText) findViewById(R.id.et_email);//获取邮箱
+ etPassword=(EditText) findViewById(R.id.et_password);//获取密码
+ etPasswordSure=(EditText) findViewById(R.id.et_password_sure);//获取确认密码
+
+ btnRegister=(Button) findViewById(R.id.btn_register);//获取注册按钮
+ mTitleBar = (ActionBar) findViewById(R.id.myActionBar);
+ mTitleBar.setData(activity,"注册", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ /* tvLogin.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //跳转到登录页面
+ Intent intent=new Intent(activity, LoginActivity.class);
+ startActivity(intent);
+ finish();
+ }
+ });**/
+ //设置注册点击按钮
+ btnRegister.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //关闭虚拟键盘
+ InputMethodManager inputMethodManager= (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(),0);
+ String account= etAccount.getText().toString();
+ String nickName= etNickName.getText().toString();
+ String age = etAge.getText().toString();
+ String email= etEmail.getText().toString();
+ String password=etPassword.getText().toString();
+ String passwordSure=etPasswordSure.getText().toString();
+ if ("".equals(account)){//账号不能为空
+ Toast.makeText(activity,"账号不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(nickName)){//昵称不能为空
+ Toast.makeText(activity,"昵称不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(age)){//年龄不能为空
+ Toast.makeText(activity,"电话不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(email)){//邮箱不能为空
+ Toast.makeText(activity,"收货地址不能为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if ("".equals(password)){//密码为空
+ Toast.makeText(activity,"密码为空", Toast.LENGTH_LONG).show();
+ return;
+ }
+ if (!password.equals(passwordSure)){//密码不一致
+ Toast.makeText(activity,"密码不一致", Toast.LENGTH_LONG).show();
+ return;
+ }
+ User user = DataSupport.where("account = ?", account).findFirst(User.class);
+ if (user == null) {
+ user = new User (account,password,nickName, String.valueOf(age),email);
+ user.save();//保存用户信息
+ Intent intent = new Intent(activity, LoginActivity.class);
+ startActivity(intent);
+ Toast.makeText(activity, "注册成功", Toast.LENGTH_SHORT).show();
+ finish();
+ }else {
+ Toast.makeText(activity, "该账号已存在", Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/UserDetailActivity.java b/app/src/main/java/com/example/fruit/ui/activity/UserDetailActivity.java
new file mode 100644
index 0000000..eaf40c4
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/UserDetailActivity.java
@@ -0,0 +1,92 @@
+package com.example.fruit.ui.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.example.fruit.R;
+import com.example.fruit.bean.User;
+import com.example.fruit.widget.ActionBar;
+
+import org.litepal.crud.DataSupport;
+
+
+/**
+ * 用户明细
+ */
+public class UserDetailActivity extends AppCompatActivity {
+ private ActionBar mActionBar;//标题栏
+ private Activity mActivity;
+ private TextView account;
+ private EditText nickName;
+ private EditText age;
+ private EditText email;
+ private User mUser;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_detail);
+ mActivity = this;
+ account = findViewById(R.id.account);
+ nickName = findViewById(R.id.nickName);
+ age = findViewById(R.id.age);
+ email = findViewById(R.id.email);
+ mActionBar = findViewById(R.id.myActionBar);
+ //侧滑菜单
+ mActionBar.setData(mActivity,"用户信息", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {
+ @Override
+ public void onLeftClick() {
+ finish();
+ }
+
+ @Override
+ public void onRightClick() {
+ }
+ });
+ mUser = (User) getIntent().getSerializableExtra("user");
+ if (mUser != null) {
+ account.setText(mUser.getAccount());
+ nickName.setText(mUser.getNickName());
+ age.setText(String.valueOf(mUser.getAge()));
+ email.setText(mUser.getEmail());
+ }
+ }
+
+ //保存
+ public void save(View view){
+ User user = DataSupport.where("account = ?",mUser.getAccount()).findFirst(User.class);
+ String nickNameStr = nickName.getText().toString();
+ String ageStr = age.getText().toString();
+ String emailStr = email.getText().toString();
+ if ("".equals(nickNameStr)) {
+ Toast.makeText(mActivity,"昵称不能为空", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if ("".equals(ageStr)) {
+ Toast.makeText(mActivity,"电话不能为空", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if ("".equals(emailStr)) {
+ Toast.makeText(mActivity,"地址不能为空", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if (user != null) {
+ user.setNickName(nickNameStr);
+ user.setAge(String.valueOf(ageStr));
+ user.setEmail(emailStr);
+ user.save();
+ Toast.makeText(mActivity,"保存成功", Toast.LENGTH_SHORT).show();
+ finish();
+ }else {
+ Toast.makeText(mActivity,"保存失败", Toast.LENGTH_SHORT).show();
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/activity/WxActivity.java b/app/src/main/java/com/example/fruit/ui/activity/WxActivity.java
new file mode 100644
index 0000000..88fb2d5
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/activity/WxActivity.java
@@ -0,0 +1,21 @@
+package com.example.fruit.ui.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.os.Bundle;
+import android.widget.ImageView;
+
+import com.example.fruit.R;
+
+public class WxActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_wx);
+
+
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/fruit/ui/fragment/CarFragment.java b/app/src/main/java/com/example/fruit/ui/fragment/CarFragment.java
new file mode 100644
index 0000000..1b4cbd0
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/fragment/CarFragment.java
@@ -0,0 +1,107 @@
+package com.example.fruit.ui.fragment;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.fruit.R;
+import com.example.fruit.adapter.CarAdapter;
+import com.example.fruit.bean.Car;
+import com.example.fruit.ui.activity.JsActivity;
+import com.example.fruit.util.SPUtils;
+
+import org.litepal.crud.DataSupport;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 订单
+ */
+public class CarFragment extends Fragment {
+ private Activity myActivity;
+ private LinearLayout llEmpty;
+ private RecyclerView rvOrderList;
+ public CarAdapter mCarAdapter;
+ private Boolean mIsAdmin;
+ private boolean iscbAll = false;
+ private List mCar = new ArrayList<>();
+ private String account;
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ myActivity = (Activity) context;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view=inflater.inflate(R.layout.fragment_car,container,false);
+ rvOrderList = view.findViewById(R.id.rv_order_list);
+ llEmpty = view.findViewById(R.id.ll_empty);
+ //获取控件
+ initView();
+ return view;
+ }
+
+ private void initView() {
+
+ mIsAdmin = (Boolean) SPUtils.get(myActivity, SPUtils.IS_ADMIN, false);
+ account = (String) SPUtils.get(myActivity, SPUtils.ACCOUNT, "");
+ LinearLayoutManager layoutManager=new LinearLayoutManager(myActivity);
+ //=1.2、设置为垂直排列,用setOrientation方法设置(默认为垂直布局)
+ layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+ //=1.3、设置recyclerView的布局管理器
+ rvOrderList.setLayoutManager(layoutManager);
+ //==2、实例化适配器
+ //=2.1、初始化适配器
+ mCarAdapter =new CarAdapter(llEmpty,rvOrderList);
+ //=2.3、设置recyclerView的适配器
+ rvOrderList.setAdapter(mCarAdapter);
+ loadData();//加载数据
+ }
+
+ /**
+ * 加载数据
+ */
+ private void loadData(){
+ mCar = DataSupport.where("account = ? " ,account).find(Car.class);//查询全部
+ Collections.reverse(mCar);
+ if (mCar !=null && mCar.size()>0){
+ rvOrderList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ mCarAdapter.addItem(mCar);
+ }else {
+ rvOrderList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ loadData();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 100){
+ loadData();
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/fruit/ui/fragment/FruitFragment.java b/app/src/main/java/com/example/fruit/ui/fragment/FruitFragment.java
new file mode 100644
index 0000000..e8d3f83
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/fragment/FruitFragment.java
@@ -0,0 +1,197 @@
+package com.example.fruit.ui.fragment;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.fruit.MyApplication;
+import com.example.fruit.R;
+import com.example.fruit.adapter.FruitAdapter;
+import com.example.fruit.bean.Fruit;
+import com.example.fruit.ui.activity.AddFruitActivity;
+import com.example.fruit.ui.activity.LoginActivity;
+import com.example.fruit.ui.activity.FruitDetailActivity;
+import com.example.fruit.util.KeyBoardUtil;
+import com.example.fruit.util.SPUtils;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+import com.google.android.material.tabs.TabLayout;
+
+import org.litepal.crud.DataSupport;
+
+import java.util.List;
+
+import static android.app.Activity.RESULT_OK;
+
+
+/**
+ * 水果
+ */
+
+public class FruitFragment extends Fragment {
+ private Activity myActivity;//上下文
+ private TabLayout tabTitle;
+ private RecyclerView rvfruitList;
+ private FruitAdapter mfruitAdapter;
+ private LinearLayout llEmpty;
+ private Boolean mIsAdmin;
+ private EditText etQuery;//搜索内容
+ private ImageView ivSearch;//搜索图标
+ private FloatingActionButton btnAdd;
+ private String[] state = {"0","1","2","3","4","5"};
+ private String[] title = {"果类", "柑类","桃类" ,"瓜类","蕉类","葡萄类"};
+ private String typeId = "0";
+ private List mfruit;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ myActivity= (Activity) context;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view=inflater.inflate(R.layout.fragment_fruit,container,false);
+ tabTitle = (TabLayout)view.findViewById(R.id.tab_title);
+ rvfruitList = (RecyclerView)view.findViewById(R.id.rv_fruit_list);
+ llEmpty = view.findViewById(R.id.ll_empty);
+ etQuery=view.findViewById(R.id.et_query);
+ ivSearch=view.findViewById(R.id.iv_search);
+ btnAdd = (FloatingActionButton)view.findViewById(R.id.btn_add);
+ //获取控件
+ initView();
+ //软键盘搜索
+ ivSearch.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ loadData();//加载数据
+ }
+ });
+ //点击软键盘中的搜索
+ etQuery.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ KeyBoardUtil.hideKeyboard(v);//隐藏软键盘
+ loadData();//加载数据
+ return true;
+ }
+ return false;
+ }
+ });
+ btnAdd.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(myActivity, AddFruitActivity.class);
+ startActivityForResult(intent,100);
+ }
+ });
+ return view;
+ }
+
+ /**
+ * 初始化页面
+ */
+ private void initView() {
+ mIsAdmin = (Boolean) SPUtils.get(myActivity, SPUtils.IS_ADMIN, false);
+ btnAdd.setVisibility(mIsAdmin? View.VISIBLE: View.GONE);
+ tabTitle.setTabMode(TabLayout.MODE_SCROLLABLE);
+ //设置tablayout距离上下左右的距离
+ // tabTitle.setPadding(20,20,20,20);
+
+ //为TabLayout添加tab名称
+ for (int i=0;i0){
+ rvfruitList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ mfruitAdapter.addItem(mfruit);
+ }else {
+ rvfruitList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+ @Override
+ public void onResume() {
+ super.onResume();
+ loadData();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 100 && resultCode == RESULT_OK){
+ loadData();//加载数据
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/ui/fragment/OrderFragment.java b/app/src/main/java/com/example/fruit/ui/fragment/OrderFragment.java
new file mode 100644
index 0000000..680109a
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/fragment/OrderFragment.java
@@ -0,0 +1,152 @@
+package com.example.fruit.ui.fragment;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.fruit.R;
+import com.example.fruit.adapter.OrderAdapter;
+import com.example.fruit.bean.Orders;
+import com.example.fruit.ui.activity.JsActivity;
+import com.example.fruit.util.KeyBoardUtil;
+import com.example.fruit.util.SPUtils;
+
+import org.litepal.crud.DataSupport;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 订单
+ */
+public class OrderFragment extends Fragment {
+ private Activity myActivity;
+ private LinearLayout llEmpty;
+ // private ImageView js;
+
+
+ private RecyclerView rvOrderList;
+ public OrderAdapter mOrderAdapter;
+ private Boolean mIsAdmin;
+ private EditText etQuery;//搜索内容
+ private ImageView ivSearch;//搜索图标
+ private List mOrder = new ArrayList<>();
+ private String account;
+
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ myActivity = (Activity) context;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view=inflater.inflate(R.layout.fragment_order,container,false);
+ rvOrderList = view.findViewById(R.id.rv_order_list);
+ llEmpty = view.findViewById(R.id.ll_empty);
+ // js=view.findViewById(R.id.js);
+
+
+ etQuery=view.findViewById(R.id.et_query);
+ ivSearch=view.findViewById(R.id.iv_search);
+
+ //获取控件
+ initView();
+ //软键盘搜索
+ ivSearch.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ loadData();//加载数据
+ }
+ });
+ //点击软键盘中的搜索
+ etQuery.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ KeyBoardUtil.hideKeyboard(v);//隐藏软键盘
+ loadData();//加载数据
+ return true;
+ }
+ return false;
+ }
+ });
+ return view;
+ }
+
+ private void initView() {
+
+ mIsAdmin = (Boolean) SPUtils.get(myActivity, SPUtils.IS_ADMIN, false);
+ account = (String) SPUtils.get(myActivity, SPUtils.ACCOUNT, "");
+ LinearLayoutManager layoutManager=new LinearLayoutManager(myActivity);
+ //=1.2、设置为垂直排列,用setOrientation方法设置(默认为垂直布局)
+ layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+ //=1.3、设置recyclerView的布局管理器
+ rvOrderList.setLayoutManager(layoutManager);
+ //==2、实例化适配器
+ //=2.1、初始化适配器
+ mOrderAdapter =new OrderAdapter(llEmpty,rvOrderList);
+ //=2.3、设置recyclerView的适配器
+ rvOrderList.setAdapter(mOrderAdapter);
+ loadData();//加载数据
+
+
+
+
+ }
+
+ /**
+ * 加载数据
+ */
+ private void loadData(){
+ String content=etQuery.getText().toString();//获取搜索内容
+ if ("".equals(content) && !mIsAdmin){
+ mOrder = DataSupport.where("account = ? " ,account).find(Orders.class);//查询全部
+ }else {
+ mOrder =DataSupport.where("number like ? and account != ?" ,"%"+content+"%","admin").find(Orders.class);//通过标题模糊查询留言
+ }
+ Collections.reverse(mOrder);
+ if (mOrder !=null && mOrder.size()>0){
+ rvOrderList.setVisibility(View.VISIBLE);
+ llEmpty.setVisibility(View.GONE);
+ mOrderAdapter.addItem(mOrder);
+ }else {
+ rvOrderList.setVisibility(View.GONE);
+ llEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ loadData();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 100){
+ loadData();
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/fruit/ui/fragment/UserFragment.java b/app/src/main/java/com/example/fruit/ui/fragment/UserFragment.java
new file mode 100644
index 0000000..e5af643
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/ui/fragment/UserFragment.java
@@ -0,0 +1,134 @@
+package com.example.fruit.ui.fragment;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.LinearLayout;
+
+import com.example.fruit.bean.Browse;
+import com.example.fruit.ui.activity.BrowseActivity;
+import com.example.fruit.ui.activity.ManageActivity;
+import com.example.fruit.MyApplication;
+import com.example.fruit.ui.activity.OrderActivity;
+import com.example.fruit.R;
+import com.example.fruit.ui.activity.LoginActivity;
+import com.example.fruit.ui.activity.PasswordActivity;
+import com.example.fruit.ui.activity.PersonActivity;
+import com.example.fruit.util.SPUtils;
+
+/**
+ * 个人中心
+ */
+public class UserFragment extends Fragment {
+ private Activity mActivity;
+ private LinearLayout llPerson;
+ private LinearLayout llSecurity;
+
+ private LinearLayout llFavorite;
+ private LinearLayout llBrowse;
+ private LinearLayout order;
+ private LinearLayout manage;
+ private Button btnLogout;
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mActivity = (Activity) context;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.fragment_user,container,false);
+ llPerson = view.findViewById(R.id.person);
+ llSecurity = view.findViewById(R.id.security);
+ llBrowse = view.findViewById(R.id.browse);
+ order = view.findViewById(R.id.order);
+ manage = view.findViewById(R.id.manage);
+ btnLogout = view.findViewById(R.id.logout);
+ llFavorite = view.findViewById(R.id.favorite);
+ initView();
+ return view;
+ }
+
+ private void initView() {
+ Boolean isAdmin = (Boolean) SPUtils.get(mActivity,SPUtils.IS_ADMIN,false);
+
+ llFavorite.setVisibility(isAdmin?View.GONE:View.VISIBLE);
+ order.setVisibility(isAdmin?View.GONE:View.VISIBLE);
+ llBrowse.setVisibility(isAdmin?View.GONE:View.VISIBLE);
+ manage.setVisibility(isAdmin?View.VISIBLE:View.GONE);
+ //个人信息
+ llPerson.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //跳转页面
+ Intent intent = new Intent(mActivity, PersonActivity.class);
+ startActivity(intent);
+ }
+ });
+ //用户管理
+ manage.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //跳转页面
+ Intent intent = new Intent(mActivity, ManageActivity.class);
+ startActivity(intent);
+ }
+ });
+ //账号安全
+ llSecurity.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //跳转页面
+ Intent intent = new Intent(mActivity, PasswordActivity.class);
+ startActivity(intent);
+ }
+ });
+ //浏览记录
+ llBrowse.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //跳转页面
+ Intent intent = new Intent(mActivity, BrowseActivity.class);
+ startActivity(intent);
+ }
+ });
+
+ //我的订单
+ order.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //跳转页面
+ Intent intent = new Intent(mActivity, OrderActivity.class);
+ startActivity(intent);
+ }
+ });
+ //联系客服
+ llFavorite.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //跳转页面
+ //跳转到我的资料卡
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("mqqapi://card/show_pslcard?src_type=internal&source=sharecard&version=1&uin=1632957243")));//跳转到QQ资料
+ //startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("mqqapi://card/show_pslcard?src_type=internal&version=1&card_type=group&source=qrcode&uin=485761716")));//跳转到QQ群
+ //startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("mqqwpa://im/chat?chat_type=wpa&version=1&uin=1632957243")));//跳转到临时会话
+ }
+ });
+ //退出登录
+ btnLogout.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ MyApplication.Instance.getMainActivity().finish();
+ SPUtils.remove(mActivity,SPUtils.IS_ADMIN);
+ SPUtils.remove(mActivity,SPUtils.ACCOUNT);
+ startActivity(new Intent(mActivity, LoginActivity.class));
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/util/KeyBoardUtil.java b/app/src/main/java/com/example/fruit/util/KeyBoardUtil.java
new file mode 100644
index 0000000..d4f85a9
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/util/KeyBoardUtil.java
@@ -0,0 +1,33 @@
+package com.example.fruit.util;
+
+import android.content.Context;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+
+
+/**
+ * 虚拟键盘操作
+ */
+public class KeyBoardUtil {
+ /**
+ * 打开键盘
+ * @param view
+ */
+ public static void showKeyboard(View view){
+ InputMethodManager imm= (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm!=null){
+ view.requestFocus();
+ imm.showSoftInput(view,0);
+ }
+ }
+ /**
+ * 关闭键盘
+ * @param view
+ */
+ public static void hideKeyboard(View view){
+ InputMethodManager imm= (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm!=null){
+ imm.hideSoftInputFromWindow(view.getWindowToken(),0);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/fruit/util/OkHttpTool.java b/app/src/main/java/com/example/fruit/util/OkHttpTool.java
new file mode 100644
index 0000000..9c75f98
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/util/OkHttpTool.java
@@ -0,0 +1,364 @@
+package com.example.fruit.util;
+
+import android.graphics.Bitmap;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import com.zhy.http.okhttp.OkHttpUtils;
+import com.zhy.http.okhttp.callback.BitmapCallback;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.Cookie;
+import okhttp3.CookieJar;
+import okhttp3.FormBody;
+import okhttp3.HttpUrl;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+import okhttp3.ResponseBody;
+import okhttp3.logging.HttpLoggingInterceptor;
+
+/**
+ * 便于使用okhttp3的工具类
+ */
+public class OkHttpTool {
+ //日志标志
+ private static String TAG = "OkHttpTool";
+ //OkHttpClient类
+ private static final OkHttpClient myOkHttpClient;
+
+ static {
+ //========日志拦截器=========
+ //Log拦截器
+ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
+ @Override
+ public void log(@NonNull String message) {
+ Log.i(TAG, message);
+ }
+ });
+ //设置日志显示级别
+ HttpLoggingInterceptor.Level level = HttpLoggingInterceptor.Level.BODY;
+ loggingInterceptor.setLevel(level);
+
+ //========cookie处理--让服务端记住app
+ //这里是设置cookie的,但是并没有做持久化处理;只是把cookie保存在内存中
+ CookieJar cookieJar=new CookieJar() {
+ private final HashMap> cookieStore = new HashMap<>();
+ //保存cookie
+ @Override
+ public void saveFromResponse(@NonNull HttpUrl url, @NonNull List cookies) {
+ cookieStore.put(url.host(), cookies);
+ }
+ //获取cookie
+ @Override
+ public List loadForRequest(@NonNull HttpUrl url) {
+ List cookies = cookieStore.get(url.host());
+ return cookies != null ? cookies : new ArrayList();
+ }
+ };
+
+ //创建OkHttpClient
+ myOkHttpClient = new OkHttpClient.Builder()
+ .connectTimeout(10, TimeUnit.SECONDS)//连接超时
+ .writeTimeout(20, TimeUnit.SECONDS)//写入超时
+ .readTimeout(20, TimeUnit.SECONDS)//读取超时
+ .addInterceptor(loggingInterceptor)//添加日志处理拦截器
+ .cookieJar(cookieJar)
+ .build();
+ }
+
+ //================对外方法=====================
+
+ /**
+ * Get 请求
+ * @param url{String} 请求地址
+ * @param parameters{Map} 请求参数
+ * @param responseCallback{ResponseCallback} 请求回调
+ */
+ @SuppressWarnings("unused")
+ public static void httpGet(String url, Map parameters, ResponseCallback responseCallback) {
+ Request request = createGetRequest(url, parameters);
+ doRequest(request, responseCallback);
+ }
+
+ /**
+ * POST 请求
+ * @param url{String} 请求地址
+ * @param parameters{Map} 请求参数
+ * @param responseCallback{ResponseCallback} 请求回调
+ */
+ public static void httpPost(String url, Map parameters, ResponseCallback responseCallback) {
+ Request request = createPostRequest(url, parameters);
+ doRequest(request, responseCallback);
+ }
+
+ /**
+ * POST 请求 JSON格式参数
+ * @param url{String} 请求地址
+ * @param json{String} JSON格式参数
+ * @param responseCallback{ResponseCallback} 请求回调
+ */
+ @SuppressWarnings("unused")
+ public static void httpPostJson(String url, String json, ResponseCallback responseCallback) {
+ Request request = createPostRequestJson(url, json);
+ doRequest(request, responseCallback);
+ }
+
+ /**
+ * POST 请求 文件上传
+ * @param url{String} 请求地址
+ * @param parameters{Map} 请求参数
+ * @param files{Map} 上传的文件列表
+ * @param responseCallback{ResponseCallback} 请求回调
+ */
+ @SuppressWarnings("unused")
+ public static void httpPostWithFile(String url, Map parameters, Map files, ResponseCallback responseCallback) {
+ Request request = createPostRequestWithFile(url, parameters, files);
+ doRequest(request, responseCallback);
+ }
+
+ /**
+ * POST 请求 文件上传 byte数组
+ * @param url{String} 请求地址
+ * @param parameters{Map} 请求参数
+ * @param files{Map}上传的文件列表
+ * @param responseCallback{ResponseCallback} 请求回调
+ */
+ @SuppressWarnings("unused")
+ public static void httpPostWithFileByte(String url, Map parameters, Map files, ResponseCallback responseCallback) {
+ Request request = createPostRequestWithFileByte(url, parameters, files);
+ doRequest(request, responseCallback);
+ }
+
+ /**
+ * 获取图片 返回
+ * @param url
+ * @return Bitmap
+ */
+ public void getImage(String url)
+ {
+ Bitmap response;
+ OkHttpUtils
+ .get()//
+ .url(url)//
+ .tag(this)//
+ .build()//
+ .connTimeOut(20000)//链接超时
+ .readTimeOut(20000)//读取超时
+ .writeTimeOut(20000)//写入超时
+ .execute(new BitmapCallback()
+ {
+
+ @Override
+ public void onError(com.squareup.okhttp.Request request, Exception e) {
+
+ }
+
+ @Override
+ public void onResponse(Bitmap response) {
+ }
+ });
+ }
+ //=====回调接口======
+ public interface ResponseCallback {
+ void onResponse(boolean isSuccess, int responseCode, String response, Exception exception);
+ }
+
+
+ //===========私有方法===============
+ //====构建请求====
+
+ //构建 Get请求
+ private static Request createGetRequest(String url, Map parameters) {
+ StringBuilder urlBuilder = new StringBuilder();
+ urlBuilder.append(url);
+ if (url.indexOf('?') <= -1) {
+ //未拼接参数
+ urlBuilder.append("?");
+ }
+
+ for (Map.Entry entry : parameters.entrySet()) {
+ urlBuilder.append("&");
+ urlBuilder.append(entry.getKey());
+ urlBuilder.append("=");
+ urlBuilder.append(entry.getValue().toString());
+ }
+ return getBaseRequest().url(urlBuilder.toString()).build();
+ }
+
+ //构建 POST 请求
+ private static Request createPostRequest(String url, Map parameters) {
+ @SuppressWarnings("all")
+ FormBody.Builder builder = new FormBody.Builder(Charset.forName("UTF-8"));
+ if (parameters != null) {
+ for (Map.Entry entry : parameters.entrySet()) {
+ builder.add(entry.getKey(), entry.getValue().toString());
+ }
+ }
+ FormBody formBody = builder.build();
+ return getBaseRequest().url(url).post(formBody).build();
+ }
+
+ //构建 POST JSON格式参数请求
+ private static Request createPostRequestJson(String url, String json) {
+ MediaType mediaType = MediaType.parse("application/json;charset=utf-8");
+ RequestBody body = RequestBody.create(json,mediaType);
+ return getBaseRequest().url(url).post(body).build();
+ }
+
+ //构建 POST带文件的 请求
+ private static Request createPostRequestWithFile(String url, Map parameters, Map files) {
+ // form 表单形式上传
+ MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
+ if (files != null) {
+ for (Map.Entry fileEntry : files.entrySet()) {
+ File file = fileEntry.getValue();
+ if (file != null) {
+ // MediaType.parse() 里面是上传的文件类型。
+ RequestBody body = RequestBody.create(file,MediaType.parse("application/octet-stream"));
+ String filename = file.getName();
+ // 参数分别为, 请求key ,文件名称 , RequestBody
+ requestBody.addFormDataPart(fileEntry.getKey(), filename, body);
+ }
+ }
+ }
+ if (parameters != null) {
+ // map 里面是请求中所需要的 key 和 value
+ for (Map.Entry entry : parameters.entrySet()) {
+ String key = entry.getKey();
+ String value = entry.getValue().toString();
+ requestBody.addFormDataPart(key, value);
+ }
+ }
+ return getBaseRequest().url(url).post(requestBody.build()).build();
+ }
+
+ //构建 POST带文件的 请求
+ private static Request createPostRequestWithFileByte(String url, Map parameters, Map files) {
+ // form 表单形式上传
+ MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
+ if (files != null) {
+ for (Map.Entry fileEntry : files.entrySet()) {
+ byte[] file = fileEntry.getValue();
+ if (file != null) {
+ // MediaType.parse() 里面是上传的文件类型。
+ RequestBody body = RequestBody.create(file,MediaType.parse("application/octet-stream"));
+ // 参数分别为, 请求key ,文件名称 , RequestBody
+ requestBody.addFormDataPart(fileEntry.getKey(), fileEntry.getKey(), body);
+ }
+ }
+ }
+ if (parameters != null) {
+ // map 里面是请求中所需要的 key 和 value
+ for (Map.Entry entry : parameters.entrySet()) {
+ String key = entry.getKey();
+ String value = entry.getValue().toString();
+ requestBody.addFormDataPart(key, value);
+ }
+ }
+ return getBaseRequest().url(url).post(requestBody.build()).build();
+ }
+
+ //===实际进行请求的方法
+ private static void doRequest(final Request request, final ResponseCallback responseCallback) {
+ //使用okhttp3的异步请求
+ myOkHttpClient.newCall(request).enqueue(new Callback() {
+ //失败回调
+ @Override
+ public void onFailure(@NonNull Call call, @NonNull IOException e) {
+ //回调
+ responseCallback.onResponse(false, -1, null, e);
+ //用于输出错误调试信息
+ if (e.getMessage()!=null){
+ Log.e(TAG, e.getMessage());
+ }
+ }
+ //成功回调
+ @Override
+ public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
+ int responseCode = response.code();//获取响应码
+ ResponseBody responseBody = response.body();//获取 ResponseBody
+ if (response.isSuccessful() && responseBody != null) {
+ String strResponse = responseBody.string();
+ //回调
+ responseCallback.onResponse(true, responseCode, strResponse, null);
+ } else {
+ //回调
+ responseCallback.onResponse(false, responseCode, null, null);
+ }
+ }
+ });
+ }
+
+ //获取请求 指定client为Android
+ private static Request.Builder getBaseRequest() {
+ Request.Builder builder = new Request.Builder();
+ builder.addHeader("client", "Android");
+ return builder;
+ }
+}
+
+
+//.addInterceptor(new Interceptor() {
+// @Override
+// public Response intercept(@NonNull Chain chain) throws IOException {
+// Request request = chain.request().newBuilder()
+// .addHeader("Connection", "close").build();
+// return chain.proceed(request);
+// }
+//})
+
+
+/*以前自己写的日志拦截器*/
+//添加日志处理拦截器
+//.addInterceptor(new Interceptor() {
+// @Override
+// public Response intercept(@NonNull Chain chain) throws IOException {
+// Request request = chain.request();
+// long startTime = System.currentTimeMillis();
+// Response response = chain.proceed(chain.request());
+// long endTime = System.currentTimeMillis();
+// long duration = endTime - startTime;
+// MediaType mediaType = response.body().contentType();
+// String content = response.body().string();
+// Log.d(TAG, "\n");
+// Log.d(TAG, "----------Start----------------");
+// Log.d(TAG, "| " + request.toString());
+// String method = request.method();
+// if ("POST".equals(method)) {
+// StringBuilder sb = new StringBuilder();
+// if (request.body() instanceof FormBody) {
+// FormBody body = (FormBody) request.body();
+// for (int i = 0; i < body.size(); i++) {
+// sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ",");
+// }
+// if (sb.length() > 0) {
+// //在参数不为空的情况下处理最后的 “,”
+// sb.delete(sb.length() - 1, sb.length());
+// }
+// Log.d(TAG, "| RequestParams:{" + sb.toString() + "}");
+// }
+// }
+// Log.d(TAG, "| Response:" + content);
+// Log.d(TAG, "----------End:" + duration + "毫秒----------");
+// //由于前面的代码已经获取了响应结果,会导致后续代码无法获取到响应结果
+// // 需要重新构建一个响应结果并返回
+// return response.newBuilder()
+// .body(ResponseBody.create(mediaType, content))
+// .build();
+// }
+//})
\ No newline at end of file
diff --git a/app/src/main/java/com/example/fruit/util/SPUtils.java b/app/src/main/java/com/example/fruit/util/SPUtils.java
new file mode 100644
index 0000000..6a3cb71
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/util/SPUtils.java
@@ -0,0 +1,176 @@
+package com.example.fruit.util;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * 数据持久化工具类
+ */
+public class SPUtils {
+ public static final String IF_FIRST = "is_first";//是否第一次进来
+ public static final String IS_ADMIN = "is_admin";//是否是管理员
+ public static final String ACCOUNT = "account";//账号
+ /**
+ * 保存在手机里面的文件名
+ */
+ private static final String FILE_NAME = "share_data";
+ /**
+ * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
+ *
+ * @param context 上下文
+ * @param key key值
+ * @param object value值
+ */
+ public static void put(Context context, String key, Object object) {
+
+ SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+ Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+
+ if (object instanceof String) {
+ editor.putString(key, (String) object);
+ } else if (object instanceof Integer) {
+ editor.putInt(key, (Integer) object);
+ } else if (object instanceof Boolean) {
+ editor.putBoolean(key, (Boolean) object);
+ } else if (object instanceof Float) {
+ editor.putFloat(key, (Float) object);
+ } else if (object instanceof Long) {
+ editor.putLong(key, (Long) object);
+ } else {
+ editor.putString(key, object.toString());
+ }
+
+ SharedPreferencesCompat.apply(editor);
+ }
+
+ /**
+ * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
+ *
+ * @param context 上下文
+ * @param key key值
+ * @param defaultObject 默认value值
+ * @return value值
+ */
+ public static Object get(Context context, String key, Object defaultObject) {
+ SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+ Context.MODE_PRIVATE);
+
+ if (defaultObject instanceof String) {
+ return sp.getString(key, (String) defaultObject);
+ } else if (defaultObject instanceof Integer) {
+ return sp.getInt(key, (Integer) defaultObject);
+ } else if (defaultObject instanceof Boolean) {
+ return sp.getBoolean(key, (Boolean) defaultObject);
+ } else if (defaultObject instanceof Float) {
+ return sp.getFloat(key, (Float) defaultObject);
+ } else if (defaultObject instanceof Long) {
+ return sp.getLong(key, (Long) defaultObject);
+ }
+
+ return null;
+ }
+
+ /**
+ * 移除某个key值已经对应的值
+ *
+ * @param context 上下文
+ * @param key key值
+ */
+ public static void remove(Context context, String key) {
+ SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+ Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.remove(key);
+ SharedPreferencesCompat.apply(editor);
+ }
+
+ /**
+ * 清除所有数据
+ *
+ * @param context 上下文
+ */
+ public static void clear(Context context) {
+ SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+ Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.clear();
+ SharedPreferencesCompat.apply(editor);
+ }
+
+ /**
+ * 查询某个key是否已经存在
+ *
+ * @param context 上下文
+ * @param key key值
+ * @return 是否存在
+ */
+ public static boolean contains(Context context, String key) {
+ SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+ Context.MODE_PRIVATE);
+ return sp.contains(key);
+ }
+
+ /**
+ * 返回所有的键值对
+ *
+ * @param context 上下文
+ * @return 所有的键值对
+ */
+ public static Map getAll(Context context) {
+ SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
+ Context.MODE_PRIVATE);
+ return sp.getAll();
+ }
+
+ /**
+ * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类
+ *
+ * @author zhy
+ */
+ private static class SharedPreferencesCompat {
+ private static final Method sApplyMethod = findApplyMethod();
+
+ /**
+ * 反射查找apply的方法
+ *
+ * @return Method
+ */
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static Method findApplyMethod() {
+ try {
+ Class clz = SharedPreferences.Editor.class;
+ return clz.getMethod("apply");
+ } catch (NoSuchMethodException e) {
+ }
+
+ return null;
+ }
+
+ /**
+ * 如果找到则使用apply执行,否则使用commit
+ *
+ * @param editor SharedPreferences.Edito
+ */
+ public static void apply(SharedPreferences.Editor editor) {
+ try {
+ if (sApplyMethod != null) {
+ sApplyMethod.invoke(editor);
+ return;
+ }
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ editor.commit();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/fruit/util/StatusBarUtil.java b/app/src/main/java/com/example/fruit/util/StatusBarUtil.java
new file mode 100644
index 0000000..ab97664
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/util/StatusBarUtil.java
@@ -0,0 +1,213 @@
+package com.example.fruit.util;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Build;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+
+
+import com.example.fruit.R;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * 全屏显示 状态栏工具类
+ */
+public class StatusBarUtil {
+ /**
+ * 修改当前 Activity 的显示模式,hideStatusBarBackground :true 全屏模式,false 着色模式
+ *
+ * @param activity
+ * @param hideStatusBarBackground
+ */
+ public static void setStatusBar(Activity activity, boolean hideStatusBarBackground) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ Window window = activity.getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ if (hideStatusBarBackground) {
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
+ } else {
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
+ }
+
+ ViewGroup mContentView = (ViewGroup) window.findViewById(Window.ID_ANDROID_CONTENT);
+ View mChildView = mContentView.getChildAt(0);
+ if (mChildView != null) {
+ if (hideStatusBarBackground) {
+ mChildView.setPadding(
+ mChildView.getPaddingLeft(),
+ 0,
+ mChildView.getPaddingRight(),
+ mChildView.getPaddingBottom()
+ );
+ } else {
+ int statusHeight = getStatusBarHeight(activity);
+ mChildView.setPadding(
+ mChildView.getPaddingLeft(),
+ statusHeight,
+ mChildView.getPaddingRight(),
+ mChildView.getPaddingBottom()
+ );
+ }
+ }
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = activity.getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ if (hideStatusBarBackground) {
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ window.setStatusBarColor(Color.TRANSPARENT);
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
+ } else {
+ window.setStatusBarColor(activity.getResources().getColor(R.color.colorPrimary));
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
+ }
+ }
+ }
+ /**
+ * 获取手机状态栏高度
+ */
+ public static int getStatusBarHeight(Context context) {
+ int result = 0;
+ int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
+ if (resourceId > 0) {
+ result = context.getResources().getDimensionPixelSize(resourceId);
+ }
+ return result;
+ }
+ /**
+ *设置状态栏颜色
+ */
+ /* public static void setStatusBarColor(Activity activity, int colorId) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = activity.getWindow();
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(activity.getResources().getColor(colorId));
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ //使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明
+ transparentBar(activity);
+ SystemBarTintManager tintManager = new SystemBarTintManager(activity);
+ tintManager.setStatusBarTintEnabled(true);
+ tintManager.setStatusBarTintResource(colorId);
+ }
+ }*/
+ @TargetApi(19)
+ public static void transparentBar(Activity activity) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = activity.getWindow();
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.TRANSPARENT);
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
+
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ Window window = activity.getWindow();
+ window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
+ WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+ }
+ /**
+ * 设置状态栏文字颜色 true 为黑色 false 为白色(XML跟布局配置 android:fitsSystemWindows="true",否则布局会上移)
+ */
+ public static void setStatusBarLightMode(Activity activity, boolean dark) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ if (dark) { //
+ if (MIUISetStatusBarLightMode(activity, dark)) {
+ } else if (FlymeSetStatusBarLightMode(activity.getWindow(), dark)) {
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ //其他
+ activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ } else {
+ if (MIUISetStatusBarLightMode(activity, dark)) {
+ } else if (FlymeSetStatusBarLightMode(activity.getWindow(), dark)) {
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
+ }
+ }
+ }
+ }
+ /**
+ * 设置状态栏图标为深色和魅族特定的文字风格
+ * 可以用来判断是否为Flyme用户
+ *
+ * @param window 需要设置的窗口
+ * @param dark 是否把状态栏文字及图标颜色设置为深色
+ * @return boolean 成功执行返回true
+ */
+ public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {
+ boolean result = false;
+ if (window != null) {
+ try {
+ WindowManager.LayoutParams lp = window.getAttributes();
+ Field darkFlag = WindowManager.LayoutParams.class
+ .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
+ Field meizuFlags = WindowManager.LayoutParams.class
+ .getDeclaredField("meizuFlags");
+ darkFlag.setAccessible(true);
+ meizuFlags.setAccessible(true);
+ int bit = darkFlag.getInt(null);
+ int value = meizuFlags.getInt(lp);
+ if (dark) {
+ value |= bit;
+ } else {
+ value &= ~bit;
+ }
+ meizuFlags.setInt(lp, value);
+ window.setAttributes(lp);
+ result = true;
+ } catch (Exception e) {
+
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 需要MIUIV6以上
+ *
+ * @param activity
+ * @param dark 是否把状态栏文字及图标颜色设置为深色
+ * @return boolean 成功执行返回true
+ */
+ public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {
+ boolean result = false;
+ Window window = activity.getWindow();
+ if (window != null) {
+ Class clazz = window.getClass();
+ try {
+ int darkModeFlag = 0;
+ Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
+ Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
+ darkModeFlag = field.getInt(layoutParams);
+ Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
+ if (dark) {
+ extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体
+ } else {
+ extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体
+ }
+ result = true;
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ //开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上
+ if (dark) {
+ activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ } else {
+ activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
+ }
+ }
+ } catch (Exception e) {
+ }
+ }
+ return result;
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/fruit/widget/ActionBar.java b/app/src/main/java/com/example/fruit/widget/ActionBar.java
new file mode 100644
index 0000000..7376660
--- /dev/null
+++ b/app/src/main/java/com/example/fruit/widget/ActionBar.java
@@ -0,0 +1,307 @@
+package com.example.fruit.widget;
+
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Color;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.core.graphics.ColorUtils;
+
+import com.example.fruit.R;
+
+
+/**
+ * 自定义ActionBar
+ */
+public final class ActionBar extends LinearLayout {
+
+ private LinearLayout llActionbarRoot;//自定义ActionBar根节点
+ private View vStatusBar;//状态栏位置
+ private ImageView ivLeft;//左边图标
+ private TextView tvLeft;//左边
+ private TextView tvTitle;//中间标题
+ private ImageView ivRight;//右边图标
+ private Button btnRight;//右边按钮
+ private TextView tvRight;//右边文字
+ public ActionBar(Context context) {
+ this(context, null);
+ }
+
+ public ActionBar(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context);
+
+ }
+
+ /**
+ * 设置标题
+ * @param title
+ */
+ public void setTitle(String title){
+ if (!TextUtils.isEmpty(title)) {
+ tvTitle.setText(title);
+ } else {
+ tvTitle.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * 设置左侧文本
+ * @param text
+ */
+ public void setLeftText(String text){
+ if (!TextUtils.isEmpty(text)) {
+ tvLeft.setText(text);
+ tvLeft.setVisibility(View.VISIBLE);
+ } else {
+ tvLeft.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * 设置左侧图标
+ * @param ico
+ */
+ public void setLeftIco(int ico){
+ if (ico!=0) {
+ ivLeft.setImageResource(ico);
+ ivLeft.setVisibility(View.VISIBLE);
+ } else {
+ ivLeft.setVisibility(View.GONE);
+ }
+ }
+
+
+ /**
+ * 设置右侧文本
+ * @param text
+ */
+ public void setRightText(String text){
+ if (!TextUtils.isEmpty(text)) {
+ tvRight.setText(text);
+ tvRight.setVisibility(View.VISIBLE);
+ } else {
+ tvRight.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * 设置右侧btn
+ * @param text
+ */
+ public void setRightBtn(String text){
+ if (!TextUtils.isEmpty(text)) {
+ btnRight.setText(text);
+ btnRight.setVisibility(View.VISIBLE);
+ } else {
+ btnRight.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * 设置右侧图标
+ * @param ico
+ */
+ public void setRightIco(int ico){
+ if (ico!=0) {
+ ivRight.setImageResource(ico);
+ ivRight.setVisibility(View.VISIBLE);
+ } else {
+ ivRight.setVisibility(View.GONE);
+ }
+ }
+
+ private void init(Context context) {
+ setOrientation(HORIZONTAL);//设置横向布局
+ View contentView = inflate(getContext(), R.layout.widget_actionbar, this);
+ //获取控件
+ llActionbarRoot = (LinearLayout)contentView.findViewById(R.id.ll_actionbar_root);
+ vStatusBar = contentView.findViewById(R.id.v_statusbar);
+ ivLeft = (ImageView)contentView.findViewById(R.id.iv_actionbar_left);
+ tvLeft=(TextView) contentView.findViewById(R.id.tv_actionbar_left);
+ tvTitle =(TextView) contentView.findViewById(R.id.tv_actionbar_title);
+ ivRight =(ImageView) contentView.findViewById(R.id.iv_actionbar_right);
+ btnRight=(Button) contentView.findViewById(R.id.btn_actionbar_right);
+ tvRight=(TextView) contentView.findViewById(R.id.tv_actionbar_right);
+ }
+
+ /**
+ * 设置透明度
+ *
+ * @param transAlpha{Integer} 0-255 之间
+ */
+ public void setTranslucent(int transAlpha) {
+ //设置透明度
+ llActionbarRoot.setBackgroundColor(ColorUtils.setAlphaComponent(getResources().getColor(R.color.colorPrimary), transAlpha));
+ tvTitle.setAlpha(transAlpha);
+ ivLeft.setAlpha(transAlpha);
+ ivRight.setAlpha(transAlpha);
+ }
+ /**
+ * 设置数据
+ *
+ * @param strTitle 标题
+ * @param resIdLeft 左边图标资源
+ * @param resIdRight 右边图标资源
+ * @param intColor 内容颜色 0为白色 1为黑色
+ * @param backgroundColor 背景颜色
+ * @param listener 点击事件监听
+ */
+ public void setData(String strTitle, int resIdLeft, int resIdRight, int intColor, int backgroundColor, final ActionBarClickListener listener) {
+ String textColor=intColor==0?"#FFFFFF":"#000000";
+ if (!TextUtils.isEmpty(strTitle)) {
+ tvTitle.setText(strTitle);
+ tvTitle.setTextColor(Color.parseColor(textColor));
+ } else {
+ tvTitle.setVisibility(View.GONE);
+ }
+ if (resIdLeft == 0) {
+ ivLeft.setVisibility(View.GONE);
+ } else {
+ ivLeft.setBackgroundResource(resIdLeft);
+ ivLeft.setVisibility(View.VISIBLE);
+ }
+ if (resIdRight == 0) {
+ ivRight.setVisibility(View.GONE);
+ } else {
+ ivRight.setBackgroundResource(resIdRight);
+ ivRight.setVisibility(View.VISIBLE);
+ }
+
+ if (backgroundColor==0){
+ llActionbarRoot.setBackgroundResource(0);
+ }else {
+ llActionbarRoot.setBackgroundColor(backgroundColor);//设置标题栏背景颜色
+ }
+ if (listener != null) {
+ ivLeft.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listener.onLeftClick();
+ }
+ });
+ ivRight.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listener.onRightClick();
+ }
+ });
+ }
+ }
+ public void setData(Activity context, String strTitle, int resIdLeft, int resIdRight, int intColor, int backgroundColor, final ActionBarClickListener listener) {
+ String textColor=intColor==0?"#FFFFFF":"#000000";
+ if (!TextUtils.isEmpty(strTitle)) {
+ tvTitle.setText(strTitle);
+ tvTitle.setTextColor(Color.parseColor(textColor));
+ } else {
+ tvTitle.setVisibility(View.GONE);
+ }
+ if (resIdLeft == 0) {
+ ivLeft.setVisibility(View.GONE);
+ } else {
+ ivLeft.setBackgroundResource(resIdLeft);
+ ivLeft.setVisibility(View.VISIBLE);
+ }
+ if (resIdRight == 0) {
+ ivRight.setVisibility(View.GONE);
+ } else {
+ ivRight.setBackgroundResource(resIdRight);
+ ivRight.setVisibility(View.VISIBLE);
+ }
+
+ if (backgroundColor==0){
+ llActionbarRoot.setBackgroundResource(0);
+ }else {
+ llActionbarRoot.setBackgroundColor(backgroundColor);//设置标题栏背景颜色
+ }
+ if (listener != null) {
+ ivLeft.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listener.onLeftClick();
+ }
+ });
+ ivRight.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listener.onRightClick();
+ }
+ });
+ }
+ }
+
+ public void setData(String strTitle, int resIdLeft, String strRight, int intColor, int backgroundColor, final ActionBarClickListener listener) {
+ String textColor=intColor==0?"#FFFFFF":"#000000";
+ if (!TextUtils.isEmpty(strTitle)) {
+ tvTitle.setText(strTitle);
+ tvTitle.setTextColor(Color.parseColor(textColor));
+ } else {
+ tvTitle.setVisibility(View.GONE);
+ }
+ if (resIdLeft == 0) {
+ ivLeft.setVisibility(View.GONE);
+ } else {
+ ivLeft.setBackgroundResource(resIdLeft);
+ ivLeft.setVisibility(View.VISIBLE);
+ }
+ if (!TextUtils.isEmpty(strRight)) {
+ btnRight.setText(strRight);
+ btnRight.setVisibility(View.VISIBLE);
+ } else {
+ btnRight.setVisibility(View.GONE);
+ }
+ if (backgroundColor==0){
+ llActionbarRoot.setBackgroundResource(0);
+ }else {
+ llActionbarRoot.setBackgroundColor(backgroundColor);//设置标题栏背景颜色
+ }
+ if (listener != null) {
+ if(ivLeft.getVisibility()==VISIBLE){
+ ivLeft.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listener.onLeftClick();
+ }
+ });
+ }else if(tvLeft.getVisibility()==VISIBLE){
+ tvLeft.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listener.onLeftClick();
+ }
+ });
+ }
+
+
+ if(btnRight.getVisibility()==VISIBLE){
+ btnRight.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listener.onRightClick();
+ }
+ });
+ }else if(tvRight.getVisibility()==VISIBLE){
+ tvRight.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listener.onRightClick();
+ }
+ });
+ }
+
+ }
+ }
+ public interface ActionBarClickListener {
+ //左边点击
+ void onLeftClick();
+ //右边点击
+ void onRightClick();
+ }
+}
diff --git a/app/src/main/res/drawable-v24/gou.png b/app/src/main/res/drawable-v24/gou.png
new file mode 100644
index 0000000..80cae55
Binary files /dev/null and b/app/src/main/res/drawable-v24/gou.png differ
diff --git a/app/src/main/res/drawable-v24/gou1.png b/app/src/main/res/drawable-v24/gou1.png
new file mode 100644
index 0000000..0df096b
Binary files /dev/null and b/app/src/main/res/drawable-v24/gou1.png differ
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/a1.png b/app/src/main/res/drawable/a1.png
new file mode 100644
index 0000000..42de479
Binary files /dev/null and b/app/src/main/res/drawable/a1.png differ
diff --git a/app/src/main/res/drawable/bg_border_bottom.xml b/app/src/main/res/drawable/bg_border_bottom.xml
new file mode 100644
index 0000000..6cc85d7
--- /dev/null
+++ b/app/src/main/res/drawable/bg_border_bottom.xml
@@ -0,0 +1,12 @@
+
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_border_top.xml b/app/src/main/res/drawable/bg_border_top.xml
new file mode 100644
index 0000000..6d55a27
--- /dev/null
+++ b/app/src/main/res/drawable/bg_border_top.xml
@@ -0,0 +1,13 @@
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_ripple.xml b/app/src/main/res/drawable/bg_ripple.xml
new file mode 100644
index 0000000..8196e32
--- /dev/null
+++ b/app/src/main/res/drawable/bg_ripple.xml
@@ -0,0 +1,10 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_round_white.xml b/app/src/main/res/drawable/bg_round_white.xml
new file mode 100644
index 0000000..f21b914
--- /dev/null
+++ b/app/src/main/res/drawable/bg_round_white.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/btn_border_fill.xml b/app/src/main/res/drawable/btn_border_fill.xml
new file mode 100644
index 0000000..679e3d7
--- /dev/null
+++ b/app/src/main/res/drawable/btn_border_fill.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_border_fill_enabled.xml b/app/src/main/res/drawable/btn_border_fill_enabled.xml
new file mode 100644
index 0000000..5799fad
--- /dev/null
+++ b/app/src/main/res/drawable/btn_border_fill_enabled.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_border_radius_fill_gray.xml b/app/src/main/res/drawable/btn_border_radius_fill_gray.xml
new file mode 100644
index 0000000..01c37c3
--- /dev/null
+++ b/app/src/main/res/drawable/btn_border_radius_fill_gray.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/c3.jpg b/app/src/main/res/drawable/c3.jpg
new file mode 100644
index 0000000..7b829eb
Binary files /dev/null and b/app/src/main/res/drawable/c3.jpg differ
diff --git a/app/src/main/res/drawable/c6.jpg b/app/src/main/res/drawable/c6.jpg
new file mode 100644
index 0000000..8c3de4b
Binary files /dev/null and b/app/src/main/res/drawable/c6.jpg differ
diff --git a/app/src/main/res/drawable/car1.png b/app/src/main/res/drawable/car1.png
new file mode 100644
index 0000000..013e719
Binary files /dev/null and b/app/src/main/res/drawable/car1.png differ
diff --git a/app/src/main/res/drawable/d.png b/app/src/main/res/drawable/d.png
new file mode 100644
index 0000000..7fe0349
Binary files /dev/null and b/app/src/main/res/drawable/d.png differ
diff --git a/app/src/main/res/drawable/d1.png b/app/src/main/res/drawable/d1.png
new file mode 100644
index 0000000..0efce49
Binary files /dev/null and b/app/src/main/res/drawable/d1.png differ
diff --git a/app/src/main/res/drawable/dingdan.png b/app/src/main/res/drawable/dingdan.png
new file mode 100644
index 0000000..7422bb9
Binary files /dev/null and b/app/src/main/res/drawable/dingdan.png differ
diff --git a/app/src/main/res/drawable/home1.png b/app/src/main/res/drawable/home1.png
new file mode 100644
index 0000000..78b579f
Binary files /dev/null and b/app/src/main/res/drawable/home1.png differ
diff --git a/app/src/main/res/drawable/ic_add.png b/app/src/main/res/drawable/ic_add.png
new file mode 100644
index 0000000..b7f82f9
Binary files /dev/null and b/app/src/main/res/drawable/ic_add.png differ
diff --git a/app/src/main/res/drawable/ic_back.png b/app/src/main/res/drawable/ic_back.png
new file mode 100644
index 0000000..14d7a52
Binary files /dev/null and b/app/src/main/res/drawable/ic_back.png differ
diff --git a/app/src/main/res/drawable/ic_browse.png b/app/src/main/res/drawable/ic_browse.png
new file mode 100644
index 0000000..57d9df6
Binary files /dev/null and b/app/src/main/res/drawable/ic_browse.png differ
diff --git a/app/src/main/res/drawable/ic_buy.png b/app/src/main/res/drawable/ic_buy.png
new file mode 100644
index 0000000..f7ed474
Binary files /dev/null and b/app/src/main/res/drawable/ic_buy.png differ
diff --git a/app/src/main/res/drawable/ic_buy_check.png b/app/src/main/res/drawable/ic_buy_check.png
new file mode 100644
index 0000000..147f177
Binary files /dev/null and b/app/src/main/res/drawable/ic_buy_check.png differ
diff --git a/app/src/main/res/drawable/ic_empty.png b/app/src/main/res/drawable/ic_empty.png
new file mode 100644
index 0000000..06628ea
Binary files /dev/null and b/app/src/main/res/drawable/ic_empty.png differ
diff --git a/app/src/main/res/drawable/ic_error.png b/app/src/main/res/drawable/ic_error.png
new file mode 100644
index 0000000..2b30898
Binary files /dev/null and b/app/src/main/res/drawable/ic_error.png differ
diff --git a/app/src/main/res/drawable/ic_favorite.png b/app/src/main/res/drawable/ic_favorite.png
new file mode 100644
index 0000000..48b30ef
Binary files /dev/null and b/app/src/main/res/drawable/ic_favorite.png differ
diff --git a/app/src/main/res/drawable/ic_go.png b/app/src/main/res/drawable/ic_go.png
new file mode 100644
index 0000000..539d327
Binary files /dev/null and b/app/src/main/res/drawable/ic_go.png differ
diff --git a/app/src/main/res/drawable/ic_home.png b/app/src/main/res/drawable/ic_home.png
new file mode 100644
index 0000000..72b80fb
Binary files /dev/null and b/app/src/main/res/drawable/ic_home.png differ
diff --git a/app/src/main/res/drawable/ic_home_check.png b/app/src/main/res/drawable/ic_home_check.png
new file mode 100644
index 0000000..1c2b484
Binary files /dev/null and b/app/src/main/res/drawable/ic_home_check.png differ
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_logo.png b/app/src/main/res/drawable/ic_logo.png
new file mode 100644
index 0000000..edcc7ee
Binary files /dev/null and b/app/src/main/res/drawable/ic_logo.png differ
diff --git a/app/src/main/res/drawable/ic_manage.png b/app/src/main/res/drawable/ic_manage.png
new file mode 100644
index 0000000..9a9b8f1
Binary files /dev/null and b/app/src/main/res/drawable/ic_manage.png differ
diff --git a/app/src/main/res/drawable/ic_manage_check.png b/app/src/main/res/drawable/ic_manage_check.png
new file mode 100644
index 0000000..c5ef1a5
Binary files /dev/null and b/app/src/main/res/drawable/ic_manage_check.png differ
diff --git a/app/src/main/res/drawable/ic_person.png b/app/src/main/res/drawable/ic_person.png
new file mode 100644
index 0000000..7ca59c4
Binary files /dev/null and b/app/src/main/res/drawable/ic_person.png differ
diff --git a/app/src/main/res/drawable/ic_right.png b/app/src/main/res/drawable/ic_right.png
new file mode 100644
index 0000000..e6e167b
Binary files /dev/null and b/app/src/main/res/drawable/ic_right.png differ
diff --git a/app/src/main/res/drawable/ic_search_gray.png b/app/src/main/res/drawable/ic_search_gray.png
new file mode 100644
index 0000000..baefd29
Binary files /dev/null and b/app/src/main/res/drawable/ic_search_gray.png differ
diff --git a/app/src/main/res/drawable/ic_security.png b/app/src/main/res/drawable/ic_security.png
new file mode 100644
index 0000000..219e92b
Binary files /dev/null and b/app/src/main/res/drawable/ic_security.png differ
diff --git a/app/src/main/res/drawable/ic_user.png b/app/src/main/res/drawable/ic_user.png
new file mode 100644
index 0000000..ba7689b
Binary files /dev/null and b/app/src/main/res/drawable/ic_user.png differ
diff --git a/app/src/main/res/drawable/ic_user_check.png b/app/src/main/res/drawable/ic_user_check.png
new file mode 100644
index 0000000..00613d3
Binary files /dev/null and b/app/src/main/res/drawable/ic_user_check.png differ
diff --git a/app/src/main/res/drawable/kefu.png b/app/src/main/res/drawable/kefu.png
new file mode 100644
index 0000000..06ae399
Binary files /dev/null and b/app/src/main/res/drawable/kefu.png differ
diff --git a/app/src/main/res/drawable/main_cart.png b/app/src/main/res/drawable/main_cart.png
new file mode 100644
index 0000000..a944e44
Binary files /dev/null and b/app/src/main/res/drawable/main_cart.png differ
diff --git a/app/src/main/res/drawable/main_cart_press.png b/app/src/main/res/drawable/main_cart_press.png
new file mode 100644
index 0000000..58c7ae8
Binary files /dev/null and b/app/src/main/res/drawable/main_cart_press.png differ
diff --git a/app/src/main/res/drawable/main_home.png b/app/src/main/res/drawable/main_home.png
new file mode 100644
index 0000000..1e243a2
Binary files /dev/null and b/app/src/main/res/drawable/main_home.png differ
diff --git a/app/src/main/res/drawable/main_user.png b/app/src/main/res/drawable/main_user.png
new file mode 100644
index 0000000..a293a2d
Binary files /dev/null and b/app/src/main/res/drawable/main_user.png differ
diff --git a/app/src/main/res/drawable/main_user_press.png b/app/src/main/res/drawable/main_user_press.png
new file mode 100644
index 0000000..e12f8ee
Binary files /dev/null and b/app/src/main/res/drawable/main_user_press.png differ
diff --git a/app/src/main/res/drawable/manage.png b/app/src/main/res/drawable/manage.png
new file mode 100644
index 0000000..97be7a1
Binary files /dev/null and b/app/src/main/res/drawable/manage.png differ
diff --git a/app/src/main/res/drawable/mima.png b/app/src/main/res/drawable/mima.png
new file mode 100644
index 0000000..1ff4d31
Binary files /dev/null and b/app/src/main/res/drawable/mima.png differ
diff --git a/app/src/main/res/drawable/order.png b/app/src/main/res/drawable/order.png
new file mode 100644
index 0000000..232d4f6
Binary files /dev/null and b/app/src/main/res/drawable/order.png differ
diff --git a/app/src/main/res/drawable/order1.png b/app/src/main/res/drawable/order1.png
new file mode 100644
index 0000000..8f06e9a
Binary files /dev/null and b/app/src/main/res/drawable/order1.png differ
diff --git a/app/src/main/res/drawable/selector_main_rb_buy.xml b/app/src/main/res/drawable/selector_main_rb_buy.xml
new file mode 100644
index 0000000..440f349
--- /dev/null
+++ b/app/src/main/res/drawable/selector_main_rb_buy.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_main_rb_car.xml b/app/src/main/res/drawable/selector_main_rb_car.xml
new file mode 100644
index 0000000..440f349
--- /dev/null
+++ b/app/src/main/res/drawable/selector_main_rb_car.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_main_rb_home.xml b/app/src/main/res/drawable/selector_main_rb_home.xml
new file mode 100644
index 0000000..0c6328d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_main_rb_home.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_main_rb_manage.xml b/app/src/main/res/drawable/selector_main_rb_manage.xml
new file mode 100644
index 0000000..94fc887
--- /dev/null
+++ b/app/src/main/res/drawable/selector_main_rb_manage.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_main_rb_text.xml b/app/src/main/res/drawable/selector_main_rb_text.xml
new file mode 100644
index 0000000..ddfd02c
--- /dev/null
+++ b/app/src/main/res/drawable/selector_main_rb_text.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_main_rb_user.xml b/app/src/main/res/drawable/selector_main_rb_user.xml
new file mode 100644
index 0000000..fc62407
--- /dev/null
+++ b/app/src/main/res/drawable/selector_main_rb_user.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/user1.png b/app/src/main/res/drawable/user1.png
new file mode 100644
index 0000000..0c148b3
Binary files /dev/null and b/app/src/main/res/drawable/user1.png differ
diff --git a/app/src/main/res/drawable/wenxin.png b/app/src/main/res/drawable/wenxin.png
new file mode 100644
index 0000000..6f342b7
Binary files /dev/null and b/app/src/main/res/drawable/wenxin.png differ
diff --git a/app/src/main/res/drawable/xq.png b/app/src/main/res/drawable/xq.png
new file mode 100644
index 0000000..8ac8241
Binary files /dev/null and b/app/src/main/res/drawable/xq.png differ
diff --git a/app/src/main/res/drawable/zh.png b/app/src/main/res/drawable/zh.png
new file mode 100644
index 0000000..8a19227
Binary files /dev/null and b/app/src/main/res/drawable/zh.png differ
diff --git a/app/src/main/res/layout/activity_browse.xml b/app/src/main/res/layout/activity_browse.xml
new file mode 100644
index 0000000..8b08ece
--- /dev/null
+++ b/app/src/main/res/layout/activity_browse.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_fruit_add.xml b/app/src/main/res/layout/activity_fruit_add.xml
new file mode 100644
index 0000000..3b96ad7
--- /dev/null
+++ b/app/src/main/res/layout/activity_fruit_add.xml
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_fruit_detail.xml b/app/src/main/res/layout/activity_fruit_detail.xml
new file mode 100644
index 0000000..5b5a5f4
--- /dev/null
+++ b/app/src/main/res/layout/activity_fruit_detail.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_fruit_x.xml b/app/src/main/res/layout/activity_fruit_x.xml
new file mode 100644
index 0000000..767fcf3
--- /dev/null
+++ b/app/src/main/res/layout/activity_fruit_x.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_fruit_y.xml b/app/src/main/res/layout/activity_fruit_y.xml
new file mode 100644
index 0000000..e3c8735
--- /dev/null
+++ b/app/src/main/res/layout/activity_fruit_y.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_js.xml b/app/src/main/res/layout/activity_js.xml
new file mode 100644
index 0000000..6049bbc
--- /dev/null
+++ b/app/src/main/res/layout/activity_js.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000..fe0bf32
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..2477bc5
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_manage.xml b/app/src/main/res/layout/activity_manage.xml
new file mode 100644
index 0000000..e83f41a
--- /dev/null
+++ b/app/src/main/res/layout/activity_manage.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_opening.xml b/app/src/main/res/layout/activity_opening.xml
new file mode 100644
index 0000000..0f3326e
--- /dev/null
+++ b/app/src/main/res/layout/activity_opening.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_order.xml b/app/src/main/res/layout/activity_order.xml
new file mode 100644
index 0000000..df5fa7a
--- /dev/null
+++ b/app/src/main/res/layout/activity_order.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_password.xml b/app/src/main/res/layout/activity_password.xml
new file mode 100644
index 0000000..b609e26
--- /dev/null
+++ b/app/src/main/res/layout/activity_password.xml
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_person.xml b/app/src/main/res/layout/activity_person.xml
new file mode 100644
index 0000000..95ab0b6
--- /dev/null
+++ b/app/src/main/res/layout/activity_person.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
new file mode 100644
index 0000000..5716c50
--- /dev/null
+++ b/app/src/main/res/layout/activity_register.xml
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_user_detail.xml b/app/src/main/res/layout/activity_user_detail.xml
new file mode 100644
index 0000000..c4b1d16
--- /dev/null
+++ b/app/src/main/res/layout/activity_user_detail.xml
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_wx.xml b/app/src/main/res/layout/activity_wx.xml
new file mode 100644
index 0000000..da6aa3e
--- /dev/null
+++ b/app/src/main/res/layout/activity_wx.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_car.xml b/app/src/main/res/layout/fragment_car.xml
new file mode 100644
index 0000000..1b7234c
--- /dev/null
+++ b/app/src/main/res/layout/fragment_car.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_fruit.xml b/app/src/main/res/layout/fragment_fruit.xml
new file mode 100644
index 0000000..e2b745c
--- /dev/null
+++ b/app/src/main/res/layout/fragment_fruit.xml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_order.xml b/app/src/main/res/layout/fragment_order.xml
new file mode 100644
index 0000000..4f83f35
--- /dev/null
+++ b/app/src/main/res/layout/fragment_order.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_user.xml b/app/src/main/res/layout/fragment_user.xml
new file mode 100644
index 0000000..2eac771
--- /dev/null
+++ b/app/src/main/res/layout/fragment_user.xml
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rv_car_list.xml b/app/src/main/res/layout/item_rv_car_list.xml
new file mode 100644
index 0000000..bf82100
--- /dev/null
+++ b/app/src/main/res/layout/item_rv_car_list.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rv_collect_list.xml b/app/src/main/res/layout/item_rv_collect_list.xml
new file mode 100644
index 0000000..85bf51e
--- /dev/null
+++ b/app/src/main/res/layout/item_rv_collect_list.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rv_fruit_list.xml b/app/src/main/res/layout/item_rv_fruit_list.xml
new file mode 100644
index 0000000..447c035
--- /dev/null
+++ b/app/src/main/res/layout/item_rv_fruit_list.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rv_order_list.xml b/app/src/main/res/layout/item_rv_order_list.xml
new file mode 100644
index 0000000..41dd027
--- /dev/null
+++ b/app/src/main/res/layout/item_rv_order_list.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rv_user_list.xml b/app/src/main/res/layout/item_rv_user_list.xml
new file mode 100644
index 0000000..1ae7fed
--- /dev/null
+++ b/app/src/main/res/layout/item_rv_user_list.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/widget_actionbar.xml b/app/src/main/res/layout/widget_actionbar.xml
new file mode 100644
index 0000000..cb3a28d
--- /dev/null
+++ b/app/src/main/res/layout/widget_actionbar.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a571e60
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..61da551
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c41dd28
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..db5080a
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..6dba46d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..da31a87
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..15ac681
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..b216f2d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..f25a419
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..e96783c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml
new file mode 100644
index 0000000..5c45564
--- /dev/null
+++ b/app/src/main/res/values/array.xml
@@ -0,0 +1,11 @@
+
+
+
+ - 果类
+ - 柑类
+ - 桃类
+ - 瓜类
+ - 蕉类
+ - 葡萄类
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..df1e84b
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,15 @@
+
+
+ #4CAF50
+ #4CAF50
+ #4CAF50
+ #4CAF50
+ #4CAF50
+ #4CAF50
+ #000000
+ #ffffff
+ #BCB7B7
+ #cccccc
+ #52CCCCCC
+ #2DCCCCCC
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..2300485
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ 水果商城
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..6dba9bd
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..cd5e6cd
--- /dev/null
+++ b/app/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/test/java/com/example/fruit/ExampleUnitTest.java b/app/src/test/java/com/example/fruit/ExampleUnitTest.java
new file mode 100644
index 0000000..1a71bcb
--- /dev/null
+++ b/app/src/test/java/com/example/fruit/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.example.fruit;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..f096dcd
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,24 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:4.2.2'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..52f5917
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,19 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..7454180
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..ffed3a2
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..1b6c787
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,234 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..107acd3
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..5ac6572
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,2 @@
+include ':app'
+rootProject.name = "Fruit"
\ No newline at end of file