diff --git a/src/cyxgroup-foodmenu/.gitignore b/src/cyxgroup-foodmenu/.gitignore
new file mode 100644
index 0000000..aa724b7
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.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/src/cyxgroup-foodmenu/.idea/.gitignore b/src/cyxgroup-foodmenu/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/src/cyxgroup-foodmenu/.idea/.name b/src/cyxgroup-foodmenu/.idea/.name
new file mode 100644
index 0000000..563ae42
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/.name
@@ -0,0 +1 @@
+MindCard
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/.idea/compiler.xml b/src/cyxgroup-foodmenu/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/.idea/gradle.xml b/src/cyxgroup-foodmenu/.idea/gradle.xml
new file mode 100644
index 0000000..6e5389e
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/gradle.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/.idea/misc.xml b/src/cyxgroup-foodmenu/.idea/misc.xml
new file mode 100644
index 0000000..178f70c
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/5/e/5ebda0d136caa689c96859248a352d0bd126ba86 b/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/5/e/5ebda0d136caa689c96859248a352d0bd126ba86
new file mode 100644
index 0000000..adf4028
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/5/e/5ebda0d136caa689c96859248a352d0bd126ba86
@@ -0,0 +1,22 @@
+
+>
+java:S1604)"(Make this anonymous inner class a lambda(
+C
+java:S1604R"(Make this anonymous inner class a lambda(
+C
+java:S1604["(Make this anonymous inner class a lambda(
+>
+java:S16049"(Make this anonymous inner class a lambda(î
+D
+java:S1604"(Make this anonymous inner class a lambda(
+D
+java:S1604"(Make this anonymous inner class a lambda(
+D
+java:S1604"(Make this anonymous inner class a lambda(
+>
+java:S1604p"(Make this anonymous inner class a lambda(î
+C
+java:S1604g"(Make this anonymous inner class a lambda(̌
+m
+java:S3776#"RRefactor this method to reduce its Cognitive Complexity from 18 to the 15 allowed.(
+N java:S106H"9Replace this use of System.out or System.err by a logger.(
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/8/c/8c55c3ccc257e5907959013f99656e4c8ec3903e b/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/8/c/8c55c3ccc257e5907959013f99656e4c8ec3903e
new file mode 100644
index 0000000..e69de29
diff --git a/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/f/a/fa8fec3d4ff518092843a840776ca342ebaba7bf b/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/f/a/fa8fec3d4ff518092843a840776ca342ebaba7bf
new file mode 100644
index 0000000..15ab48d
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/f/a/fa8fec3d4ff518092843a840776ca342ebaba7bf
@@ -0,0 +1,19 @@
+
+>
+java:S1604L"(Make this anonymous inner class a lambda(î
+>
+java:S1604e"(Make this anonymous inner class a lambda(î
+C
+java:S1604z"(Make this anonymous inner class a lambda(
+D
+java:S1604"(Make this anonymous inner class a lambda(
+>
+java:S1604+"(Make this anonymous inner class a lambda(î
+C
+java:S1604("(Make this anonymous inner class a lambda(
+?
+java:S1604"(Make this anonymous inner class a lambda(
+m
+java:S3776 "RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(
+S java:S106\"9Replace this use of System.out or System.err by a logger.(㿢
+S java:S106s"9Replace this use of System.out or System.err by a logger.(㿢
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/index.pb b/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/index.pb
new file mode 100644
index 0000000..ebd73ff
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/sonarlint/issuestore/index.pb
@@ -0,0 +1,7 @@
+
+P
+ app/src/main/AndroidManifest.xml,8\c\8c55c3ccc257e5907959013f99656e4c8ec3903e
+p
+@app/src/main/java/com/hbue/activity/EditImformationActivity.java,5\e\5ebda0d136caa689c96859248a352d0bd126ba86
+f
+6app/src/main/java/com/hbue/activity/LoginActivity.java,f\a\fa8fec3d4ff518092843a840776ca342ebaba7bf
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/5/e/5ebda0d136caa689c96859248a352d0bd126ba86 b/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/5/e/5ebda0d136caa689c96859248a352d0bd126ba86
new file mode 100644
index 0000000..e69de29
diff --git a/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/8/c/8c55c3ccc257e5907959013f99656e4c8ec3903e b/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/8/c/8c55c3ccc257e5907959013f99656e4c8ec3903e
new file mode 100644
index 0000000..e69de29
diff --git a/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/f/a/fa8fec3d4ff518092843a840776ca342ebaba7bf b/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/f/a/fa8fec3d4ff518092843a840776ca342ebaba7bf
new file mode 100644
index 0000000..e69de29
diff --git a/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/index.pb b/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/index.pb
new file mode 100644
index 0000000..ebd73ff
--- /dev/null
+++ b/src/cyxgroup-foodmenu/.idea/sonarlint/securityhotspotstore/index.pb
@@ -0,0 +1,7 @@
+
+P
+ app/src/main/AndroidManifest.xml,8\c\8c55c3ccc257e5907959013f99656e4c8ec3903e
+p
+@app/src/main/java/com/hbue/activity/EditImformationActivity.java,5\e\5ebda0d136caa689c96859248a352d0bd126ba86
+f
+6app/src/main/java/com/hbue/activity/LoginActivity.java,f\a\fa8fec3d4ff518092843a840776ca342ebaba7bf
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/.gitignore b/src/cyxgroup-foodmenu/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/build.gradle b/src/cyxgroup-foodmenu/app/build.gradle
new file mode 100644
index 0000000..320b901
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/build.gradle
@@ -0,0 +1,50 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ compileSdk 32
+
+ defaultConfig {
+ applicationId "com.hbue"
+ minSdk 23
+ targetSdk 32
+ 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
+ }
+ buildFeatures {
+ viewBinding true
+ }
+}
+
+dependencies {
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'com.google.android.material:material:1.3.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+ implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
+ implementation 'androidx.navigation:navigation-fragment:2.3.5'
+ implementation 'androidx.navigation:navigation-ui:2.3.5'
+ //implementation 'com.android.support:support-v7:28.0.0'
+ testImplementation 'junit:junit:4.+'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+ implementation 'org.litepal.guolindev:core:3.2.1'
+ implementation 'com.squareup.okhttp3:okhttp:3.4.1'
+ implementation 'com.google.code.gson:gson:2.8.5'
+ implementation 'com.squareup.okio:okio:1.13.0'
+
+}
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/proguard-rules.pro b/src/cyxgroup-foodmenu/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/src/cyxgroup-foodmenu/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/src/cyxgroup-foodmenu/app/release/output-metadata.json b/src/cyxgroup-foodmenu/app/release/output-metadata.json
new file mode 100644
index 0000000..3bcc1fa
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/release/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "com.hbue",
+ "variantName": "release",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-release.apk"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/src/androidTest/java/com/hbue/ExampleInstrumentedTest.java b/src/cyxgroup-foodmenu/app/src/androidTest/java/com/hbue/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..996c1a0
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/src/androidTest/java/com/hbue/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.hbue;
+
+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.hbue", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/src/main/AndroidManifest.xml b/src/cyxgroup-foodmenu/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b8bdfa4
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/src/main/AndroidManifest.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/src/main/assets/litepal.xml b/src/cyxgroup-foodmenu/app/src/main/assets/litepal.xml
new file mode 100644
index 0000000..d1dec3a
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/src/main/assets/litepal.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/EditImformationActivity.java b/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/EditImformationActivity.java
new file mode 100644
index 0000000..5776943
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/EditImformationActivity.java
@@ -0,0 +1,171 @@
+package com.hbue.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.os.Looper;
+import android.view.View;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.google.gson.Gson;
+import com.hbue.entity.Result;
+import com.hbue.entity.User;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.FormBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+
+/**
+ * 修改个人信息
+ */
+public class EditImformationActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//取消标题栏
+ setContentView(R.layout.activity_edit_imformation);
+ //设置返回图标的功能
+ ImageView backsetting = (ImageView) findViewById(R.id.backSetting2);
+ backsetting.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ finish();
+ }
+ });
+ //获取用户名
+ SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);
+ String username = preferences.getString("username", "");
+ //获取文本框对象
+ TextView usernameEdit = (TextView) findViewById(R.id.update_username);
+ EditText nameEdit = (EditText) findViewById(R.id.update_name);
+ EditText phoneEdit =(EditText) findViewById(R.id.update_phone);
+ EditText ageEdit = (EditText) findViewById(R.id.update_age);
+ EditText sexEdit =(EditText) findViewById(R.id.update_sex);
+ //发送请求到服务器,回显数据
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ OkHttpClient okHttpClient = new OkHttpClient();
+ Request request = new Request.Builder().
+ url("http://10.0.2.2:8080/mindcard/user/findByUsername?username=" + username)
+ .build();
+ Response response = okHttpClient.newCall(request).execute();
+ String json = response.body().string();
+ Gson gson = new Gson();
+ Result result = gson.fromJson(json, Result.class);
+ if (result.getCode()==0){
+ //如果成功
+ User user = gson.fromJson( result.getData().toString(),User.class);
+ System.out.println(user.toString());
+ Looper.prepare();//防止报错
+ usernameEdit.setText(username);
+ nameEdit.setText(user.getName());
+ phoneEdit.setText(user.getPhone());
+ ageEdit.setText(user.getAge()+"");
+ sexEdit.setText(user.getSex()+"");
+ Looper.loop();//防止报错
+ }else{
+ //失败则弹出提示
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(EditImformationActivity.this, "回显数据失败", Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(EditImformationActivity.this, "回显数据失败", Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+ }
+ }).start();
+
+ //设置提交按钮的功能
+ Button updateButton = (Button) findViewById(R.id.updateButton);
+ updateButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ //1.获取各组件的属性
+ String name = nameEdit.getText().toString();
+ String phone = phoneEdit.getText().toString();
+ String sex = sexEdit.getText().toString();
+ String age = ageEdit.getText().toString();
+ if (sex.equals("男") || sex.equals("女")){
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ //向服务器发送信息
+ OkHttpClient okHttpClient = new OkHttpClient();
+ FormBody.Builder builder = new FormBody.Builder();
+ builder.add("username",username);
+ builder.add("name",name);
+ builder.add("phone",phone);
+ builder.add("sex",sex);
+ builder.add("age",age);
+ Request request = new Request.Builder()
+ .url("http://10.0.2.2:8080/mindcard/user/edit")
+ .post(builder.build())
+ .build();
+ Response response = okHttpClient.newCall(request).execute();
+ String json = response.body().string();
+ Gson gson = new Gson();
+ Result result = gson.fromJson(json, Result.class);
+ if (result.getCode()==0){
+ SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
+ editor.putString("name", name);
+ editor.apply();
+ Intent intent = new Intent(EditImformationActivity.this, SettingActivity.class);
+ startActivity(intent);
+ finish();
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(EditImformationActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
+ }
+ });
+ }else{
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(EditImformationActivity.this, "修改失败", Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(EditImformationActivity.this,"好像出问题了",Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+ }
+ }).start();
+ }else{
+ Toast.makeText(EditImformationActivity.this, "性别只能填男或女", Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+
+ }
+}
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/FeedbackActivity.java b/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/FeedbackActivity.java
new file mode 100644
index 0000000..cc58cf2
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/FeedbackActivity.java
@@ -0,0 +1,100 @@
+package com.hbue.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import com.google.gson.Gson;
+import com.hbue.entity.Result;
+
+import okhttp3.FormBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+
+/**
+ * 意见反馈页面
+ */
+public class FeedbackActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//取消标题栏
+ setContentView(R.layout.activity_feedback);
+
+ View back = findViewById(R.id.feedback_back);
+ back.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+// Intent intent = new Intent(FeedbackActivity.this, SettingActivity.class);
+// startActivity(intent);
+ FeedbackActivity.this.finish();
+ }
+ });
+
+ //获取提交按钮
+ View submit = findViewById(R.id.submit_feedback);
+ submit.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ //获取编辑框内容
+ EditText feedback_content = (EditText) findViewById(R.id.feedback_content);
+ String content = feedback_content.getText().toString();
+ //如果内容不为空则提交
+ if (content.length() != 0) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ OkHttpClient client = new OkHttpClient();
+ FormBody.Builder builder = new FormBody.Builder();
+ //从本地获取用户名
+ SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);
+ String username = preferences.getString("username", "");
+ builder.add("username", username);
+ builder.add("content", content);
+ //发送post请求
+ Request request = new Request.Builder()
+ .url("http://10.0.2.2:8080/mindcard/user/feedback")
+ .post(builder.build())
+ .build();
+ Response response = client.newCall(request).execute();
+ String json = response.body().string();
+ Gson gson = new Gson();
+ Result result = gson.fromJson(json, Result.class);
+ //跳转页面
+ Intent intent = new Intent(FeedbackActivity.this, SettingActivity.class);
+ startActivity(intent);
+ finish();
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(FeedbackActivity.this,result.getMsg(),Toast.LENGTH_SHORT).show();
+ }
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(FeedbackActivity.this,"好像出错了",Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+ }
+ }).start();
+ } else {
+ Toast.makeText(FeedbackActivity.this, "内容为空无法提交", Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+
+ }
+}
\ No newline at end of file
diff --git a/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/GuideActivity.java b/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/GuideActivity.java
new file mode 100644
index 0000000..7cf5326
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/GuideActivity.java
@@ -0,0 +1,166 @@
+package com.hbue.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.ImageView;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.viewpager.widget.PagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+import java.util.ArrayList;
+import java.util.List;
+
+/*
+ * 需求变更-引导页
+ */
+public class GuideActivity extends AppCompatActivity implements View.OnClickListener {
+
+ private ViewPager mViewPager;
+ //容器
+ private List mList = new ArrayList<>();
+ private View view1, view2, view3, view4;
+ //小圆点
+ private ImageView point1, point2, point3, point4;
+ //跳过
+ private Button btn_back;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //取消界面的标题栏
+ supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
+ setContentView(R.layout.activity_guide);
+ initView();
+ }
+
+ //初始化View
+ private void initView() {
+
+ point1 = (ImageView) findViewById(R.id.point1);
+ point2 = (ImageView) findViewById(R.id.point2);
+ point3 = (ImageView) findViewById(R.id.point3);
+ point4 = (ImageView) findViewById(R.id.point4);
+
+ btn_back = (Button) findViewById(R.id.btn_back);
+ btn_back.setOnClickListener(this);
+ //设置默认图片
+ setPointImg(true, false, false, false);
+ mViewPager = (ViewPager) findViewById(R.id.mViewPager);
+ view1 = View.inflate(this, R.layout.pager_item_one, null);
+ view2 = View.inflate(this, R.layout.pager_item_two, null);
+ view3 = View.inflate(this, R.layout.pager_item_three, null);
+ view4 = View.inflate(this, R.layout.pager_item_four, null);
+ view4.findViewById(R.id.btn_start).setOnClickListener(this);
+
+ mList.add(view1);
+ mList.add(view2);
+ mList.add(view3);
+ mList.add(view4);
+
+ //设置适配器
+ mViewPager.setAdapter(new GuideAdapter());
+
+ //监听ViewPager滑动
+ mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ //pager切换
+ @Override
+ public void onPageSelected(int position) {
+ switch (position) {
+ case 0:
+ setPointImg(true, false, false, false);
+ btn_back.setVisibility(View.VISIBLE);
+ break;
+ case 1:
+ setPointImg(false, true, false, false);
+ btn_back.setVisibility(View.VISIBLE);
+ break;
+ case 2:
+ setPointImg(false, false, true, false);
+ btn_back.setVisibility(View.VISIBLE);
+ break;
+ case 3:
+ setPointImg(false, false, false, true);
+ btn_back.setVisibility(View.GONE);
+ break;
+ }
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+ });
+
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btn_start:
+ case R.id.btn_back:
+ startActivity(new Intent(this, MenuActivity.class));
+ finish();
+ break;
+ }
+ }
+
+ class GuideAdapter extends PagerAdapter {
+
+ @Override
+ public int getCount() {
+ return mList.size();
+ }
+
+ @Override
+ public boolean isViewFromObject(View view, Object object) {
+ return view == object;
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ ((ViewPager) container).addView(mList.get(position));
+ return mList.get(position);
+ }
+
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ ((ViewPager) container).removeView(mList.get(position));
+ //super.destroyItem(container, position, object);
+ }
+ }
+
+ //设置小圆点的选中效果
+ private void setPointImg(boolean isCheck1, boolean isCheck2, boolean isCheck3, boolean isCheck4) {
+ if (isCheck1) {
+ point1.setBackgroundResource(R.drawable.point_on);
+ } else {
+ point1.setBackgroundResource(R.drawable.point_off);
+ }
+
+ if (isCheck2) {
+ point2.setBackgroundResource(R.drawable.point_on);
+ } else {
+ point2.setBackgroundResource(R.drawable.point_off);
+ }
+
+ if (isCheck3) {
+ point3.setBackgroundResource(R.drawable.point_on);
+ } else {
+ point3.setBackgroundResource(R.drawable.point_off);
+ }
+
+ if (isCheck4) {
+ point4.setBackgroundResource(R.drawable.point_on);
+ } else {
+ point4.setBackgroundResource(R.drawable.point_off);
+ }
+ }
+}
diff --git a/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/LoginActivity.java b/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/LoginActivity.java
new file mode 100644
index 0000000..f02c64c
--- /dev/null
+++ b/src/cyxgroup-foodmenu/app/src/main/java/com/hbue/activity/LoginActivity.java
@@ -0,0 +1,155 @@
+package com.hbue.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.hbue.entity.Result;
+
+import org.litepal.LitePal;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import okhttp3.FormBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+
+public class LoginActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //取消界面的标题栏
+ supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
+ setContentView(R.layout.activity_login);
+
+ //获取登录按钮对象
+ Button loginButton = (Button) findViewById(R.id.LoginButton);
+ loginButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ //获取文本框中的账号密码
+ EditText usernameEdit = (EditText) findViewById(R.id.UserNameEdit);
+ EditText passWordEdit = (EditText) findViewById(R.id.PassWordEdit);
+ String username = usernameEdit.getText().toString();
+ String password = passWordEdit.getText().toString();
+ OkHttpClient client = new OkHttpClient();
+ FormBody.Builder parms = new FormBody.Builder();
+ parms.add("username", username);
+ parms.add("password", password);
+ Request request = new Request.Builder()
+ .url("http://10.0.2.2:8080/mindcard/user/login")
+ .post(parms.build())
+ .build();
+ Response response = client.newCall(request).execute();
+ //使用gson将数据转换为result对象
+ String data = response.body().string();
+ Gson gson = new Gson();
+ Result result = gson.fromJson(data, Result.class);
+ if (result.getCode() == 0) {
+ //如果响应码为0,代表登录成功
+ Intent intent = new Intent(LoginActivity.this, GuideActivity.class);
+ //将登录状态改为true
+ SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
+ editor.putBoolean("isLogin", true);
+ editor.putString("username", username);
+ editor.apply();
+ startActivity(intent);
+ finish();
+ //从服务器端同步收藏
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ OkHttpClient okHttpClient = new OkHttpClient();
+ Request request1 = new Request.Builder()
+ .url("http://10.0.2.2:8080/mindcard/user/getCollected?username=" + username)
+ .build();
+ Response response1 = okHttpClient.newCall(request1).execute();
+ String json = response1.body().string();
+ Gson gson1 = new Gson();
+ Result result1 = gson1.fromJson(json, Result.class);
+ //List> data1 = (List>) result1.getData();
+ //System.out.println(data1);
+ Object obj = result1.getData();
+ List