├── .gitignore ├── .idea ├── .gitignore ├── .name ├── compiler.xml ├── gradle.xml ├── jarRepositories.xml ├── misc.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── app │ │ └── android │ │ └── homestay │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── province.json │ ├── java │ │ └── com │ │ │ └── app │ │ │ └── android │ │ │ └── homestay │ │ │ ├── AdminMainActivity.java │ │ │ ├── App.java │ │ │ ├── Config.java │ │ │ ├── GlideEngine.java │ │ │ ├── UserMainActivity.java │ │ │ ├── activity │ │ │ ├── AdminAddHouseActivity.java │ │ │ ├── AdminFeedBookActivity.java │ │ │ ├── AdminHouseListActivity.java │ │ │ ├── AdminLoginActivity.java │ │ │ ├── AdminOrderListActivity.java │ │ │ ├── AdminUpdateHouseActivity.java │ │ │ ├── AdminUserListActivity.java │ │ │ ├── PayDialogActivity.java │ │ │ ├── RegisterActivity.java │ │ │ ├── UserEditInfoActivity.java │ │ │ ├── UserFeedBackActivity.java │ │ │ ├── UserLoginActivity.java │ │ │ ├── UserPayOrderActivity.java │ │ │ └── UserUpdatePwdActivity.java │ │ │ ├── adapter │ │ │ ├── AdminFeedBackAdapter.java │ │ │ ├── AdminHouseListAdapter.java │ │ │ ├── AdminOrderListAdapter.java │ │ │ ├── AdminUserListAdapter.java │ │ │ ├── CollectionAdapter.java │ │ │ ├── HomeAdapter.java │ │ │ ├── PayListAdapter.java │ │ │ └── UserOrderAdapter.java │ │ │ ├── base │ │ │ ├── BaseActivity.java │ │ │ └── BaseFragment.java │ │ │ ├── bean │ │ │ ├── CollectionBean.java │ │ │ ├── CollectionInfo.java │ │ │ ├── FeedBackInfo.java │ │ │ ├── FeedBackInfoBean.java │ │ │ ├── HouseBean.java │ │ │ ├── HouseInfo.java │ │ │ ├── JsonBean.java │ │ │ ├── OderInfoBean.java │ │ │ ├── OrderInfo.java │ │ │ ├── UserBean.java │ │ │ └── UserInfo.java │ │ │ ├── fragment │ │ │ ├── CenterFragment.java │ │ │ ├── HomeFragment.java │ │ │ ├── LikeFragment.java │ │ │ └── OrderFragment.java │ │ │ ├── http │ │ │ └── HttpStringCallback.java │ │ │ ├── utils │ │ │ ├── CodeUtils.java │ │ │ ├── GetJsonDataUtil.java │ │ │ ├── GsonUtils.java │ │ │ └── Utils.java │ │ │ └── view │ │ │ ├── FloatingActionButtonMenu.java │ │ │ └── ScrollAwareFABMenuBehavior.java │ └── res │ │ ├── anim │ │ ├── hide_to_bottom.xml │ │ └── show_from_bottom.xml │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── btn_bg.xml │ │ ├── btn_yuding.xml │ │ ├── et_bg.xml │ │ ├── ic_launcher_background.xml │ │ └── label_bg.xml │ │ ├── layout │ │ ├── activity_admin_add_house.xml │ │ ├── activity_admin_feed_book.xml │ │ ├── activity_admin_house.xml │ │ ├── activity_admin_house_list.xml │ │ ├── activity_admin_main.xml │ │ ├── activity_admin_update_house.xml │ │ ├── activity_administrator_login.xml │ │ ├── activity_house_list.xml │ │ ├── activity_order_list.xml │ │ ├── activity_pay_dialog.xml │ │ ├── activity_register.xml │ │ ├── activity_user_edit_info.xml │ │ ├── activity_user_feed_back.xml │ │ ├── activity_user_list.xml │ │ ├── activity_user_login.xml │ │ ├── activity_user_main.xml │ │ ├── activity_user_order.xml │ │ ├── activity_user_update_pwd.xml │ │ ├── admin_feed_item.xml │ │ ├── admin_house_item.xml │ │ ├── admin_order_item.xml │ │ ├── admin_user_list_item.xml │ │ ├── collection_item.xml │ │ ├── fragment_center.xml │ │ ├── fragment_home.xml │ │ ├── fragment_like.xml │ │ ├── fragment_order.xml │ │ ├── home_item.xml │ │ ├── order_item.xml │ │ └── pay_item.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── back.png │ │ ├── ic_home.png │ │ ├── ic_home_normal.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_round.png │ │ ├── ic_like.png │ │ ├── ic_like_normal.png │ │ ├── ic_mine.png │ │ ├── ic_mine_normal.png │ │ ├── ic_order.png │ │ ├── ic_order_normal.png │ │ ├── img_1.png │ │ ├── img_jiantou_1.png │ │ ├── img_jiantou_2.png │ │ ├── img_jiantou_3.png │ │ ├── img_more.png │ │ ├── img_push_normal.png │ │ ├── img_pwd.png │ │ ├── img_scan.png │ │ ├── img_user.png │ │ ├── like.png │ │ ├── logo.png │ │ └── u_like.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── values │ │ ├── array.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── themes.xml │ │ └── xml │ │ └── network_security_config.xml │ └── test │ └── java │ └── com │ └── app │ └── android │ └── homestay │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | Android-SpringBoot-homestay -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | 34 | 35 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### 项目介绍和功能截图 2 | 3 | https://blog.csdn.net/jky_yihuangxing/article/details/121417409?spm=1001.2014.3001.5502 4 | 5 | #### 联系方式+V:android0514 -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | compileSdkVersion 30 7 | buildToolsVersion '30.0.3' 8 | 9 | defaultConfig { 10 | applicationId "com.app.android.homestay" 11 | minSdkVersion 21 12 | targetSdkVersion 31 13 | versionCode 1 14 | versionName "1.0" 15 | 16 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 17 | } 18 | 19 | buildTypes { 20 | release { 21 | minifyEnabled false 22 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 23 | } 24 | } 25 | compileOptions { 26 | sourceCompatibility JavaVersion.VERSION_1_8 27 | targetCompatibility JavaVersion.VERSION_1_8 28 | } 29 | } 30 | 31 | dependencies { 32 | 33 | implementation 'androidx.appcompat:appcompat:1.2.0' 34 | implementation 'com.google.android.material:material:1.2.1' 35 | implementation 'androidx.constraintlayout:constraintlayout:2.0.1' 36 | implementation 'androidx.legacy:legacy-support-v4:1.0.0' 37 | testImplementation 'junit:junit:4.+' 38 | androidTestImplementation 'androidx.test.ext:junit:1.1.2' 39 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 40 | 41 | implementation 'com.lzy.net:okgo:3.0.4' 42 | implementation 'io.github.lucksiege:pictureselector:v2.7.3-rc05' 43 | implementation 'com.github.bumptech.glide:glide:4.12.0' 44 | annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' 45 | implementation 'com.google.code.gson:gson:2.8.7' 46 | implementation 'de.hdodenhof:circleimageview:3.1.0' 47 | implementation 'com.github.lygttpod:SuperTextView:2.4.6' 48 | implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4' 49 | 50 | implementation 'de.hdodenhof:circleimageview:3.1.0' 51 | implementation 'com.ashokvarma.android:bottom-navigation-bar:2.2.0' 52 | 53 | implementation 'com.contrarywind:Android-PickerView:4.1.9' 54 | 55 | implementation 'com.github.Othershe:CornerLabelView:1.0.0' 56 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/androidTest/java/com/app/android/homestay/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.app.android.homestay", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 20 | 23 | 24 | 27 | 28 | 29 | 30 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/AdminMainActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay; 2 | 3 | import android.content.Intent; 4 | import android.view.View; 5 | 6 | import com.app.android.homestay.activity.AdminHouseListActivity; 7 | import com.app.android.homestay.activity.AdminFeedBookActivity; 8 | import com.app.android.homestay.activity.AdminOrderListActivity; 9 | import com.app.android.homestay.activity.AdminUserListActivity; 10 | import com.app.android.homestay.base.BaseActivity; 11 | 12 | public class AdminMainActivity extends BaseActivity { 13 | 14 | @Override 15 | protected int getLayoutId() { 16 | return R.layout.activity_admin_main; 17 | } 18 | 19 | @Override 20 | protected void initView() { 21 | 22 | 23 | } 24 | 25 | @Override 26 | protected void setListener() { 27 | findViewById(R.id.float1).setOnClickListener(new View.OnClickListener() { 28 | @Override 29 | public void onClick(View v) { 30 | // startActivity(new Intent(mActivity, HouseListActivity.class)); 31 | startActivity(new Intent(mActivity, AdminHouseListActivity.class)); 32 | } 33 | }); 34 | 35 | findViewById(R.id.float2).setOnClickListener(new View.OnClickListener() { 36 | @Override 37 | public void onClick(View v) { 38 | startActivity(new Intent(mActivity, AdminOrderListActivity.class)); 39 | } 40 | }); 41 | 42 | findViewById(R.id.float3).setOnClickListener(new View.OnClickListener() { 43 | @Override 44 | public void onClick(View v) { 45 | startActivity(new Intent(mActivity, AdminFeedBookActivity.class)); 46 | } 47 | }); 48 | 49 | findViewById(R.id.float4).setOnClickListener(new View.OnClickListener() { 50 | @Override 51 | public void onClick(View v) { 52 | 53 | 54 | startActivity(new Intent(mActivity, AdminUserListActivity.class)); 55 | } 56 | }); 57 | 58 | } 59 | 60 | @Override 61 | protected void initData() { 62 | 63 | } 64 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/App.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay; 2 | 3 | import android.app.Application; 4 | 5 | import com.lzy.okgo.OkGo; 6 | import com.lzy.okgo.cache.CacheEntity; 7 | import com.lzy.okgo.cache.CacheMode; 8 | import com.lzy.okgo.interceptor.HttpLoggingInterceptor; 9 | 10 | import java.util.concurrent.TimeUnit; 11 | import java.util.logging.Level; 12 | 13 | import okhttp3.OkHttpClient; 14 | 15 | 16 | 17 | public class App extends Application { 18 | @Override 19 | public void onCreate() { 20 | super.onCreate(); 21 | initHttp(); 22 | } 23 | 24 | private void initHttp() { 25 | OkHttpClient.Builder builder = new OkHttpClient.Builder(); 26 | HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("okgo"); 27 | //log打印级别,决定了log显示的详细程度 28 | loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY); 29 | //log颜色级别,决定了log在控制台显示的颜色 30 | loggingInterceptor.setColorLevel(Level.INFO); 31 | builder.addInterceptor(loggingInterceptor); 32 | 33 | //全局的读取超时时间 34 | builder.readTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); 35 | //全局的写入超时时间 36 | builder.writeTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); 37 | //全局的连接超时时间 38 | builder.connectTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); 39 | 40 | OkGo.getInstance().init(this) //必须调用初始化 41 | .setOkHttpClient(builder.build()) //建议设置OkHttpClient,不设置将使用默认的 42 | .setCacheMode(CacheMode.NO_CACHE) //全局统一缓存模式,默认不使用缓存,可以不传 43 | .setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) //全局统一缓存时间,默认永不过期,可以不传 44 | .setRetryCount(0); //全局统一超时重连次数,默认为三次,那么最差的情况会请求4次(一次原始请求,三次重连请求),不需要可以设置为0 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/Config.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay; 2 | 3 | 4 | import com.app.android.homestay.bean.UserInfo; 5 | 6 | public class Config { 7 | 8 | public final static String BASE_URL = "http://192.168.14.13:8080"; 9 | 10 | public static UserInfo sUserInfo; 11 | 12 | public static UserInfo getUserInfo() { 13 | return sUserInfo; 14 | } 15 | 16 | public static void setUserInfo(UserInfo userInfo) { 17 | sUserInfo = userInfo; 18 | } 19 | 20 | //注册 21 | public final static String REGISTER_URL = BASE_URL + "/user/register"; 22 | 23 | //登录 24 | public final static String LOGIN_URL = BASE_URL + "/user/login"; 25 | 26 | //添加商品 27 | public final static String HOUSE_ADD_URL = BASE_URL + "/house/add"; 28 | 29 | //查询房子列表 30 | public final static String HOUSE_LIST_URL = BASE_URL + "/house/houseAll"; 31 | 32 | //删除房子信息 33 | public final static String DEL_HOUSE_URL = BASE_URL + "/house/del"; 34 | 35 | //修改房子信息 36 | public final static String HOUSE_UPDATE_URL = BASE_URL + "/house/update"; 37 | 38 | //添加到订单 39 | public final static String ADD_ORDER_URL = BASE_URL + "/order/add"; 40 | 41 | 42 | //查询订单 43 | public final static String QUERY_ORDER_URL = BASE_URL + "/order/query"; 44 | 45 | 46 | //查询注册用户 47 | public final static String REGISTER_USER_URL = BASE_URL + "/user/query"; 48 | 49 | 50 | //修改密码 51 | public final static String UPDATE_PWD_URL = BASE_URL + "/user/pwd"; 52 | 53 | 54 | //删除订单 55 | public final static String ORDER_DEL_URL = BASE_URL + "/order/del"; 56 | 57 | 58 | //收藏 59 | public final static String COLLECTION_URL = BASE_URL + "/collection/add"; 60 | 61 | 62 | //收藏列表 63 | public final static String COLLECTION_LIST_URL = BASE_URL + "/collection/query"; 64 | 65 | 66 | //取消收藏 67 | public final static String CANCEL_COLLECTION_URL = BASE_URL + "/collection/del"; 68 | 69 | 70 | //修改用户信息 71 | public final static String EDIT_USER_URL = BASE_URL + "/user/edit"; 72 | 73 | //支付 74 | public final static String PAY_URL = BASE_URL + "/order/pay"; 75 | 76 | 77 | //意见反馈 78 | public final static String FEED_ADD_URL = BASE_URL + "/feed/add"; 79 | 80 | 81 | //查询意见反馈 82 | public final static String FEED_QUERY_URL = BASE_URL + "/feed/query"; 83 | 84 | 85 | } 86 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/UserMainActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay; 2 | 3 | import androidx.core.content.ContextCompat; 4 | import androidx.fragment.app.FragmentTransaction; 5 | 6 | import com.app.android.homestay.base.BaseActivity; 7 | import com.app.android.homestay.fragment.CenterFragment; 8 | import com.app.android.homestay.fragment.HomeFragment; 9 | import com.app.android.homestay.fragment.LikeFragment; 10 | import com.app.android.homestay.fragment.OrderFragment; 11 | import com.ashokvarma.bottomnavigation.BottomNavigationBar; 12 | import com.ashokvarma.bottomnavigation.BottomNavigationItem; 13 | 14 | public class UserMainActivity extends BaseActivity implements BottomNavigationBar.OnTabSelectedListener { 15 | 16 | private HomeFragment mHomeFragment; 17 | private LikeFragment mLikeFragment; 18 | private OrderFragment mOrderFragment; 19 | private CenterFragment mCenterFragment; 20 | 21 | private BottomNavigationBar mBottomNavigationBar; 22 | 23 | @Override 24 | protected int getLayoutId() { 25 | return R.layout.activity_user_main; 26 | } 27 | 28 | @Override 29 | protected void initView() { 30 | 31 | mBottomNavigationBar = findViewById(R.id.bottom_navigation_bar); 32 | mBottomNavigationBar.setTabSelectedListener(this) 33 | .setMode(BottomNavigationBar.MODE_FIXED) 34 | .setActiveColor("#03A9F4") //选中颜色 35 | .setInActiveColor("#707070") //未选中颜色 36 | .setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC) 37 | .setBarBackgroundColor("#ffffff");//导航栏背景色 38 | 39 | 40 | mBottomNavigationBar 41 | .addItem(new BottomNavigationItem(R.mipmap.ic_home, "民宿").setInactiveIcon(ContextCompat.getDrawable(this, R.mipmap.ic_home_normal))) 42 | .addItem(new BottomNavigationItem(R.mipmap.ic_like, "收藏").setInactiveIcon(ContextCompat.getDrawable(this, R.mipmap.ic_like_normal))) 43 | .addItem(new BottomNavigationItem(R.mipmap.ic_order, "订单").setInactiveIcon(ContextCompat.getDrawable(this, R.mipmap.ic_order_normal))) 44 | .addItem(new BottomNavigationItem(R.mipmap.ic_mine, "我的").setInactiveIcon(ContextCompat.getDrawable(this, R.mipmap.ic_mine_normal))) 45 | .setFirstSelectedPosition(0) 46 | .initialise(); 47 | } 48 | 49 | @Override 50 | protected void setListener() { 51 | 52 | } 53 | 54 | @Override 55 | protected void initData() { 56 | selectedFragment(0); 57 | 58 | } 59 | 60 | private void selectedFragment(int position) { 61 | FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 62 | hideFragment(fragmentTransaction); 63 | if (position == 0) { 64 | if (mHomeFragment == null) { 65 | mHomeFragment = new HomeFragment(); 66 | fragmentTransaction.add(R.id.content, mHomeFragment); 67 | } else { 68 | fragmentTransaction.show(mHomeFragment); 69 | } 70 | } else if (position == 1) { 71 | if (mLikeFragment == null) { 72 | mLikeFragment = new LikeFragment(); 73 | fragmentTransaction.add(R.id.content, mLikeFragment); 74 | } else { 75 | fragmentTransaction.show(mLikeFragment); 76 | mLikeFragment.initData(); 77 | } 78 | } else if (position == 2) { 79 | if (mOrderFragment == null) { 80 | mOrderFragment = new OrderFragment(); 81 | fragmentTransaction.add(R.id.content, mOrderFragment); 82 | } else { 83 | fragmentTransaction.show(mOrderFragment); 84 | mOrderFragment.initData(); 85 | } 86 | } else { 87 | if (mCenterFragment == null) { 88 | mCenterFragment = new CenterFragment(); 89 | fragmentTransaction.add(R.id.content, mCenterFragment); 90 | } else { 91 | fragmentTransaction.show(mCenterFragment); 92 | } 93 | } 94 | 95 | fragmentTransaction.commit(); 96 | } 97 | 98 | private void hideFragment(FragmentTransaction beginTransaction) { 99 | if (null != mHomeFragment) { 100 | beginTransaction.hide(mHomeFragment); 101 | } 102 | 103 | if (null != mCenterFragment) { 104 | beginTransaction.hide(mCenterFragment); 105 | } 106 | if (null != mLikeFragment) { 107 | beginTransaction.hide(mLikeFragment); 108 | } 109 | if (null != mOrderFragment) { 110 | beginTransaction.hide(mOrderFragment); 111 | } 112 | } 113 | 114 | @Override 115 | public void onTabSelected(int position) { 116 | selectedFragment(position); 117 | } 118 | 119 | @Override 120 | public void onTabUnselected(int position) { 121 | 122 | } 123 | 124 | @Override 125 | public void onTabReselected(int position) { 126 | 127 | } 128 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/AdminFeedBookActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.app.android.homestay.Config; 6 | import com.app.android.homestay.R; 7 | import com.app.android.homestay.adapter.AdminFeedBackAdapter; 8 | import com.app.android.homestay.base.BaseActivity; 9 | import com.app.android.homestay.bean.FeedBackInfoBean; 10 | import com.app.android.homestay.http.HttpStringCallback; 11 | import com.app.android.homestay.utils.GsonUtils; 12 | import com.lzy.okgo.OkGo; 13 | 14 | /** 15 | * 用户反馈 16 | */ 17 | public class AdminFeedBookActivity extends BaseActivity { 18 | 19 | private AdminFeedBackAdapter mAdminFeedBackAdapter; 20 | 21 | private RecyclerView recyclerview; 22 | 23 | private String username; 24 | 25 | 26 | @Override 27 | protected int getLayoutId() { 28 | return R.layout.activity_admin_feed_book; 29 | } 30 | 31 | @Override 32 | protected void initView() { 33 | recyclerview = findViewById(R.id.recyclerview); 34 | 35 | 36 | mAdminFeedBackAdapter = new AdminFeedBackAdapter(); 37 | recyclerview.setAdapter(mAdminFeedBackAdapter); 38 | 39 | } 40 | 41 | @Override 42 | protected void setListener() { 43 | 44 | } 45 | 46 | @Override 47 | protected void initData() { 48 | username = getIntent().getStringExtra("username"); 49 | queryAll(username); 50 | } 51 | 52 | private void queryAll(String username) { 53 | OkGo.post(Config.FEED_QUERY_URL) 54 | .params("username", username) 55 | .execute(new HttpStringCallback(this) { 56 | @Override 57 | protected void onSuccess(String msg, String response) { 58 | FeedBackInfoBean feedBackInfoBean = GsonUtils.parseJson(response, FeedBackInfoBean.class); 59 | mAdminFeedBackAdapter.setNewInstance(feedBackInfoBean.getList()); 60 | 61 | } 62 | 63 | @Override 64 | protected void onError(String response) { 65 | BaseToast(response); 66 | } 67 | }); 68 | 69 | } 70 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/AdminHouseListActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | 4 | import android.app.AlertDialog; 5 | import android.content.DialogInterface; 6 | import android.content.Intent; 7 | import android.view.View; 8 | import android.widget.TextView; 9 | 10 | import androidx.annotation.NonNull; 11 | import androidx.annotation.Nullable; 12 | import androidx.recyclerview.widget.RecyclerView; 13 | 14 | import com.app.android.homestay.Config; 15 | import com.app.android.homestay.R; 16 | import com.app.android.homestay.adapter.AdminHouseListAdapter; 17 | import com.app.android.homestay.base.BaseActivity; 18 | import com.app.android.homestay.bean.HouseBean; 19 | import com.app.android.homestay.bean.HouseInfo; 20 | import com.app.android.homestay.http.HttpStringCallback; 21 | import com.app.android.homestay.utils.GsonUtils; 22 | import com.chad.library.adapter.base.BaseQuickAdapter; 23 | import com.chad.library.adapter.base.listener.OnItemClickListener; 24 | import com.chad.library.adapter.base.listener.OnItemLongClickListener; 25 | import com.lzy.okgo.OkGo; 26 | 27 | import org.jetbrains.annotations.NotNull; 28 | 29 | import java.util.ArrayList; 30 | import java.util.List; 31 | 32 | /** 33 | * 房间管理 34 | */ 35 | public class AdminHouseListActivity extends BaseActivity { 36 | private AdminHouseListAdapter mAdminHouseListAdapter; 37 | private List mStringList = new ArrayList<>(); 38 | private RecyclerView mRecyclerView; 39 | private TextView add; 40 | 41 | @Override 42 | protected int getLayoutId() { 43 | return R.layout.activity_admin_house_list; 44 | } 45 | 46 | @Override 47 | protected void initView() { 48 | mRecyclerView = findViewById(R.id.recyclerview); 49 | add = findViewById(R.id.add); 50 | 51 | } 52 | 53 | @Override 54 | protected void setListener() { 55 | add.setOnClickListener(new View.OnClickListener() { 56 | @Override 57 | public void onClick(View v) { 58 | startActivityForResult(new Intent(AdminHouseListActivity.this, AdminAddHouseActivity.class), 200); 59 | } 60 | }); 61 | 62 | 63 | } 64 | 65 | @Override 66 | protected void initData() { 67 | 68 | mAdminHouseListAdapter = new AdminHouseListAdapter(); 69 | mAdminHouseListAdapter.setOnItemClickListener(new OnItemClickListener() { 70 | @Override 71 | public void onItemClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) { 72 | HouseInfo info = mAdminHouseListAdapter.getData().get(position); 73 | Intent intent = new Intent(AdminHouseListActivity.this, AdminUpdateHouseActivity.class); 74 | intent.putExtra("info", info); 75 | startActivityForResult(intent, 200); 76 | } 77 | }); 78 | mAdminHouseListAdapter.setOnItemLongClickListener(new OnItemLongClickListener() { 79 | @Override 80 | public boolean onItemLongClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) { 81 | AlertDialog.Builder builder = new AlertDialog.Builder(AdminHouseListActivity.this); 82 | builder.setTitle("确定要删除吗?"); 83 | builder.setMessage("删除之后需要重新上架,谨慎操作"); 84 | builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 85 | @Override 86 | public void onClick(DialogInterface dialog, int which) { 87 | HouseInfo info = mAdminHouseListAdapter.getData().get(position); 88 | del(info.getUid(), position); 89 | } 90 | }); 91 | builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 92 | @Override 93 | public void onClick(DialogInterface dialog, int which) { 94 | } 95 | }); 96 | builder.show(); 97 | 98 | 99 | return true; 100 | } 101 | }); 102 | 103 | mAdminHouseListAdapter.setNewInstance(mStringList); 104 | mRecyclerView.setAdapter(mAdminHouseListAdapter); 105 | 106 | 107 | hostAll(); 108 | } 109 | 110 | @Override 111 | protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 112 | super.onActivityResult(requestCode, resultCode, data); 113 | if (resultCode == 200) { 114 | hostAll(); 115 | } 116 | } 117 | 118 | 119 | private void hostAll() { 120 | OkGo.get(Config.HOUSE_LIST_URL) 121 | .execute(new HttpStringCallback(this) { 122 | @Override 123 | protected void onSuccess(String msg, String response) { 124 | 125 | HouseBean houseBean = GsonUtils.parseJson(response, HouseBean.class); 126 | mAdminHouseListAdapter.setNewInstance(houseBean.getList()); 127 | 128 | } 129 | 130 | @Override 131 | protected void onError(String response) { 132 | 133 | } 134 | }); 135 | 136 | 137 | } 138 | 139 | private void del(int uid, int position) { 140 | 141 | OkGo.get(Config.DEL_HOUSE_URL) 142 | .params("uid", uid) 143 | .execute(new HttpStringCallback(null) { 144 | @Override 145 | protected void onSuccess(String msg, String response) { 146 | 147 | mAdminHouseListAdapter.removeAt(position); 148 | BaseToast(msg); 149 | } 150 | 151 | @Override 152 | protected void onError(String response) { 153 | 154 | } 155 | }); 156 | } 157 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/AdminLoginActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import android.content.Intent; 4 | import android.text.TextUtils; 5 | import android.view.View; 6 | import android.widget.EditText; 7 | 8 | import com.app.android.homestay.AdminMainActivity; 9 | import com.app.android.homestay.Config; 10 | import com.app.android.homestay.R; 11 | import com.app.android.homestay.base.BaseActivity; 12 | import com.app.android.homestay.bean.UserInfo; 13 | import com.app.android.homestay.http.HttpStringCallback; 14 | import com.app.android.homestay.utils.GsonUtils; 15 | import com.lzy.okgo.OkGo; 16 | 17 | /** 18 | * 管理员登录页 19 | */ 20 | public class AdminLoginActivity extends BaseActivity { 21 | private EditText username, password; 22 | 23 | @Override 24 | protected int getLayoutId() { 25 | return R.layout.activity_administrator_login; 26 | } 27 | 28 | @Override 29 | protected void initView() { 30 | username = findViewById(R.id.username); 31 | password = findViewById(R.id.password); 32 | 33 | } 34 | 35 | @Override 36 | protected void setListener() { 37 | 38 | findViewById(R.id.change).setOnClickListener(new View.OnClickListener() { 39 | @Override 40 | public void onClick(View v) { 41 | startActivity(new Intent(mActivity, UserLoginActivity.class)); 42 | } 43 | }); 44 | 45 | 46 | findViewById(R.id.register).setOnClickListener(new View.OnClickListener() { 47 | @Override 48 | public void onClick(View v) { 49 | Intent intent = new Intent(mActivity, RegisterActivity.class); 50 | intent.putExtra("title", "管理员注册"); 51 | startActivity(intent); 52 | } 53 | }); 54 | 55 | 56 | findViewById(R.id.login).setOnClickListener(new View.OnClickListener() { 57 | @Override 58 | public void onClick(View v) { 59 | 60 | String name = username.getText().toString().trim(); 61 | String pwd = password.getText().toString().trim(); 62 | if (TextUtils.isEmpty(name)) { 63 | BaseToast("请输入用户名"); 64 | } else if (TextUtils.isEmpty(pwd)) { 65 | BaseToast("请输入密码"); 66 | } else { 67 | login(name, pwd); 68 | } 69 | 70 | } 71 | }); 72 | } 73 | 74 | @Override 75 | protected void initData() { 76 | 77 | } 78 | 79 | private void login(String username, String pwd) { 80 | OkGo.get(Config.LOGIN_URL) 81 | .params("username", username) 82 | .params("password", pwd) 83 | .params("identity", 1) 84 | .execute(new HttpStringCallback(mActivity) { 85 | @Override 86 | protected void onSuccess(String msg, String response) { 87 | UserInfo userInfo = GsonUtils.parseJson(response, UserInfo.class); 88 | Config.setUserInfo(userInfo); 89 | startActivity(new Intent(mActivity, AdminMainActivity.class)); 90 | BaseToast(msg); 91 | 92 | } 93 | 94 | @Override 95 | protected void onError(String response) { 96 | BaseToast(response); 97 | } 98 | }); 99 | } 100 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/AdminOrderListActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.app.android.homestay.Config; 6 | import com.app.android.homestay.R; 7 | import com.app.android.homestay.adapter.AdminOrderListAdapter; 8 | import com.app.android.homestay.base.BaseActivity; 9 | import com.app.android.homestay.bean.OderInfoBean; 10 | import com.app.android.homestay.http.HttpStringCallback; 11 | import com.app.android.homestay.utils.GsonUtils; 12 | import com.lzy.okgo.OkGo; 13 | 14 | public class AdminOrderListActivity extends BaseActivity { 15 | 16 | private RecyclerView recyclerview; 17 | private AdminOrderListAdapter mListAdapter; 18 | 19 | 20 | @Override 21 | protected int getLayoutId() { 22 | return R.layout.activity_order_list; 23 | } 24 | 25 | @Override 26 | protected void initView() { 27 | recyclerview = findViewById(R.id.recyclerview); 28 | 29 | mListAdapter = new AdminOrderListAdapter(); 30 | 31 | recyclerview.setAdapter(mListAdapter); 32 | 33 | } 34 | 35 | @Override 36 | protected void setListener() { 37 | 38 | } 39 | 40 | @Override 41 | protected void initData() { 42 | queryOrderAll(); 43 | } 44 | 45 | private void queryOrderAll() { 46 | OkGo.post(Config.QUERY_ORDER_URL) 47 | .execute(new HttpStringCallback(this) { 48 | @Override 49 | protected void onSuccess(String msg, String response) { 50 | 51 | OderInfoBean infoBean = GsonUtils.parseJson(response, OderInfoBean.class); 52 | mListAdapter.setNewInstance(infoBean.getList()); 53 | 54 | } 55 | 56 | @Override 57 | protected void onError(String response) { 58 | BaseToast(response); 59 | 60 | } 61 | }); 62 | 63 | } 64 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/AdminUserListActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.app.android.homestay.Config; 6 | import com.app.android.homestay.R; 7 | import com.app.android.homestay.adapter.AdminUserListAdapter; 8 | import com.app.android.homestay.base.BaseActivity; 9 | import com.app.android.homestay.bean.UserBean; 10 | import com.app.android.homestay.http.HttpStringCallback; 11 | import com.app.android.homestay.utils.GsonUtils; 12 | import com.lzy.okgo.OkGo; 13 | 14 | import java.util.ArrayList; 15 | import java.util.List; 16 | 17 | /** 18 | * 用户管理 19 | */ 20 | public class AdminUserListActivity extends BaseActivity { 21 | private AdminUserListAdapter mListAdapter; 22 | private RecyclerView mRecyclerView; 23 | 24 | @Override 25 | protected int getLayoutId() { 26 | return R.layout.activity_user_list; 27 | } 28 | 29 | @Override 30 | protected void initView() { 31 | mRecyclerView = findViewById(R.id.recyclerview); 32 | mListAdapter = new AdminUserListAdapter(); 33 | 34 | mRecyclerView.setAdapter(mListAdapter); 35 | 36 | } 37 | 38 | @Override 39 | protected void setListener() { 40 | 41 | } 42 | 43 | @Override 44 | protected void initData() { 45 | queryUserList(); 46 | 47 | } 48 | 49 | private void queryUserList() { 50 | 51 | OkGo.get(Config.REGISTER_USER_URL) 52 | .execute(new HttpStringCallback(this) { 53 | @Override 54 | protected void onSuccess(String msg, String response) { 55 | 56 | UserBean userBean = GsonUtils.parseJson(response, UserBean.class); 57 | mListAdapter.setNewInstance(userBean.getList()); 58 | } 59 | 60 | @Override 61 | protected void onError(String response) { 62 | BaseToast(response); 63 | } 64 | }); 65 | } 66 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/PayDialogActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | 5 | import android.os.Bundle; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | 9 | import com.app.android.homestay.Config; 10 | import com.app.android.homestay.R; 11 | import com.app.android.homestay.base.BaseActivity; 12 | import com.app.android.homestay.http.HttpStringCallback; 13 | import com.lzy.okgo.OkGo; 14 | 15 | public class PayDialogActivity extends BaseActivity { 16 | private String discount_price; 17 | private TextView discountprice; 18 | private int uid; 19 | 20 | @Override 21 | protected int getLayoutId() { 22 | return R.layout.activity_pay_dialog; 23 | } 24 | 25 | @Override 26 | protected void initView() { 27 | findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { 28 | @Override 29 | public void onClick(View v) { 30 | finish(); 31 | } 32 | }); 33 | 34 | findViewById(R.id.confirm_button).setOnClickListener(new View.OnClickListener() { 35 | @Override 36 | public void onClick(View v) { 37 | pay(); 38 | } 39 | }); 40 | 41 | discountprice = findViewById(R.id.discount_price); 42 | 43 | } 44 | 45 | @Override 46 | protected void setListener() { 47 | 48 | } 49 | 50 | @Override 51 | protected void initData() { 52 | discount_price = getIntent().getStringExtra("discount_price"); 53 | uid = getIntent().getIntExtra("uid", 0); 54 | discountprice.setText("¥" + discount_price); 55 | 56 | } 57 | 58 | 59 | private void pay() { 60 | OkGo.get(Config.PAY_URL) 61 | .params("uid", uid) 62 | .params("pay_status", 1) 63 | .execute(new HttpStringCallback(null) { 64 | @Override 65 | protected void onSuccess(String msg, String response) { 66 | BaseToast(msg); 67 | setResult(2000); 68 | finish(); 69 | } 70 | 71 | @Override 72 | protected void onError(String response) { 73 | BaseToast(response); 74 | } 75 | }); 76 | } 77 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/RegisterActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import android.text.TextUtils; 4 | import android.view.View; 5 | import android.widget.EditText; 6 | import android.widget.ImageView; 7 | 8 | import com.app.android.homestay.Config; 9 | import com.app.android.homestay.R; 10 | import com.app.android.homestay.base.BaseActivity; 11 | import com.app.android.homestay.http.HttpStringCallback; 12 | import com.app.android.homestay.utils.CodeUtils; 13 | import com.lzy.okgo.OkGo; 14 | 15 | public class RegisterActivity extends BaseActivity { 16 | private String title; 17 | private ImageView ivcode; 18 | private EditText username, password, confirmpwd, mobile, email, et_code; 19 | private String codeStr; 20 | 21 | private int identity = 0; //0普通用户 1管理员 22 | 23 | @Override 24 | protected int getLayoutId() { 25 | return R.layout.activity_register; 26 | } 27 | 28 | @Override 29 | protected void initView() { 30 | ivcode = findViewById(R.id.iv_code); 31 | ivcode.setImageBitmap(CodeUtils.getInstance().createBitmap()); 32 | codeStr = CodeUtils.getInstance().getCode(); 33 | 34 | // 35 | username = findViewById(R.id.username); 36 | password = findViewById(R.id.password); 37 | confirmpwd = findViewById(R.id.confirmpwd); 38 | mobile = findViewById(R.id.mobile); 39 | email = findViewById(R.id.email); 40 | et_code = findViewById(R.id.et_code); 41 | 42 | } 43 | 44 | @Override 45 | protected void setListener() { 46 | findViewById(R.id.register).setOnClickListener(new View.OnClickListener() { 47 | @Override 48 | public void onClick(View v) { 49 | 50 | String name = username.getText().toString().trim(); 51 | String pwd = password.getText().toString().trim(); 52 | String newpwd = confirmpwd.getText().toString().trim(); 53 | String phone = mobile.getText().toString().trim(); 54 | String emailStr = email.getText().toString().trim(); 55 | String code = et_code.getText().toString().trim(); 56 | 57 | if (TextUtils.isEmpty(name)) { 58 | BaseToast("请输入用户名"); 59 | } else if (TextUtils.isEmpty(pwd)) { 60 | BaseToast("请输入密码"); 61 | } else if (TextUtils.isEmpty(newpwd)) { 62 | BaseToast("请输入确定密码"); 63 | } else if (!pwd.equals(newpwd)) { 64 | BaseToast("两次密码不一致"); 65 | } else if (TextUtils.isEmpty(phone)) { 66 | BaseToast("请输入手机号"); 67 | } else if (TextUtils.isEmpty(emailStr)) { 68 | BaseToast("请输入邮箱地址"); 69 | } else if (TextUtils.isEmpty(code)) { 70 | BaseToast("请输入验证码"); 71 | } else if (!codeStr.equals(code)) { 72 | BaseToast("验证码输入错误"); 73 | } else { 74 | register(name, pwd, phone, emailStr, identity, "这个家伙很懒,什么都没有留下~"); 75 | } 76 | } 77 | }); 78 | 79 | } 80 | 81 | @Override 82 | protected void initData() { 83 | title = getIntent().getStringExtra("title"); 84 | mToolbar.setTitle(title); 85 | 86 | if (title.equals("管理员注册")) { 87 | identity = 1; 88 | } else { 89 | identity = 0; 90 | } 91 | 92 | } 93 | 94 | 95 | private void register(String username, String password, String mobile, String email, int identity, String nickname) { 96 | OkGo.get(Config.REGISTER_URL) 97 | .params("username", username) 98 | .params("password", password) 99 | .params("mobile", mobile) 100 | .params("email", email) 101 | .params("identity", identity) 102 | .params("nickname", nickname) 103 | .execute(new HttpStringCallback(mActivity) { 104 | @Override 105 | protected void onSuccess(String msg, String response) { 106 | BaseToast(msg); 107 | finish(); 108 | } 109 | 110 | @Override 111 | protected void onError(String response) { 112 | BaseToast(response); 113 | } 114 | }); 115 | 116 | } 117 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/UserFeedBackActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import android.text.TextUtils; 4 | import android.view.View; 5 | import android.widget.EditText; 6 | import android.widget.TextView; 7 | 8 | import com.app.android.homestay.Config; 9 | import com.app.android.homestay.R; 10 | import com.app.android.homestay.base.BaseActivity; 11 | import com.app.android.homestay.http.HttpStringCallback; 12 | import com.lzy.okgo.OkGo; 13 | 14 | import org.w3c.dom.Text; 15 | 16 | public class UserFeedBackActivity extends BaseActivity { 17 | private TextView order_num; 18 | private EditText content; 19 | private String orderNum; 20 | private String userName; 21 | 22 | @Override 23 | protected int getLayoutId() { 24 | return R.layout.activity_user_feed_back; 25 | } 26 | 27 | @Override 28 | protected void initView() { 29 | order_num = findViewById(R.id.order_num); 30 | content = findViewById(R.id.content); 31 | findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { 32 | @Override 33 | public void onClick(View v) { 34 | finish(); 35 | } 36 | }); 37 | 38 | findViewById(R.id.confirm_button).setOnClickListener(new View.OnClickListener() { 39 | @Override 40 | public void onClick(View v) { 41 | String feedContent = content.getText().toString().trim(); 42 | if (TextUtils.isEmpty(feedContent)) { 43 | BaseToast("请填写你的反馈意见"); 44 | } else { 45 | addFeed(feedContent); 46 | } 47 | } 48 | }); 49 | 50 | } 51 | 52 | @Override 53 | protected void setListener() { 54 | 55 | } 56 | 57 | @Override 58 | protected void initData() { 59 | orderNum = getIntent().getStringExtra("order_num"); 60 | userName = getIntent().getStringExtra("username"); 61 | // 62 | order_num.setText("订单号:" + orderNum); 63 | 64 | } 65 | 66 | private void addFeed(String content) { 67 | OkGo.post(Config.FEED_ADD_URL) 68 | .params("order_num", orderNum) 69 | .params("feed_content", content) 70 | .params("username", userName) 71 | .execute(new HttpStringCallback(this) { 72 | @Override 73 | protected void onSuccess(String msg, String response) { 74 | BaseToast(msg); 75 | finish(); 76 | } 77 | 78 | @Override 79 | protected void onError(String response) { 80 | BaseToast(response); 81 | } 82 | }); 83 | } 84 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/UserLoginActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import android.content.Intent; 4 | import android.text.TextUtils; 5 | import android.view.View; 6 | import android.widget.EditText; 7 | 8 | import com.app.android.homestay.Config; 9 | import com.app.android.homestay.R; 10 | import com.app.android.homestay.UserMainActivity; 11 | import com.app.android.homestay.base.BaseActivity; 12 | import com.app.android.homestay.bean.UserInfo; 13 | import com.app.android.homestay.http.HttpStringCallback; 14 | import com.app.android.homestay.utils.GsonUtils; 15 | import com.lzy.okgo.OkGo; 16 | 17 | /** 18 | * 用户登录 19 | */ 20 | public class UserLoginActivity extends BaseActivity { 21 | private EditText username, password; 22 | 23 | @Override 24 | protected int getLayoutId() { 25 | return R.layout.activity_user_login; 26 | } 27 | 28 | @Override 29 | protected void initView() { 30 | username = findViewById(R.id.username); 31 | password = findViewById(R.id.password); 32 | } 33 | 34 | @Override 35 | protected void setListener() { 36 | 37 | findViewById(R.id.register).setOnClickListener(new View.OnClickListener() { 38 | @Override 39 | public void onClick(View v) { 40 | Intent intent = new Intent(mActivity, RegisterActivity.class); 41 | intent.putExtra("title", "用户注册"); 42 | startActivity(intent); 43 | } 44 | }); 45 | 46 | findViewById(R.id.login).setOnClickListener(new View.OnClickListener() { 47 | @Override 48 | public void onClick(View v) { 49 | 50 | String name = username.getText().toString().trim(); 51 | String pwd = password.getText().toString().trim(); 52 | if (TextUtils.isEmpty(name)) { 53 | BaseToast("请输入用户名"); 54 | } else if (TextUtils.isEmpty(pwd)) { 55 | BaseToast("请输入密码"); 56 | } else { 57 | login(name, pwd); 58 | } 59 | 60 | } 61 | }); 62 | 63 | } 64 | 65 | @Override 66 | protected void initData() { 67 | 68 | } 69 | 70 | private void login(String username, String pwd) { 71 | OkGo.get(Config.LOGIN_URL) 72 | .params("username", username) 73 | .params("password", pwd) 74 | .params("identity", 0) 75 | .execute(new HttpStringCallback(mActivity) { 76 | @Override 77 | protected void onSuccess(String msg, String response) { 78 | UserInfo userInfo = GsonUtils.parseJson(response, UserInfo.class); 79 | Config.setUserInfo(userInfo); 80 | startActivity(new Intent(mActivity, UserMainActivity.class)); 81 | BaseToast(msg); 82 | finish(); 83 | } 84 | 85 | @Override 86 | protected void onError(String response) { 87 | BaseToast(response); 88 | } 89 | }); 90 | } 91 | 92 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/UserPayOrderActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.DialogInterface; 5 | import android.view.View; 6 | 7 | import androidx.annotation.NonNull; 8 | import androidx.recyclerview.widget.RecyclerView; 9 | 10 | import com.app.android.homestay.Config; 11 | import com.app.android.homestay.R; 12 | import com.app.android.homestay.adapter.PayListAdapter; 13 | import com.app.android.homestay.base.BaseActivity; 14 | import com.app.android.homestay.bean.OderInfoBean; 15 | import com.app.android.homestay.bean.OrderInfo; 16 | import com.app.android.homestay.http.HttpStringCallback; 17 | import com.app.android.homestay.utils.GsonUtils; 18 | import com.chad.library.adapter.base.BaseQuickAdapter; 19 | import com.chad.library.adapter.base.listener.OnItemLongClickListener; 20 | import com.lzy.okgo.OkGo; 21 | 22 | import org.jetbrains.annotations.NotNull; 23 | 24 | public class UserPayOrderActivity extends BaseActivity { 25 | private RecyclerView recyclerview; 26 | private PayListAdapter mPayListAdapter; 27 | 28 | @Override 29 | protected int getLayoutId() { 30 | return R.layout.activity_user_order; 31 | } 32 | 33 | @Override 34 | protected void initView() { 35 | recyclerview = findViewById(R.id.recyclerview); 36 | 37 | mPayListAdapter = new PayListAdapter(); 38 | mPayListAdapter.setOnItemLongClickListener(new OnItemLongClickListener() { 39 | @Override 40 | public boolean onItemLongClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) { 41 | OrderInfo orderInfo = mPayListAdapter.getData().get(position); 42 | AlertDialog.Builder builder = new AlertDialog.Builder(UserPayOrderActivity.this); 43 | builder.setTitle("确定要删除订单吗?"); 44 | builder.setMessage("删除的订单将无法恢复,请谨慎删除"); 45 | builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 46 | @Override 47 | public void onClick(DialogInterface dialog, int which) { 48 | del(orderInfo.getUid(), position); 49 | } 50 | }); 51 | builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 52 | @Override 53 | public void onClick(DialogInterface dialog, int which) { 54 | 55 | } 56 | }); 57 | 58 | builder.show(); 59 | 60 | 61 | return true; 62 | } 63 | }); 64 | recyclerview.setAdapter(mPayListAdapter); 65 | 66 | } 67 | 68 | @Override 69 | protected void setListener() { 70 | 71 | } 72 | 73 | @Override 74 | protected void initData() { 75 | 76 | if (null != Config.getUserInfo().getUsername()) { 77 | queryAll(Config.getUserInfo().getUsername()); 78 | } 79 | } 80 | 81 | public void queryAll(String username) { 82 | OkGo.post(Config.QUERY_ORDER_URL) 83 | .params("username", username) 84 | .params("pay_status", 1) 85 | .execute(new HttpStringCallback(this) { 86 | @Override 87 | protected void onSuccess(String msg, String response) { 88 | 89 | OderInfoBean infoBean = GsonUtils.parseJson(response, OderInfoBean.class); 90 | mPayListAdapter.setNewInstance(infoBean.getList()); 91 | 92 | } 93 | 94 | @Override 95 | protected void onError(String response) { 96 | BaseToast(response); 97 | 98 | } 99 | }); 100 | 101 | } 102 | 103 | public void del(int uid, int position) { 104 | OkGo.get(Config.ORDER_DEL_URL) 105 | .params("uid", uid) 106 | .execute(new HttpStringCallback(this) { 107 | @Override 108 | protected void onSuccess(String msg, String response) { 109 | BaseToast(msg); 110 | mPayListAdapter.removeAt(position); 111 | 112 | } 113 | 114 | @Override 115 | protected void onError(String response) { 116 | BaseToast(response); 117 | 118 | } 119 | }); 120 | 121 | } 122 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/activity/UserUpdatePwdActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.activity; 2 | 3 | import android.text.TextUtils; 4 | import android.view.View; 5 | import android.widget.EditText; 6 | 7 | import com.app.android.homestay.Config; 8 | import com.app.android.homestay.R; 9 | import com.app.android.homestay.base.BaseActivity; 10 | import com.app.android.homestay.bean.UserInfo; 11 | import com.app.android.homestay.http.HttpStringCallback; 12 | import com.app.android.homestay.utils.Utils; 13 | import com.lzy.okgo.OkGo; 14 | import com.lzy.okgo.callback.StringCallback; 15 | import com.lzy.okgo.model.Response; 16 | 17 | public class UserUpdatePwdActivity extends BaseActivity { 18 | private EditText password; 19 | private EditText newpwd; 20 | private EditText newpwd1; 21 | 22 | @Override 23 | protected int getLayoutId() { 24 | return R.layout.activity_user_update_pwd; 25 | } 26 | 27 | @Override 28 | protected void initView() { 29 | password = findViewById(R.id.password); 30 | newpwd = findViewById(R.id.newpwd); 31 | newpwd1 = findViewById(R.id.newpwd1); 32 | 33 | } 34 | 35 | @Override 36 | protected void setListener() { 37 | 38 | findViewById(R.id.update).setOnClickListener(new View.OnClickListener() { 39 | @Override 40 | public void onClick(View v) { 41 | String pwd = password.getText().toString().trim(); 42 | String newpwdstr = newpwd.getText().toString().trim(); 43 | String newpwd1str = newpwd1.getText().toString().trim(); 44 | if (TextUtils.isEmpty(pwd)) { 45 | BaseToast("请输入原始密码"); 46 | } else if (TextUtils.isEmpty(newpwdstr)) { 47 | BaseToast("请输入新密码"); 48 | } else if (!Utils.isPwd(newpwdstr)) { 49 | BaseToast("密码格式不合法"); 50 | } else if (TextUtils.isEmpty(newpwd1str)) { 51 | BaseToast("请输入确定密码"); 52 | } else if (!Utils.isPwd(newpwd1str)) { 53 | BaseToast("确定密码不合法"); 54 | } else if (!newpwdstr.equals(newpwd1str)) { 55 | BaseToast("两次密码不一致"); 56 | } else { 57 | UserInfo userInfo = Config.getUserInfo(); 58 | if (null != userInfo) { 59 | updatePwd(userInfo.getUid(), userInfo.getUsername(), newpwdstr); 60 | } 61 | 62 | } 63 | } 64 | }); 65 | 66 | } 67 | 68 | private void updatePwd(int uid, String username, String newpwdstr) { 69 | OkGo.post(Config.UPDATE_PWD_URL) 70 | .params("username", username) 71 | .params("password", newpwdstr) 72 | .params("uid", uid) 73 | .execute(new HttpStringCallback(this) { 74 | 75 | @Override 76 | protected void onSuccess(String msg, String response) { 77 | BaseToast(msg); 78 | setResult(300); 79 | finish(); 80 | } 81 | 82 | @Override 83 | protected void onError(String response) { 84 | BaseToast(response); 85 | 86 | } 87 | }); 88 | } 89 | 90 | @Override 91 | protected void initData() { 92 | 93 | } 94 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/adapter/AdminFeedBackAdapter.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.adapter; 2 | 3 | import com.app.android.homestay.R; 4 | import com.app.android.homestay.bean.FeedBackInfo; 5 | import com.chad.library.adapter.base.BaseQuickAdapter; 6 | import com.chad.library.adapter.base.viewholder.BaseViewHolder; 7 | 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class AdminFeedBackAdapter extends BaseQuickAdapter { 11 | public AdminFeedBackAdapter() { 12 | super(R.layout.admin_feed_item); 13 | } 14 | 15 | @Override 16 | protected void convert(@NotNull BaseViewHolder holder, FeedBackInfo feedBackInfo) { 17 | 18 | holder.setText(R.id.order_num, "订单号:" + feedBackInfo.getOrder_num()); 19 | holder.setText(R.id.username, "反馈用户:" + feedBackInfo.getUsername()); 20 | holder.setText(R.id.content, feedBackInfo.getFeed_content()); 21 | holder.setText(R.id.create_time, "反馈时间:" + feedBackInfo.getCreate_time()); 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/adapter/AdminHouseListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.adapter; 2 | 3 | import android.graphics.Paint; 4 | import android.widget.TextView; 5 | 6 | import androidx.annotation.NonNull; 7 | 8 | import com.app.android.homestay.GlideEngine; 9 | import com.app.android.homestay.R; 10 | import com.app.android.homestay.bean.HouseInfo; 11 | import com.chad.library.adapter.base.BaseQuickAdapter; 12 | import com.chad.library.adapter.base.viewholder.BaseViewHolder; 13 | 14 | public class AdminHouseListAdapter extends BaseQuickAdapter { 15 | public AdminHouseListAdapter() { 16 | super(R.layout.admin_house_item); 17 | } 18 | 19 | private TextView original_price; 20 | 21 | @Override 22 | protected void convert(@NonNull BaseViewHolder baseViewHolder, HouseInfo houseInfo) { 23 | baseViewHolder.setText(R.id.title, houseInfo.getIntroduce()); 24 | baseViewHolder.setText(R.id.discount_price, "¥" + houseInfo.getDiscount_price()); 25 | original_price = baseViewHolder.getView(R.id.original_price); 26 | original_price.setText("原价" + houseInfo.getOriginal_price()); 27 | original_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 28 | original_price.getPaint().setAntiAlias(true); 29 | // 30 | baseViewHolder.setText(R.id.address, houseInfo.getAddress()); 31 | baseViewHolder.setText(R.id.create_time, "发布时间:" + houseInfo.getCreate_time()); 32 | GlideEngine.createGlideEngine().loadImage(getContext().getApplicationContext(), houseInfo.getHouse_img(), baseViewHolder.getView(R.id.house_img)); 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/adapter/AdminOrderListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.adapter; 2 | 3 | import android.graphics.Paint; 4 | import android.widget.TextView; 5 | 6 | import androidx.core.content.ContextCompat; 7 | 8 | import com.app.android.homestay.GlideEngine; 9 | import com.app.android.homestay.R; 10 | import com.app.android.homestay.bean.OrderInfo; 11 | import com.chad.library.adapter.base.BaseQuickAdapter; 12 | import com.chad.library.adapter.base.viewholder.BaseViewHolder; 13 | 14 | import org.jetbrains.annotations.NotNull; 15 | import org.w3c.dom.Text; 16 | 17 | public class AdminOrderListAdapter extends BaseQuickAdapter { 18 | private TextView original_price; 19 | private TextView order_status; 20 | 21 | public AdminOrderListAdapter() { 22 | super(R.layout.admin_order_item); 23 | } 24 | 25 | @Override 26 | protected void convert(@NotNull BaseViewHolder holder, OrderInfo orderInfo) { 27 | order_status = holder.getView(R.id.order_status); 28 | holder.setText(R.id.username, "用户:" + orderInfo.getUsername()); 29 | GlideEngine.createGlideEngine().loadImage(getContext(), orderInfo.getHouse_img(), holder.getView(R.id.image)); 30 | holder.setText(R.id.title, orderInfo.getIntroduce()); 31 | holder.setText(R.id.discount_price, "¥" + orderInfo.getDiscount_price()); 32 | original_price = holder.getView(R.id.original_price); 33 | original_price.setText("原价" + orderInfo.getOriginal_price()); 34 | original_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 35 | original_price.getPaint().setAntiAlias(true); 36 | // 37 | holder.setText(R.id.address, orderInfo.getAddress()); 38 | if (orderInfo.getPay_status() == 0) { 39 | order_status.setText("待付款"); 40 | order_status.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red)); 41 | holder.setText(R.id.create_time, "下单时间:" + orderInfo.getCreate_time()); 42 | } else { 43 | order_status.setText("支付成功"); 44 | order_status.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.teal_200)); 45 | holder.setText(R.id.create_time, "订单号:" + orderInfo.getOrder_num()); 46 | } 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/adapter/AdminUserListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.adapter; 2 | 3 | import android.widget.TextView; 4 | 5 | import androidx.annotation.NonNull; 6 | import androidx.core.content.ContextCompat; 7 | 8 | import com.app.android.homestay.GlideEngine; 9 | import com.app.android.homestay.R; 10 | import com.app.android.homestay.bean.UserInfo; 11 | import com.chad.library.adapter.base.BaseQuickAdapter; 12 | import com.chad.library.adapter.base.viewholder.BaseViewHolder; 13 | import com.othershe.cornerlabelview.CornerLabelView; 14 | 15 | import de.hdodenhof.circleimageview.CircleImageView; 16 | 17 | 18 | public class AdminUserListAdapter extends BaseQuickAdapter { 19 | private CircleImageView profile_image; 20 | private TextView username; 21 | private CornerLabelView cornerLabelView; 22 | 23 | public AdminUserListAdapter() { 24 | super(R.layout.admin_user_list_item); 25 | } 26 | 27 | 28 | @Override 29 | protected void convert(@NonNull BaseViewHolder baseViewHolder, UserInfo userInfo) { 30 | profile_image = baseViewHolder.getView(R.id.profile_image); 31 | username = baseViewHolder.getView(R.id.username); 32 | cornerLabelView = baseViewHolder.getView(R.id.cornerLabelView); 33 | baseViewHolder.setText(R.id.email, "邮箱:" + userInfo.getEmail()); 34 | baseViewHolder.setText(R.id.username, userInfo.getUsername()); 35 | baseViewHolder.setText(R.id.mobile, "手机号:" + userInfo.getMobile()); 36 | 37 | if (userInfo.getIdentity() == 1) { 38 | profile_image.setBorderColor(ContextCompat.getColor(getContext(), R.color.red)); 39 | cornerLabelView.setBgColor(ContextCompat.getColor(getContext(), R.color.red)); 40 | cornerLabelView.setText("管理员"); 41 | } else { 42 | profile_image.setBorderColor(ContextCompat.getColor(getContext(), R.color.purple_500)); 43 | cornerLabelView.setBgColor(ContextCompat.getColor(getContext(), R.color.purple_500)); 44 | cornerLabelView.setText("注册用户"); 45 | } 46 | 47 | if (userInfo.getAvatar() != null) { 48 | GlideEngine.createGlideEngine().loadImage(getContext(), userInfo.getAvatar(), profile_image); 49 | } else { 50 | profile_image.setImageResource(R.mipmap.logo); 51 | } 52 | 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/adapter/CollectionAdapter.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.adapter; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.DialogInterface; 5 | import android.graphics.Paint; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | import android.widget.Toast; 9 | 10 | import com.app.android.homestay.Config; 11 | import com.app.android.homestay.GlideEngine; 12 | import com.app.android.homestay.R; 13 | import com.app.android.homestay.bean.CollectionInfo; 14 | import com.app.android.homestay.http.HttpStringCallback; 15 | import com.chad.library.adapter.base.BaseQuickAdapter; 16 | import com.chad.library.adapter.base.viewholder.BaseViewHolder; 17 | import com.lzy.okgo.OkGo; 18 | 19 | import org.jetbrains.annotations.NotNull; 20 | 21 | /** 22 | * author : yi... 23 | * date : 2021/11/17/0017 16:23 24 | * desc : 25 | */ 26 | public class CollectionAdapter extends BaseQuickAdapter { 27 | 28 | private TextView original_price; 29 | 30 | public CollectionAdapter() { 31 | super(R.layout.collection_item); 32 | } 33 | 34 | @Override 35 | protected void convert(@NotNull BaseViewHolder baseViewHolder, CollectionInfo collectionInfo) { 36 | if (Config.getUserInfo()!=null){ 37 | GlideEngine.createGlideEngine().loadImage(getContext().getApplicationContext(), Config.getUserInfo().getAvatar(), baseViewHolder.getView(R.id.profile_image)); 38 | } 39 | 40 | GlideEngine.createGlideEngine().loadImage(getContext().getApplicationContext(), collectionInfo.getHouse_img(), baseViewHolder.getView(R.id.image)); 41 | 42 | baseViewHolder.setText(R.id.title, collectionInfo.getIntroduce()); 43 | baseViewHolder.setText(R.id.discount_price, "¥" + collectionInfo.getDiscount_price()); 44 | original_price = baseViewHolder.getView(R.id.original_price); 45 | original_price.setText("原价" + collectionInfo.getOriginal_price()); 46 | original_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 47 | original_price.getPaint().setAntiAlias(true); 48 | 49 | // 50 | baseViewHolder.setText(R.id.address, collectionInfo.getAddress()); 51 | 52 | baseViewHolder.getView(R.id.like).setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View v) { 55 | AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 56 | 57 | builder.setTitle("确定取消收藏吗?"); 58 | builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 59 | @Override 60 | public void onClick(DialogInterface dialog, int which) { 61 | del(collectionInfo.getUid(), baseViewHolder.getLayoutPosition()); 62 | } 63 | }); 64 | builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 65 | @Override 66 | public void onClick(DialogInterface dialog, int which) { 67 | 68 | } 69 | }); 70 | builder.show(); 71 | } 72 | }); 73 | } 74 | 75 | 76 | private void del(int uid, int position) { 77 | OkGo.get(Config.CANCEL_COLLECTION_URL) 78 | .params("uid", uid) 79 | .execute(new HttpStringCallback(null) { 80 | @Override 81 | protected void onSuccess(String msg, String response) { 82 | removeAt(position); 83 | Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show(); 84 | } 85 | 86 | @Override 87 | protected void onError(String response) { 88 | Toast.makeText(getContext(), response, Toast.LENGTH_SHORT).show(); 89 | } 90 | }); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/adapter/HomeAdapter.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.adapter; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.DialogInterface; 5 | import android.graphics.Paint; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | import android.widget.Toast; 9 | 10 | import com.app.android.homestay.Config; 11 | import com.app.android.homestay.GlideEngine; 12 | import com.app.android.homestay.R; 13 | import com.app.android.homestay.bean.HouseInfo; 14 | import com.app.android.homestay.bean.UserInfo; 15 | import com.app.android.homestay.http.HttpStringCallback; 16 | import com.chad.library.adapter.base.BaseQuickAdapter; 17 | import com.chad.library.adapter.base.viewholder.BaseViewHolder; 18 | import com.lzy.okgo.OkGo; 19 | 20 | import org.jetbrains.annotations.NotNull; 21 | 22 | public class HomeAdapter extends BaseQuickAdapter { 23 | 24 | private TextView original_price; 25 | 26 | 27 | public HomeAdapter() { 28 | super(R.layout.home_item); 29 | } 30 | 31 | @Override 32 | protected void convert(@NotNull BaseViewHolder baseViewHolder, HouseInfo houseInfo) { 33 | GlideEngine.createGlideEngine().loadImage(getContext().getApplicationContext(), houseInfo.getHouse_img(), baseViewHolder.getView(R.id.image)); 34 | 35 | baseViewHolder.setText(R.id.title, houseInfo.getIntroduce()); 36 | baseViewHolder.setText(R.id.discount_price, "¥" + houseInfo.getDiscount_price()); 37 | original_price = baseViewHolder.getView(R.id.original_price); 38 | original_price.setText("原价" + houseInfo.getOriginal_price()); 39 | original_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 40 | original_price.getPaint().setAntiAlias(true); 41 | // 42 | baseViewHolder.setText(R.id.address, houseInfo.getAddress()); 43 | 44 | baseViewHolder.getView(R.id.like).setOnClickListener(new View.OnClickListener() { 45 | @Override 46 | public void onClick(View v) { 47 | AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 48 | 49 | builder.setTitle("是否添加收藏?"); 50 | builder.setMessage("添加后可在收藏列表中查看"); 51 | builder.setPositiveButton("是", new DialogInterface.OnClickListener() { 52 | @Override 53 | public void onClick(DialogInterface dialog, int which) { 54 | UserInfo userInfo = Config.getUserInfo(); 55 | if (userInfo != null) { 56 | collection(userInfo.getUsername(), houseInfo); 57 | } 58 | 59 | } 60 | }); 61 | builder.setNegativeButton("否", new DialogInterface.OnClickListener() { 62 | @Override 63 | public void onClick(DialogInterface dialog, int which) { 64 | 65 | } 66 | }); 67 | 68 | builder.show(); 69 | } 70 | }); 71 | } 72 | 73 | private void collection(String username, HouseInfo houseInfo) { 74 | 75 | OkGo.post(Config.COLLECTION_URL) 76 | .params("collection_id", houseInfo.getUid()) 77 | .params("introduce", houseInfo.getIntroduce()) 78 | .params("original_price", houseInfo.getOriginal_price()) 79 | .params("discount_price", houseInfo.getDiscount_price()) 80 | .params("house_img", houseInfo.getHouse_img()) 81 | .params("address", houseInfo.getAddress()) 82 | .params("create_time", "") 83 | .params("username", username) 84 | .execute(new HttpStringCallback(null) { 85 | @Override 86 | protected void onSuccess(String msg, String response) { 87 | Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show(); 88 | } 89 | 90 | @Override 91 | protected void onError(String response) { 92 | Toast.makeText(getContext(), response, Toast.LENGTH_SHORT).show(); 93 | } 94 | }); 95 | 96 | 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/adapter/PayListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.adapter; 2 | 3 | 4 | import android.content.Intent; 5 | import android.graphics.Paint; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | 9 | import com.app.android.homestay.Config; 10 | import com.app.android.homestay.GlideEngine; 11 | import com.app.android.homestay.R; 12 | import com.app.android.homestay.activity.UserFeedBackActivity; 13 | import com.app.android.homestay.bean.OrderInfo; 14 | import com.chad.library.adapter.base.BaseQuickAdapter; 15 | import com.chad.library.adapter.base.viewholder.BaseViewHolder; 16 | 17 | import org.jetbrains.annotations.NotNull; 18 | 19 | import de.hdodenhof.circleimageview.CircleImageView; 20 | 21 | public class PayListAdapter extends BaseQuickAdapter { 22 | 23 | private TextView original_price; 24 | private CircleImageView profile_image; 25 | 26 | public PayListAdapter() { 27 | super(R.layout.pay_item); 28 | } 29 | 30 | @Override 31 | protected void convert(@NotNull BaseViewHolder holder, OrderInfo orderInfo) { 32 | holder.setText(R.id.username, orderInfo.getUsername()); 33 | holder.setText(R.id.order_num, "订单号:" + orderInfo.getOrder_num()); 34 | GlideEngine.createGlideEngine().loadImage(getContext(), orderInfo.getHouse_img(), holder.getView(R.id.image)); 35 | 36 | if (Config.getUserInfo() != null && Config.getUserInfo().getAvatar() != null) { 37 | GlideEngine.createGlideEngine().loadImage(getContext(), Config.getUserInfo().getAvatar(), holder.getView(R.id.profile_image)); 38 | } 39 | 40 | 41 | holder.setText(R.id.title, orderInfo.getIntroduce()); 42 | holder.setText(R.id.discount_price, "¥" + orderInfo.getDiscount_price()); 43 | original_price = holder.getView(R.id.original_price); 44 | original_price.setText("原价" + orderInfo.getOriginal_price()); 45 | original_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 46 | original_price.getPaint().setAntiAlias(true); 47 | // 48 | holder.setText(R.id.address, orderInfo.getAddress()); 49 | holder.getView(R.id.more).setOnClickListener(new View.OnClickListener() { 50 | @Override 51 | public void onClick(View v) { 52 | Intent intent = new Intent(getContext(), UserFeedBackActivity.class); 53 | intent.putExtra("order_num", orderInfo.getOrder_num()); 54 | intent.putExtra("username", orderInfo.getUsername()); 55 | getContext().startActivity(intent); 56 | } 57 | }); 58 | 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/adapter/UserOrderAdapter.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.adapter; 2 | 3 | import android.graphics.Paint; 4 | import android.widget.TextView; 5 | 6 | import com.app.android.homestay.Config; 7 | import com.app.android.homestay.GlideEngine; 8 | import com.app.android.homestay.R; 9 | import com.app.android.homestay.bean.OrderInfo; 10 | import com.chad.library.adapter.base.BaseQuickAdapter; 11 | import com.chad.library.adapter.base.viewholder.BaseViewHolder; 12 | 13 | import org.jetbrains.annotations.NotNull; 14 | 15 | import de.hdodenhof.circleimageview.CircleImageView; 16 | 17 | public class UserOrderAdapter extends BaseQuickAdapter { 18 | 19 | 20 | private TextView original_price; 21 | private CircleImageView profile_image; 22 | 23 | public UserOrderAdapter() { 24 | super(R.layout.order_item); 25 | } 26 | 27 | @Override 28 | protected void convert(@NotNull BaseViewHolder holder, OrderInfo orderInfo) { 29 | holder.setText(R.id.username, orderInfo.getUsername()); 30 | holder.setText(R.id.create_time, "下单时间:" + orderInfo.getCreate_time()); 31 | GlideEngine.createGlideEngine().loadImage(getContext(), orderInfo.getHouse_img(), holder.getView(R.id.image)); 32 | 33 | if (Config.getUserInfo() != null && Config.getUserInfo().getAvatar() != null) { 34 | GlideEngine.createGlideEngine().loadImage(getContext(), Config.getUserInfo().getAvatar(), holder.getView(R.id.profile_image)); 35 | } 36 | 37 | 38 | holder.setText(R.id.title, orderInfo.getIntroduce()); 39 | holder.setText(R.id.discount_price, "¥" + orderInfo.getDiscount_price()); 40 | original_price = holder.getView(R.id.original_price); 41 | original_price.setText("原价" + orderInfo.getOriginal_price()); 42 | original_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 43 | original_price.getPaint().setAntiAlias(true); 44 | // 45 | holder.setText(R.id.address, orderInfo.getAddress()); 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/base/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.base; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | import android.widget.Toast; 7 | 8 | import androidx.annotation.Nullable; 9 | import androidx.appcompat.app.AppCompatActivity; 10 | import androidx.appcompat.widget.Toolbar; 11 | 12 | import com.app.android.homestay.R; 13 | 14 | /** 15 | * author : yi... 16 | * date : 2021/11/10/0010 9:45 17 | * desc : 18 | */ 19 | public abstract class BaseActivity extends AppCompatActivity { 20 | protected Activity mActivity; 21 | protected Toolbar mToolbar; 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | mActivity = this; 27 | setContentView(getLayoutId()); 28 | 29 | mToolbar = findViewById(R.id.toolbar); 30 | if (null != mToolbar) { 31 | mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 32 | @Override 33 | public void onClick(View v) { 34 | finish(); 35 | } 36 | }); 37 | } 38 | 39 | initView(); 40 | 41 | setListener(); 42 | 43 | initData(); 44 | } 45 | 46 | 47 | protected abstract int getLayoutId(); 48 | 49 | 50 | protected abstract void initView(); 51 | 52 | 53 | protected abstract void setListener(); 54 | 55 | 56 | protected abstract void initData(); 57 | 58 | 59 | protected void BaseToast(String msg) { 60 | Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/base/BaseFragment.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.base; 2 | 3 | import android.os.Bundle; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.Toast; 8 | 9 | import androidx.annotation.Nullable; 10 | import androidx.fragment.app.Fragment; 11 | 12 | /** 13 | * author : yi... 14 | * date : 2021/11/10/0010 9:51 15 | * desc : 16 | */ 17 | public abstract class BaseFragment extends Fragment { 18 | protected View mRootView; 19 | 20 | @Override 21 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 22 | mRootView = inflater.inflate(getLayoutId(), container, false); 23 | return mRootView; 24 | } 25 | 26 | 27 | @Override 28 | public void onActivityCreated(Bundle savedInstanceState) { 29 | super.onActivityCreated(savedInstanceState); 30 | 31 | initView(); 32 | 33 | setListener(); 34 | 35 | initData(); 36 | } 37 | 38 | 39 | protected abstract int getLayoutId(); 40 | 41 | 42 | protected abstract void initView(); 43 | 44 | 45 | protected abstract void setListener(); 46 | 47 | 48 | public abstract void initData(); 49 | 50 | 51 | protected void BaseToast(String msg) { 52 | Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/CollectionBean.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | import java.util.List; 4 | 5 | public class CollectionBean { 6 | private List list; 7 | 8 | public CollectionBean(List list) { 9 | this.list = list; 10 | } 11 | 12 | public List getList() { 13 | return list; 14 | } 15 | 16 | public void setList(List list) { 17 | this.list = list; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/CollectionInfo.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | public class CollectionInfo implements Serializable { 6 | private int uid; 7 | private int collection_id; 8 | private String introduce; 9 | private String original_price; //原件 10 | private String discount_price; //折扣价 11 | private String house_img; 12 | private String address; 13 | private String create_time; 14 | private String username; 15 | 16 | public int getUid() { 17 | return uid; 18 | } 19 | 20 | public void setUid(int uid) { 21 | this.uid = uid; 22 | } 23 | 24 | public int getCollection_id() { 25 | return collection_id; 26 | } 27 | 28 | public void setCollection_id(int collection_id) { 29 | this.collection_id = collection_id; 30 | } 31 | 32 | public String getIntroduce() { 33 | return introduce; 34 | } 35 | 36 | public void setIntroduce(String introduce) { 37 | this.introduce = introduce; 38 | } 39 | 40 | public String getOriginal_price() { 41 | return original_price; 42 | } 43 | 44 | public void setOriginal_price(String original_price) { 45 | this.original_price = original_price; 46 | } 47 | 48 | public String getDiscount_price() { 49 | return discount_price; 50 | } 51 | 52 | public void setDiscount_price(String discount_price) { 53 | this.discount_price = discount_price; 54 | } 55 | 56 | public String getHouse_img() { 57 | return house_img; 58 | } 59 | 60 | public void setHouse_img(String house_img) { 61 | this.house_img = house_img; 62 | } 63 | 64 | public String getAddress() { 65 | return address; 66 | } 67 | 68 | public void setAddress(String address) { 69 | this.address = address; 70 | } 71 | 72 | public String getCreate_time() { 73 | return create_time; 74 | } 75 | 76 | public void setCreate_time(String create_time) { 77 | this.create_time = create_time; 78 | } 79 | 80 | public String getUsername() { 81 | return username; 82 | } 83 | 84 | public void setUsername(String username) { 85 | this.username = username; 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/FeedBackInfo.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | public class FeedBackInfo { 4 | private int uid; 5 | 6 | private String order_num; 7 | 8 | private String feed_content; 9 | 10 | private String create_time; 11 | 12 | private String username; 13 | 14 | public int getUid() { 15 | return uid; 16 | } 17 | 18 | public void setUid(int uid) { 19 | this.uid = uid; 20 | } 21 | 22 | public String getOrder_num() { 23 | return order_num; 24 | } 25 | 26 | public void setOrder_num(String order_num) { 27 | this.order_num = order_num; 28 | } 29 | 30 | public String getFeed_content() { 31 | return feed_content; 32 | } 33 | 34 | public void setFeed_content(String feed_content) { 35 | this.feed_content = feed_content; 36 | } 37 | 38 | public String getCreate_time() { 39 | return create_time; 40 | } 41 | 42 | public void setCreate_time(String create_time) { 43 | this.create_time = create_time; 44 | } 45 | 46 | public String getUsername() { 47 | return username; 48 | } 49 | 50 | public void setUsername(String username) { 51 | this.username = username; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/FeedBackInfoBean.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | import java.util.List; 4 | 5 | public class FeedBackInfoBean { 6 | private List list; 7 | 8 | public FeedBackInfoBean(List list) { 9 | this.list = list; 10 | } 11 | 12 | public List getList() { 13 | return list; 14 | } 15 | 16 | public void setList(List list) { 17 | this.list = list; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/HouseBean.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | import java.util.List; 4 | 5 | public class HouseBean { 6 | private List list; 7 | 8 | public HouseBean(List list) { 9 | this.list = list; 10 | } 11 | 12 | public List getList() { 13 | return list; 14 | } 15 | 16 | public void setList(List list) { 17 | this.list = list; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/HouseInfo.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | public class HouseInfo implements Serializable { 6 | private int uid; 7 | private String introduce; 8 | private String original_price; //原件 9 | private String discount_price; //折扣价 10 | private String house_img; 11 | private String address; 12 | private String create_time; 13 | 14 | public String getCreate_time() { 15 | return create_time; 16 | } 17 | 18 | public void setCreate_time(String create_time) { 19 | this.create_time = create_time; 20 | } 21 | 22 | public int getUid() { 23 | return uid; 24 | } 25 | 26 | public void setUid(int uid) { 27 | this.uid = uid; 28 | } 29 | 30 | public String getIntroduce() { 31 | return introduce; 32 | } 33 | 34 | public void setIntroduce(String introduce) { 35 | this.introduce = introduce; 36 | } 37 | 38 | public String getOriginal_price() { 39 | return original_price; 40 | } 41 | 42 | public void setOriginal_price(String original_price) { 43 | this.original_price = original_price; 44 | } 45 | 46 | public String getDiscount_price() { 47 | return discount_price; 48 | } 49 | 50 | public void setDiscount_price(String discount_price) { 51 | this.discount_price = discount_price; 52 | } 53 | 54 | public String getHouse_img() { 55 | return house_img; 56 | } 57 | 58 | public void setHouse_img(String house_img) { 59 | this.house_img = house_img; 60 | } 61 | 62 | public String getAddress() { 63 | return address; 64 | } 65 | 66 | public void setAddress(String address) { 67 | this.address = address; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/JsonBean.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | 4 | import com.contrarywind.interfaces.IPickerViewData; 5 | 6 | import java.util.List; 7 | 8 | public class JsonBean implements IPickerViewData { 9 | 10 | /** 11 | * name : 省份 12 | * city : [{"name":"北京市","area":["东城区","西城区","崇文区","宣武区","朝阳区"]}] 13 | */ 14 | 15 | private String name; 16 | private List city; 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | 26 | public List getCityList() { 27 | return city; 28 | } 29 | 30 | public void setCityList(List city) { 31 | this.city = city; 32 | } 33 | 34 | // 实现 IPickerViewData 接口, 35 | // 这个用来显示在PickerView上面的字符串, 36 | // PickerView会通过IPickerViewData获取getPickerViewText方法显示出来。 37 | @Override 38 | public String getPickerViewText() { 39 | return this.name; 40 | } 41 | 42 | 43 | public static class CityBean { 44 | /** 45 | * name : 城市 46 | * area : ["东城区","西城区","崇文区","昌平区"] 47 | */ 48 | 49 | private String name; 50 | private List area; 51 | 52 | public String getName() { 53 | return name; 54 | } 55 | 56 | public void setName(String name) { 57 | this.name = name; 58 | } 59 | 60 | public List getArea() { 61 | return area; 62 | } 63 | 64 | public void setArea(List area) { 65 | this.area = area; 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/OderInfoBean.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | import java.util.List; 4 | 5 | public class OderInfoBean { 6 | private List list; 7 | 8 | public OderInfoBean(List list) { 9 | this.list = list; 10 | } 11 | 12 | public List getList() { 13 | return list; 14 | } 15 | 16 | public void setList(List list) { 17 | this.list = list; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/OrderInfo.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | public class OrderInfo { 4 | 5 | private int uid; 6 | private String username; 7 | private String introduce; 8 | private String original_price; //原件 9 | private String discount_price; //折扣价 10 | private String address; 11 | private String house_img; 12 | private String create_time; 13 | private int pay_status; //0表示未支付 1表示支付成功 14 | private String order_num; 15 | 16 | public String getOrder_num() { 17 | return order_num; 18 | } 19 | 20 | public void setOrder_num(String order_num) { 21 | this.order_num = order_num; 22 | } 23 | 24 | public int getPay_status() { 25 | return pay_status; 26 | } 27 | 28 | public void setPay_status(int pay_status) { 29 | this.pay_status = pay_status; 30 | } 31 | 32 | public int getUid() { 33 | return uid; 34 | } 35 | 36 | public void setUid(int uid) { 37 | this.uid = uid; 38 | } 39 | 40 | public String getUsername() { 41 | return username; 42 | } 43 | 44 | public void setUsername(String username) { 45 | this.username = username; 46 | } 47 | 48 | public String getIntroduce() { 49 | return introduce; 50 | } 51 | 52 | public void setIntroduce(String introduce) { 53 | this.introduce = introduce; 54 | } 55 | 56 | public String getOriginal_price() { 57 | return original_price; 58 | } 59 | 60 | public void setOriginal_price(String original_price) { 61 | this.original_price = original_price; 62 | } 63 | 64 | public String getDiscount_price() { 65 | return discount_price; 66 | } 67 | 68 | public void setDiscount_price(String discount_price) { 69 | this.discount_price = discount_price; 70 | } 71 | 72 | public String getHouse_img() { 73 | return house_img; 74 | } 75 | 76 | public void setHouse_img(String house_img) { 77 | this.house_img = house_img; 78 | } 79 | 80 | public String getAddress() { 81 | return address; 82 | } 83 | 84 | public void setAddress(String address) { 85 | this.address = address; 86 | } 87 | 88 | public String getCreate_time() { 89 | return create_time; 90 | } 91 | 92 | public void setCreate_time(String create_time) { 93 | this.create_time = create_time; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/UserBean.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | import java.util.List; 4 | 5 | public class UserBean { 6 | private List list; 7 | 8 | public UserBean(List list) { 9 | this.list = list; 10 | } 11 | 12 | public List getList() { 13 | return list; 14 | } 15 | 16 | public void setList(List list) { 17 | this.list = list; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/bean/UserInfo.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.bean; 2 | 3 | public class UserInfo { 4 | private Integer uid; 5 | private String username; 6 | private String password; 7 | private String mobile; 8 | private String email; 9 | private String avatar; 10 | private int identity; 11 | private String nickname; 12 | 13 | 14 | public String getNickname() { 15 | return nickname; 16 | } 17 | 18 | public void setNickname(String nickname) { 19 | this.nickname = nickname; 20 | } 21 | 22 | public Integer getUid() { 23 | return uid; 24 | } 25 | 26 | public void setUid(Integer uid) { 27 | this.uid = uid; 28 | } 29 | 30 | public String getUsername() { 31 | return username; 32 | } 33 | 34 | public void setUsername(String username) { 35 | this.username = username; 36 | } 37 | 38 | public String getPassword() { 39 | return password; 40 | } 41 | 42 | public void setPassword(String password) { 43 | this.password = password; 44 | } 45 | 46 | public String getMobile() { 47 | return mobile; 48 | } 49 | 50 | public void setMobile(String mobile) { 51 | this.mobile = mobile; 52 | } 53 | 54 | public String getAvatar() { 55 | return avatar; 56 | } 57 | 58 | public void setAvatar(String avatar) { 59 | this.avatar = avatar; 60 | } 61 | 62 | public int getIdentity() { 63 | return identity; 64 | } 65 | 66 | public void setIdentity(int identity) { 67 | this.identity = identity; 68 | } 69 | 70 | public String getEmail() { 71 | return email; 72 | } 73 | 74 | public void setEmail(String email) { 75 | this.email = email; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/fragment/CenterFragment.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.fragment; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.DialogInterface; 5 | import android.content.Intent; 6 | import android.graphics.Bitmap; 7 | import android.text.TextUtils; 8 | import android.util.Log; 9 | import android.view.View; 10 | import android.widget.TextView; 11 | 12 | import androidx.annotation.Nullable; 13 | 14 | import com.allen.library.SuperTextView; 15 | import com.app.android.homestay.Config; 16 | import com.app.android.homestay.GlideEngine; 17 | import com.app.android.homestay.R; 18 | import com.app.android.homestay.activity.AdminFeedBookActivity; 19 | import com.app.android.homestay.activity.UserEditInfoActivity; 20 | import com.app.android.homestay.activity.UserPayOrderActivity; 21 | import com.app.android.homestay.activity.UserUpdatePwdActivity; 22 | import com.app.android.homestay.base.BaseFragment; 23 | import com.app.android.homestay.bean.UserInfo; 24 | 25 | import de.hdodenhof.circleimageview.CircleImageView; 26 | 27 | public class CenterFragment extends BaseFragment { 28 | private TextView username; 29 | private SuperTextView email; 30 | private SuperTextView mobile; 31 | private CircleImageView profile_image; 32 | private TextView nickname; 33 | 34 | @Override 35 | protected int getLayoutId() { 36 | return R.layout.fragment_center; 37 | } 38 | 39 | @Override 40 | protected void initView() { 41 | username = mRootView.findViewById(R.id.username); 42 | email = mRootView.findViewById(R.id.email); 43 | mobile = mRootView.findViewById(R.id.mobile); 44 | profile_image = mRootView.findViewById(R.id.profile_image); 45 | nickname = mRootView.findViewById(R.id.nickname); 46 | 47 | } 48 | 49 | @Override 50 | protected void setListener() { 51 | 52 | mRootView.findViewById(R.id.feedback).setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View v) { 55 | if (Config.getUserInfo() != null) { 56 | Intent intent = new Intent(getActivity(), AdminFeedBookActivity.class); 57 | intent.putExtra("username", Config.getUserInfo().getUsername()); 58 | startActivity(intent); 59 | } 60 | 61 | 62 | } 63 | }); 64 | 65 | mRootView.findViewById(R.id.paylist).setOnClickListener(new View.OnClickListener() { 66 | @Override 67 | public void onClick(View v) { 68 | startActivity(new Intent(getActivity(), UserPayOrderActivity.class)); 69 | } 70 | }); 71 | 72 | mRootView.findViewById(R.id.menu).setOnClickListener(new View.OnClickListener() { 73 | @Override 74 | public void onClick(View v) { 75 | startActivityForResult(new Intent(getActivity(), UserUpdatePwdActivity.class), 300); 76 | } 77 | }); 78 | 79 | mRootView.findViewById(R.id.head).setOnClickListener(new View.OnClickListener() { 80 | @Override 81 | public void onClick(View v) { 82 | startActivityForResult(new Intent(getActivity(), UserEditInfoActivity.class), 400); 83 | } 84 | }); 85 | 86 | mRootView.findViewById(R.id.exit).setOnClickListener(new View.OnClickListener() { 87 | @Override 88 | public void onClick(View v) { 89 | AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 90 | builder.setTitle("确定要退出登录吗?"); 91 | builder.setMessage("退出登录将清空用户登录信息"); 92 | builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 93 | @Override 94 | public void onClick(DialogInterface dialog, int which) { 95 | 96 | } 97 | }); 98 | 99 | builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 100 | @Override 101 | public void onClick(DialogInterface dialog, int which) { 102 | getActivity().finish(); 103 | } 104 | }); 105 | builder.show(); 106 | } 107 | }); 108 | } 109 | 110 | @Override 111 | public void initData() { 112 | 113 | UserInfo userInfo = Config.getUserInfo(); 114 | if (userInfo != null) { 115 | username.setText(userInfo.getUsername()); 116 | email.setLeftString("邮箱:" + userInfo.getEmail()); 117 | mobile.setLeftString("手机号:" + userInfo.getMobile()); 118 | nickname.setText(userInfo.getNickname()); 119 | 120 | if (TextUtils.isEmpty(userInfo.getAvatar())) { 121 | profile_image.setImageResource(R.mipmap.logo); 122 | } else { 123 | GlideEngine.createGlideEngine().loadImage(getActivity(), userInfo.getAvatar(), profile_image); 124 | } 125 | } 126 | 127 | } 128 | 129 | @Override 130 | public void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) { 131 | super.onActivityResult(requestCode, resultCode, data); 132 | if (resultCode == 300) { 133 | getActivity().finish(); 134 | } else if (requestCode == 400) { 135 | initData(); 136 | } 137 | } 138 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/fragment/HomeFragment.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.fragment; 2 | 3 | 4 | import android.app.AlertDialog; 5 | import android.content.DialogInterface; 6 | import android.view.View; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.recyclerview.widget.RecyclerView; 10 | 11 | import com.app.android.homestay.Config; 12 | import com.app.android.homestay.R; 13 | import com.app.android.homestay.adapter.HomeAdapter; 14 | import com.app.android.homestay.base.BaseFragment; 15 | import com.app.android.homestay.bean.HouseBean; 16 | import com.app.android.homestay.bean.HouseInfo; 17 | import com.app.android.homestay.http.HttpStringCallback; 18 | import com.app.android.homestay.utils.GsonUtils; 19 | import com.chad.library.adapter.base.BaseQuickAdapter; 20 | import com.chad.library.adapter.base.listener.OnItemClickListener; 21 | import com.lzy.okgo.OkGo; 22 | 23 | import org.jetbrains.annotations.NotNull; 24 | 25 | public class HomeFragment extends BaseFragment { 26 | 27 | private RecyclerView recyclerview; 28 | private HomeAdapter mHomeAdapter; 29 | 30 | @Override 31 | protected int getLayoutId() { 32 | return R.layout.fragment_home; 33 | } 34 | 35 | @Override 36 | protected void initView() { 37 | recyclerview = mRootView.findViewById(R.id.recyclerview); 38 | 39 | mHomeAdapter = new HomeAdapter(); 40 | 41 | mHomeAdapter.setOnItemClickListener(new OnItemClickListener() { 42 | @Override 43 | public void onItemClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) { 44 | 45 | AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 46 | builder.setTitle("确定要添加到订单吗?"); 47 | builder.setMessage("该订单可在订单列表中随时可删除"); 48 | builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 49 | @Override 50 | public void onClick(DialogInterface dialog, int which) { 51 | 52 | HouseInfo houseInfo = mHomeAdapter.getData().get(position); 53 | addOrder(Config.getUserInfo().getUsername(), houseInfo); 54 | 55 | } 56 | }); 57 | builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 58 | @Override 59 | public void onClick(DialogInterface dialog, int which) { 60 | 61 | } 62 | }); 63 | builder.show(); 64 | } 65 | }); 66 | 67 | } 68 | 69 | @Override 70 | protected void setListener() { 71 | 72 | } 73 | 74 | @Override 75 | public void initData() { 76 | 77 | recyclerview.setAdapter(mHomeAdapter); 78 | 79 | hostAll(); 80 | 81 | } 82 | 83 | private void hostAll() { 84 | OkGo.get(Config.HOUSE_LIST_URL) 85 | .execute(new HttpStringCallback(getActivity()) { 86 | @Override 87 | protected void onSuccess(String msg, String response) { 88 | 89 | HouseBean houseBean = GsonUtils.parseJson(response, HouseBean.class); 90 | mHomeAdapter.setNewInstance(houseBean.getList()); 91 | 92 | } 93 | 94 | @Override 95 | protected void onError(String response) { 96 | 97 | } 98 | }); 99 | } 100 | 101 | private void addOrder(String username, HouseInfo houseInfo) { 102 | 103 | OkGo.post(Config.ADD_ORDER_URL) 104 | .params("username", username) 105 | .params("introduce", houseInfo.getIntroduce()) 106 | .params("original_price", houseInfo.getOriginal_price()) 107 | .params("discount_price", houseInfo.getDiscount_price()) 108 | .params("address", houseInfo.getAddress()) 109 | .params("house_img", houseInfo.getHouse_img()) 110 | .execute(new HttpStringCallback(getActivity()) { 111 | @Override 112 | protected void onSuccess(String msg, String response) { 113 | BaseToast(msg); 114 | } 115 | 116 | @Override 117 | protected void onError(String response) { 118 | BaseToast(response); 119 | } 120 | }); 121 | 122 | } 123 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/fragment/LikeFragment.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.fragment; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.DialogInterface; 5 | import android.view.View; 6 | 7 | import androidx.annotation.NonNull; 8 | import androidx.recyclerview.widget.RecyclerView; 9 | 10 | import com.app.android.homestay.Config; 11 | import com.app.android.homestay.R; 12 | import com.app.android.homestay.adapter.CollectionAdapter; 13 | import com.app.android.homestay.base.BaseFragment; 14 | import com.app.android.homestay.bean.CollectionBean; 15 | import com.app.android.homestay.bean.CollectionInfo; 16 | import com.app.android.homestay.bean.HouseInfo; 17 | import com.app.android.homestay.bean.UserInfo; 18 | import com.app.android.homestay.http.HttpStringCallback; 19 | import com.app.android.homestay.utils.GsonUtils; 20 | import com.chad.library.adapter.base.BaseQuickAdapter; 21 | import com.chad.library.adapter.base.listener.OnItemClickListener; 22 | import com.lzy.okgo.OkGo; 23 | 24 | import org.jetbrains.annotations.NotNull; 25 | 26 | public class LikeFragment extends BaseFragment { 27 | 28 | private CollectionAdapter mCollectionAdapter; 29 | private RecyclerView mRecyclerView; 30 | 31 | 32 | @Override 33 | protected int getLayoutId() { 34 | return R.layout.fragment_like; 35 | } 36 | 37 | @Override 38 | protected void initView() { 39 | mRecyclerView = mRootView.findViewById(R.id.recyclerview); 40 | mCollectionAdapter = new CollectionAdapter(); 41 | 42 | mCollectionAdapter.setOnItemClickListener(new OnItemClickListener() { 43 | @Override 44 | public void onItemClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) { 45 | 46 | AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 47 | builder.setTitle("确定要添加到订单吗?"); 48 | builder.setMessage("添加后的订单可在订单列表中随时删除"); 49 | builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 50 | @Override 51 | public void onClick(DialogInterface dialog, int which) { 52 | 53 | CollectionInfo collectionInfo = mCollectionAdapter.getData().get(position); 54 | addOrder(Config.getUserInfo().getUsername(), collectionInfo); 55 | 56 | } 57 | }); 58 | builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 59 | @Override 60 | public void onClick(DialogInterface dialog, int which) { 61 | 62 | } 63 | }); 64 | builder.show(); 65 | } 66 | }); 67 | 68 | 69 | mRecyclerView.setAdapter(mCollectionAdapter); 70 | } 71 | 72 | 73 | private void addOrder(String username, CollectionInfo collectionInfo) { 74 | 75 | OkGo.post(Config.ADD_ORDER_URL) 76 | .params("username", username) 77 | .params("introduce", collectionInfo.getIntroduce()) 78 | .params("original_price", collectionInfo.getOriginal_price()) 79 | .params("discount_price", collectionInfo.getDiscount_price()) 80 | .params("address", collectionInfo.getAddress()) 81 | .params("house_img", collectionInfo.getHouse_img()) 82 | .execute(new HttpStringCallback(getActivity()) { 83 | @Override 84 | protected void onSuccess(String msg, String response) { 85 | BaseToast(msg); 86 | } 87 | 88 | @Override 89 | protected void onError(String response) { 90 | BaseToast(response); 91 | } 92 | }); 93 | 94 | } 95 | 96 | @Override 97 | protected void setListener() { 98 | 99 | } 100 | 101 | @Override 102 | public void initData() { 103 | 104 | UserInfo userInfo = Config.getUserInfo(); 105 | if (null != userInfo) { 106 | queryCollection(userInfo.getUsername()); 107 | } 108 | } 109 | 110 | private void queryCollection(String username) { 111 | OkGo.get(Config.COLLECTION_LIST_URL) 112 | .params("username", username) 113 | .execute(new HttpStringCallback(getActivity()) { 114 | @Override 115 | protected void onSuccess(String msg, String response) { 116 | CollectionBean bean = GsonUtils.parseJson(response, CollectionBean.class); 117 | mCollectionAdapter.setNewInstance(bean.getList()); 118 | } 119 | 120 | @Override 121 | protected void onError(String response) { 122 | 123 | } 124 | }); 125 | 126 | } 127 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/fragment/OrderFragment.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.fragment; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.DialogInterface; 5 | import android.content.Intent; 6 | import android.view.View; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.annotation.Nullable; 10 | import androidx.recyclerview.widget.RecyclerView; 11 | 12 | import com.app.android.homestay.Config; 13 | import com.app.android.homestay.R; 14 | import com.app.android.homestay.activity.PayDialogActivity; 15 | import com.app.android.homestay.adapter.UserOrderAdapter; 16 | import com.app.android.homestay.base.BaseFragment; 17 | import com.app.android.homestay.bean.OderInfoBean; 18 | import com.app.android.homestay.bean.OrderInfo; 19 | import com.app.android.homestay.http.HttpStringCallback; 20 | import com.app.android.homestay.utils.GsonUtils; 21 | import com.chad.library.adapter.base.BaseQuickAdapter; 22 | import com.chad.library.adapter.base.listener.OnItemClickListener; 23 | import com.chad.library.adapter.base.listener.OnItemLongClickListener; 24 | import com.lzy.okgo.OkGo; 25 | 26 | import org.jetbrains.annotations.NotNull; 27 | 28 | public class OrderFragment extends BaseFragment { 29 | private UserOrderAdapter mOrderAdapter; 30 | private RecyclerView recyclerview; 31 | 32 | @Override 33 | protected int getLayoutId() { 34 | return R.layout.fragment_order; 35 | } 36 | 37 | @Override 38 | protected void initView() { 39 | recyclerview = mRootView.findViewById(R.id.recyclerview); 40 | 41 | } 42 | 43 | @Override 44 | protected void setListener() { 45 | 46 | mOrderAdapter = new UserOrderAdapter(); 47 | mOrderAdapter.setOnItemClickListener(new OnItemClickListener() { 48 | @Override 49 | public void onItemClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) { 50 | OrderInfo orderInfo = mOrderAdapter.getData().get(position); 51 | Intent intent = new Intent(getActivity(), PayDialogActivity.class); 52 | intent.putExtra("discount_price", orderInfo.getDiscount_price()); 53 | intent.putExtra("uid", orderInfo.getUid()); 54 | startActivityForResult(intent, 2000); 55 | } 56 | }); 57 | mOrderAdapter.setOnItemLongClickListener(new OnItemLongClickListener() { 58 | @Override 59 | public boolean onItemLongClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) { 60 | OrderInfo orderInfo = mOrderAdapter.getData().get(position); 61 | AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 62 | builder.setTitle("确定要删除该订单吗?"); 63 | builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 64 | @Override 65 | public void onClick(DialogInterface dialog, int which) { 66 | 67 | del(orderInfo.getUid(), position); 68 | 69 | 70 | } 71 | }); 72 | builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 73 | @Override 74 | public void onClick(DialogInterface dialog, int which) { 75 | 76 | } 77 | }); 78 | builder.show(); 79 | 80 | 81 | return true; 82 | } 83 | }); 84 | recyclerview.setAdapter(mOrderAdapter); 85 | 86 | } 87 | 88 | @Override 89 | public void initData() { 90 | if (null != Config.getUserInfo().getUsername()) { 91 | queryAll(Config.getUserInfo().getUsername()); 92 | } 93 | 94 | } 95 | 96 | 97 | public void del(int uid, int position) { 98 | OkGo.get(Config.ORDER_DEL_URL) 99 | .params("uid", uid) 100 | .execute(new HttpStringCallback(getActivity()) { 101 | @Override 102 | protected void onSuccess(String msg, String response) { 103 | BaseToast(msg); 104 | mOrderAdapter.removeAt(position); 105 | 106 | } 107 | 108 | @Override 109 | protected void onError(String response) { 110 | BaseToast(response); 111 | 112 | } 113 | }); 114 | 115 | } 116 | 117 | 118 | public void queryAll(String username) { 119 | OkGo.post(Config.QUERY_ORDER_URL) 120 | .params("username", username) 121 | .params("pay_status", 0) 122 | .execute(new HttpStringCallback(getActivity()) { 123 | @Override 124 | protected void onSuccess(String msg, String response) { 125 | 126 | OderInfoBean infoBean = GsonUtils.parseJson(response, OderInfoBean.class); 127 | mOrderAdapter.setNewInstance(infoBean.getList()); 128 | 129 | } 130 | 131 | @Override 132 | protected void onError(String response) { 133 | BaseToast(response); 134 | 135 | } 136 | }); 137 | 138 | } 139 | 140 | @Override 141 | public void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) { 142 | super.onActivityResult(requestCode, resultCode, data); 143 | if (resultCode == 2000) { 144 | initData(); 145 | } 146 | } 147 | } -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/http/HttpStringCallback.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.http; 2 | 3 | import android.app.Activity; 4 | import android.app.ProgressDialog; 5 | import android.text.TextUtils; 6 | import android.view.Window; 7 | 8 | import com.lzy.okgo.callback.StringCallback; 9 | import com.lzy.okgo.model.Response; 10 | import com.lzy.okgo.request.base.Request; 11 | 12 | import org.json.JSONException; 13 | import org.json.JSONObject; 14 | 15 | public abstract class HttpStringCallback extends StringCallback { 16 | 17 | private ProgressDialog dialog; 18 | private Activity mActivity; 19 | 20 | protected HttpStringCallback(Activity activity) { 21 | if (null != activity) { 22 | this.mActivity = activity; 23 | dialog = new ProgressDialog(activity); 24 | dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 25 | dialog.setCanceledOnTouchOutside(false); 26 | dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 27 | dialog.setMessage("请求网络中..."); 28 | dialog.show(); 29 | } 30 | } 31 | 32 | @Override 33 | public void onSuccess(Response response) { 34 | if (!TextUtils.isEmpty(response.body())) { 35 | try { 36 | JSONObject jsonObject = new JSONObject(response.body()); 37 | if (jsonObject.optInt("code") == 200) { 38 | if (jsonObject.optJSONObject("data") == null) { 39 | onError("接口返回数据错误"); 40 | } else { 41 | onSuccess(jsonObject.optString("msg"), jsonObject.optJSONObject("data").toString()); 42 | } 43 | 44 | } else { 45 | onError(jsonObject.optString("msg")); 46 | } 47 | 48 | } catch (JSONException e) { 49 | e.printStackTrace(); 50 | } 51 | } 52 | 53 | } 54 | 55 | @Override 56 | public void onError(Response response) { 57 | super.onError(response); 58 | 59 | onError(response.getException().toString()); 60 | } 61 | 62 | @Override 63 | public void onFinish() { 64 | if (mActivity != null) { 65 | if (dialog != null && dialog.isShowing()) { 66 | dialog.dismiss(); 67 | } 68 | } 69 | } 70 | 71 | protected abstract void onSuccess(String msg, String response); 72 | 73 | protected abstract void onError(String response); 74 | } 75 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/utils/CodeUtils.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.utils; 2 | 3 | import android.graphics.Bitmap; 4 | import android.graphics.Canvas; 5 | import android.graphics.Color; 6 | import android.graphics.Paint; 7 | 8 | import java.util.Random; 9 | 10 | public class CodeUtils { 11 | // private static final char[] CHARS = { 12 | // '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 13 | // 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 14 | // 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 15 | // 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 16 | // 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' 17 | // }; 18 | 19 | private static final char[] CHARS = { 20 | 21 | 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 22 | 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 23 | 24 | }; 25 | 26 | private static CodeUtils mCodeUtils; 27 | private int mPaddingLeft, mPaddingTop; 28 | private StringBuilder mBuilder = new StringBuilder(); 29 | private Random mRandom = new Random(); 30 | 31 | //Default Settings 32 | // private static final int DEFAULT_CODE_LENGTH = 6;//验证码的长度 这里是6位 33 | private static final int DEFAULT_CODE_LENGTH = 4;//验证码的长度 这里是4位 34 | private static final int DEFAULT_FONT_SIZE = 60;//字体大小 35 | private static final int DEFAULT_LINE_NUMBER = 3;//多少条干扰线 36 | private static final int BASE_PADDING_LEFT = 40; //左边距 37 | private static final int RANGE_PADDING_LEFT = 30;//左边距范围值 38 | private static final int BASE_PADDING_TOP = 70;//上边距 39 | private static final int RANGE_PADDING_TOP = 15;//上边距范围值 40 | private static final int DEFAULT_WIDTH = 300;//默认宽度.图片的总宽 41 | private static final int DEFAULT_HEIGHT = 120;//默认高度.图片的总高 42 | private static final int DEFAULT_COLOR = 0xDF;//默认背景颜色值 43 | 44 | private String code; 45 | 46 | public static CodeUtils getInstance() { 47 | if (mCodeUtils == null) { 48 | mCodeUtils = new CodeUtils(); 49 | } 50 | return mCodeUtils; 51 | } 52 | 53 | //生成验证码图片 返回类型为bitmap 直接用imageview.setbitmap()即可 54 | public Bitmap createBitmap() { 55 | mPaddingLeft = 0; //每次生成验证码图片时初始化 56 | mPaddingTop = 0; 57 | 58 | Bitmap bitmap = Bitmap.createBitmap(DEFAULT_WIDTH, DEFAULT_HEIGHT, Bitmap.Config.ARGB_8888); 59 | Canvas canvas = new Canvas(bitmap); 60 | 61 | code = createCode(); 62 | 63 | canvas.drawColor(Color.rgb(DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_COLOR)); 64 | Paint paint = new Paint(); 65 | paint.setTextSize(DEFAULT_FONT_SIZE); 66 | 67 | for (int i = 0; i < code.length(); i++) { 68 | randomTextStyle(paint); 69 | randomPadding(); 70 | canvas.drawText(code.charAt(i) + "", mPaddingLeft, mPaddingTop, paint); 71 | } 72 | 73 | //干扰线 74 | for (int i = 0; i < DEFAULT_LINE_NUMBER; i++) { 75 | drawLine(canvas, paint); 76 | } 77 | 78 | // canvas.save(Canvas.ALL_SAVE_FLAG);//保存 79 | canvas.save(); 80 | canvas.restore(); 81 | return bitmap; 82 | } 83 | 84 | /** 85 | * 得到图片中的验证码字符串 86 | * 87 | * @return 88 | */ 89 | public String getCode() { 90 | return code; 91 | } 92 | 93 | //生成验证码 94 | public String createCode() { 95 | mBuilder.delete(0, mBuilder.length()); //使用之前首先清空内容 96 | 97 | for (int i = 0; i < DEFAULT_CODE_LENGTH; i++) { 98 | mBuilder.append(CHARS[mRandom.nextInt(CHARS.length)]); 99 | } 100 | 101 | return mBuilder.toString(); 102 | } 103 | 104 | //生成干扰线 105 | private void drawLine(Canvas canvas, Paint paint) { 106 | int color = randomColor(); 107 | int startX = mRandom.nextInt(DEFAULT_WIDTH); 108 | int startY = mRandom.nextInt(DEFAULT_HEIGHT); 109 | int stopX = mRandom.nextInt(DEFAULT_WIDTH); 110 | int stopY = mRandom.nextInt(DEFAULT_HEIGHT); 111 | paint.setStrokeWidth(1); 112 | paint.setColor(color); 113 | canvas.drawLine(startX, startY, stopX, stopY, paint); 114 | } 115 | 116 | //随机颜色 117 | private int randomColor() { 118 | mBuilder.delete(0, mBuilder.length()); //使用之前首先清空内容 119 | 120 | String haxString; 121 | for (int i = 0; i < 3; i++) { 122 | haxString = Integer.toHexString(mRandom.nextInt(0xFF)); 123 | if (haxString.length() == 1) { 124 | haxString = "0" + haxString; 125 | } 126 | 127 | mBuilder.append(haxString); 128 | } 129 | 130 | return Color.parseColor("#" + mBuilder.toString()); 131 | } 132 | 133 | //随机文本样式 134 | private void randomTextStyle(Paint paint) { 135 | int color = randomColor(); 136 | paint.setColor(color); 137 | paint.setFakeBoldText(mRandom.nextBoolean()); //true为粗体,false为非粗体 138 | float skewX = mRandom.nextInt(11) / 10; 139 | skewX = mRandom.nextBoolean() ? skewX : -skewX; 140 | paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜 141 | // paint.setUnderlineText(true); //true为下划线,false为非下划线 142 | // paint.setStrikeThruText(true); //true为删除线,false为非删除线 143 | } 144 | 145 | //随机间距 146 | private void randomPadding() { 147 | mPaddingLeft += BASE_PADDING_LEFT + mRandom.nextInt(RANGE_PADDING_LEFT); 148 | mPaddingTop = BASE_PADDING_TOP + mRandom.nextInt(RANGE_PADDING_TOP); 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/utils/GetJsonDataUtil.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.utils; 2 | 3 | 4 | import android.content.Context; 5 | import android.content.res.AssetManager; 6 | 7 | import java.io.BufferedReader; 8 | import java.io.IOException; 9 | import java.io.InputStreamReader; 10 | 11 | public class GetJsonDataUtil { 12 | public String getJson(Context context, String fileName) { 13 | 14 | StringBuilder stringBuilder = new StringBuilder(); 15 | try { 16 | AssetManager assetManager = context.getAssets(); 17 | BufferedReader bf = new BufferedReader(new InputStreamReader( 18 | assetManager.open(fileName))); 19 | String line; 20 | while ((line = bf.readLine()) != null) { 21 | stringBuilder.append(line); 22 | } 23 | } catch (IOException e) { 24 | e.printStackTrace(); 25 | } 26 | return stringBuilder.toString(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/utils/GsonUtils.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.utils; 2 | 3 | import android.text.TextUtils; 4 | 5 | import com.google.gson.Gson; 6 | import com.google.gson.GsonBuilder; 7 | 8 | public class GsonUtils { 9 | public static T parseJson(String json, Class type){ 10 | T result = null; 11 | if (!TextUtils.isEmpty(json)) { 12 | Gson gson = new GsonBuilder().create(); 13 | try { 14 | result = gson.fromJson(json, type); 15 | } catch (Exception e) { 16 | e.printStackTrace(); 17 | } finally { 18 | gson = null; 19 | } 20 | } 21 | return result; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/utils/Utils.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.utils; 2 | 3 | import java.util.regex.Pattern; 4 | 5 | public class Utils { 6 | 7 | public static boolean isMobile(String mobile) { 8 | String reg = "^1\\d{10}$"; 9 | boolean matches = Pattern.matches(reg, mobile); 10 | return matches; 11 | } 12 | 13 | /** 14 | * ^ 匹配一行的开头位置 15 | * (?![0-9]+$) 预测该位置后面不全是数字 16 | * (?![a-zA-Z]+$) 预测该位置后面不全是字母 17 | * [0-9A-Za-z] {8,16} 由6-16位数字或这字母组成 18 | * $ 匹配行结尾位置 19 | */ 20 | public static boolean isPwd(String pwd) { 21 | String reg = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$"; 22 | boolean matches = pwd.matches(reg); 23 | return matches; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/app/android/homestay/view/ScrollAwareFABMenuBehavior.java: -------------------------------------------------------------------------------- 1 | package com.app.android.homestay.view; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.View; 6 | import android.view.animation.Animation; 7 | import android.view.animation.AnimationUtils; 8 | 9 | import androidx.coordinatorlayout.widget.CoordinatorLayout; 10 | import androidx.core.view.ViewCompat; 11 | import androidx.interpolator.view.animation.FastOutSlowInInterpolator; 12 | 13 | import com.app.android.homestay.R; 14 | 15 | /** 16 | * author : yi... 17 | * date : 2021/11/10/0010 13:08 18 | * desc : 19 | */ 20 | public class ScrollAwareFABMenuBehavior extends CoordinatorLayout.Behavior { 21 | 22 | private static final android.view.animation.Interpolator INTERPOLATOR = 23 | new FastOutSlowInInterpolator(); 24 | private boolean mIsAnimatingOut = false; 25 | 26 | public ScrollAwareFABMenuBehavior(Context context, AttributeSet attrs) { 27 | super(); 28 | } 29 | 30 | @Override 31 | public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, 32 | FloatingActionButtonMenu child, View directTargetChild, View target, int nestedScrollAxes) { 33 | return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL || 34 | super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, 35 | nestedScrollAxes); 36 | } 37 | 38 | @Override 39 | public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButtonMenu child, 40 | View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { 41 | super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, 42 | dyUnconsumed); 43 | if (dyConsumed > 5 && !this.mIsAnimatingOut && child.getVisibility() == View.VISIBLE) { 44 | if (child.isExpanded()) { 45 | child.collapse(); 46 | } 47 | animateOut(child); 48 | } else if (dyConsumed < -5 && child.getVisibility() != View.VISIBLE) { 49 | animateIn(child); 50 | } 51 | } 52 | 53 | // Same animation that FloatingActionButton.Behavior uses to 54 | // hide the FAB when the AppBarLayout exits 55 | private void animateOut(final FloatingActionButtonMenu menu) { 56 | Animation anim = AnimationUtils.loadAnimation(menu.getContext(), R.anim.hide_to_bottom); 57 | anim.setInterpolator(INTERPOLATOR); 58 | anim.setAnimationListener(new Animation.AnimationListener() { 59 | public void onAnimationStart(Animation animation) { 60 | ScrollAwareFABMenuBehavior.this.mIsAnimatingOut = true; 61 | } 62 | 63 | public void onAnimationEnd(Animation animation) { 64 | ScrollAwareFABMenuBehavior.this.mIsAnimatingOut = false; 65 | menu.setVisibility(View.GONE); 66 | } 67 | 68 | @Override 69 | public void onAnimationRepeat(final Animation animation) { 70 | } 71 | }); 72 | menu.startAnimation(anim); 73 | } 74 | 75 | // Same animation that FloatingActionButton.Behavior 76 | // uses to show the FAB when the AppBarLayout enters 77 | private void animateIn(FloatingActionButtonMenu menu) { 78 | menu.setVisibility(View.VISIBLE); 79 | Animation anim = AnimationUtils.loadAnimation(menu.getContext(), R.anim.show_from_bottom); 80 | anim.setInterpolator(INTERPOLATOR); 81 | menu.startAnimation(anim); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /app/src/main/res/anim/hide_to_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/show_from_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_yuding.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/et_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/label_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_admin_feed_book.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 18 | 25 | 26 | 27 | 28 | 29 | 30 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_admin_house.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 17 | 18 | 19 | 26 | 27 | 28 | 29 | 30 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_admin_house_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 17 | 18 | 19 | 26 | 27 | 37 | 38 | 39 | 40 | 41 | 47 | 48 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_admin_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 17 | 18 | 19 | 26 | 27 | 28 | 29 | 30 | 37 | 38 | 39 | 43 | 44 | 45 | 49 | 50 | 56 | 57 | 62 | 63 | 64 | 65 | 70 | 71 | 77 | 78 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 95 | 96 | 97 | 101 | 102 | 108 | 109 | 115 | 116 | 117 | 118 | 123 | 124 | 130 | 131 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_administrator_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 15 | 16 | 22 | 23 | 32 | 33 | 34 | 35 | 42 | 43 | 44 | 52 | 53 | 54 | 62 | 63 | 64 | 74 | 75 | 76 | 77 | 78 | 86 | 87 | 88 | 96 | 97 | 98 | 109 | 110 | 111 | 112 | 113 | 119 | 120 |