fist commit
This commit is contained in:
2
.idea/compiler.xml
generated
2
.idea/compiler.xml
generated
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="1.8" />
|
||||
<bytecodeTargetLevel target="21" />
|
||||
</component>
|
||||
</project>
|
||||
10
.idea/deploymentTargetSelector.xml
generated
Normal file
10
.idea/deploymentTargetSelector.xml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="deploymentTargetSelector">
|
||||
<selectionStates>
|
||||
<SelectionState runConfigName="app">
|
||||
<option name="selectionMode" value="DROPDOWN" />
|
||||
</SelectionState>
|
||||
</selectionStates>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/kotlinc.xml
generated
Normal file
6
.idea/kotlinc.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="KotlinJpsPluginSettings">
|
||||
<option name="version" value="1.9.0" />
|
||||
</component>
|
||||
</project>
|
||||
10
.idea/migrations.xml
generated
Normal file
10
.idea/migrations.xml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectMigrations">
|
||||
<option name="MigrateToGradleLocalJavaHome">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -44,7 +44,7 @@
|
||||
<option name="priority" value="Medium" />
|
||||
<option name="excludeFilter" value="" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
|
||||
6
.idea/modules.xml
generated
6
.idea/modules.xml
generated
@@ -4,7 +4,13 @@
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/HouseProperty.iml" filepath="$PROJECT_DIR$/.idea/modules/HouseProperty.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/HouseProperty.app.iml" filepath="$PROJECT_DIR$/.idea/modules/app/HouseProperty.app.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/HouseProperty.app.androidTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/HouseProperty.app.androidTest.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/HouseProperty.app.main.iml" filepath="$PROJECT_DIR$/.idea/modules/app/HouseProperty.app.main.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/HouseProperty.app.unitTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/HouseProperty.app.unitTest.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/ninegridview/HouseProperty.ninegridview.iml" filepath="$PROJECT_DIR$/.idea/modules/ninegridview/HouseProperty.ninegridview.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/ninegridview/HouseProperty.ninegridview.androidTest.iml" filepath="$PROJECT_DIR$/.idea/modules/ninegridview/HouseProperty.ninegridview.androidTest.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/ninegridview/HouseProperty.ninegridview.main.iml" filepath="$PROJECT_DIR$/.idea/modules/ninegridview/HouseProperty.ninegridview.main.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/ninegridview/HouseProperty.ninegridview.unitTest.iml" filepath="$PROJECT_DIR$/.idea/modules/ninegridview/HouseProperty.ninegridview.unitTest.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
17
.idea/runConfigurations.xml
generated
Normal file
17
.idea/runConfigurations.xml
generated
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RunConfigurationProducerService">
|
||||
<option name="ignoredProducers">
|
||||
<set>
|
||||
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
|
||||
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
|
||||
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"java.configuration.updateBuildConfiguration": "interactive"
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
android {
|
||||
namespace "com.sl.house_property"
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/DEPENDENCIES'
|
||||
@@ -21,18 +23,18 @@ android {
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
dataBinding {
|
||||
enabled = true
|
||||
buildFeatures {
|
||||
dataBinding = true
|
||||
}
|
||||
|
||||
compileSdkVersion 30
|
||||
buildToolsVersion '30.0.0'
|
||||
compileSdkVersion 33
|
||||
// buildToolsVersion 在 AGP 8.0+ 中不再需要,会自动使用默认版本
|
||||
aaptOptions.cruncherEnabled = false
|
||||
aaptOptions.useNewCruncher = false
|
||||
defaultConfig {
|
||||
|
||||
// multiDexEnabled true
|
||||
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
|
||||
// includeCompileClasspath 在 AGP 3.0+ 中已移除,功能默认启用,无需配置
|
||||
// multiDexEnabled true
|
||||
applicationId "com.sl.HouseProperty"
|
||||
minSdkVersion 21
|
||||
@@ -79,6 +81,18 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// 添加 Kotlin 标准库
|
||||
def kotlin_version = rootProject.ext.kotlin_version
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
// Kotlin 标准库(DataBinding 编译器在 AGP 8.x 中需要)
|
||||
compileOnly "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
annotationProcessor "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
|
||||
// 统一 Kotlin 版本,排除冲突的旧版本
|
||||
configurations.all {
|
||||
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7'
|
||||
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
|
||||
}
|
||||
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
|
||||
@@ -101,9 +115,10 @@ android {
|
||||
implementation 'com.trello:rxlifecycle-components:+'
|
||||
implementation 'com.squareup.picasso:picasso:2.5.2'
|
||||
//图片加载框架
|
||||
implementation 'com.android.databinding:library:1.1'
|
||||
implementation 'com.android.databinding:baseLibrary:1.1'
|
||||
implementation 'com.android.databinding:adapters:1.1'
|
||||
// DataBinding 在 AGP 中已内置,不再需要单独依赖
|
||||
// implementation 'com.android.databinding:library:1.1'
|
||||
// implementation 'com.android.databinding:baseLibrary:1.1'
|
||||
// implementation 'com.android.databinding:adapters:1.1'
|
||||
implementation 'top.zibin:Luban:1.1.8'
|
||||
implementation 'com.hjq:xxpermissions:5.5'
|
||||
implementation 'com.jzj.view:ObservableScrollView:0.0.2'
|
||||
@@ -173,6 +188,10 @@ android {
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = '1.8'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -61,8 +61,7 @@ public class AboutusActivity extends BaseActivity<ActivityAboutusBinding> {
|
||||
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
|
||||
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
|
||||
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
|
||||
webSettings.setAppCachePath(getPackageCodePath()+"/myapp");
|
||||
webSettings.setAppCacheMaxSize(10000);
|
||||
// setAppCachePath 和 setAppCacheMaxSize 已在 API 33 中移除,使用默认缓存设置
|
||||
//webview.loadUrl("www.baidu.com");
|
||||
webview.setWebViewClient(new WebViewClient(){
|
||||
@Override
|
||||
|
||||
@@ -108,9 +108,8 @@ public class AdeviseActivity extends BaseActivity<ActivityAdeviseBinding> {
|
||||
// setToast(1, resultcode.msg);
|
||||
return;
|
||||
}
|
||||
switch (getcode1) {
|
||||
|
||||
case R.id.comimit:
|
||||
int comimitId = R.id.comimit;
|
||||
if (getcode1 == comimitId) {
|
||||
// setToast(0, getString(R.string.loginsucess));
|
||||
showToast("提交成功");
|
||||
mDataBinding.getRoot().postDelayed(new Runnable() {
|
||||
@@ -119,10 +118,6 @@ public class AdeviseActivity extends BaseActivity<ActivityAdeviseBinding> {
|
||||
finish();
|
||||
}
|
||||
},1000);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -55,9 +55,8 @@ public class ForgetPwdActivity extends BaseActivity<ActivityForgetPwdBinding> im
|
||||
}
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()){
|
||||
|
||||
case R.id.getcode:
|
||||
int id = view.getId();
|
||||
if (id == R.id.getcode) {
|
||||
if(mDataBinding.registerphone.getText().toString().length()==0){
|
||||
setToast(getString(R.string.me_input_phone_tip));
|
||||
return;
|
||||
@@ -67,8 +66,7 @@ public class ForgetPwdActivity extends BaseActivity<ActivityForgetPwdBinding> im
|
||||
return;
|
||||
}
|
||||
getMesgCode(R.id.getcode);
|
||||
break;
|
||||
case R.id.register:
|
||||
} else if (id == R.id.register) {
|
||||
if(mDataBinding.registerphone.getText().toString().length()==0){
|
||||
setToast(getString(R.string.me_input_phone_tip));
|
||||
return;
|
||||
@@ -104,8 +102,6 @@ public class ForgetPwdActivity extends BaseActivity<ActivityForgetPwdBinding> im
|
||||
return;
|
||||
}
|
||||
register(view.getId());
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
private void register(int id) {
|
||||
@@ -163,16 +159,12 @@ public class ForgetPwdActivity extends BaseActivity<ActivityForgetPwdBinding> im
|
||||
mDataBinding.getcode.setClickable(true);
|
||||
return;
|
||||
}
|
||||
switch (getcode1) {
|
||||
case R.id.getcode:
|
||||
if (getcode1 == R.id.getcode) {
|
||||
// showToast( getString(R.string.megissucess));
|
||||
startTimer();
|
||||
break;
|
||||
|
||||
case R.id.register:
|
||||
} else if (getcode1 == R.id.register) {
|
||||
setToast( getString(R.string.changpawdsucess));
|
||||
finish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -147,16 +147,17 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding> implements
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.gotoregister:
|
||||
int gotoregisterId = R.id.gotoregister;
|
||||
int forgetpawId = R.id.forgetpaw;
|
||||
int logintextId = R.id.logintext;
|
||||
|
||||
if (view.getId() == gotoregisterId) {
|
||||
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
|
||||
startActivity(intent);
|
||||
break;
|
||||
case R.id.forgetpaw:
|
||||
} else if (view.getId() == forgetpawId) {
|
||||
Intent intent2 = new Intent(LoginActivity.this, ForgetPwdActivity.class);
|
||||
startActivity(intent2);
|
||||
break;
|
||||
case R.id.logintext:
|
||||
} else if (view.getId() == logintextId) {
|
||||
if (!mDataBinding.tvYs.isSelected()) {
|
||||
setToast("请先阅读并勾选同意用户协议和隐私政策");
|
||||
return;
|
||||
@@ -198,7 +199,6 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding> implements
|
||||
map.put("app", "Cas");
|
||||
map.put("class", "Login");
|
||||
getGankList(ApiConfig.BASE_URL, map, getResources().getString(R.string.logining), view.getId());
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -228,9 +228,8 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding> implements
|
||||
setToast(resultcode.msg);
|
||||
return;
|
||||
}
|
||||
switch (getcode1) {
|
||||
|
||||
case R.id.logintext:
|
||||
int logintextId2 = R.id.logintext;
|
||||
if (getcode1 == logintextId2) {
|
||||
Gson gs = new Gson();
|
||||
LinkedTreeMap adta = (LinkedTreeMap) resultcode.data;
|
||||
String s = gs.toJson(adta);
|
||||
@@ -251,10 +250,6 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding> implements
|
||||
//map.put("home_id", "GetHomeByPid");
|
||||
map.put("sign", Md5.md5("Cas" + "MyHouseList" + Md5.secret));
|
||||
getpammar(ApiConfig.BASE_URL, map, getResources().getString(R.string.requsting), 0);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -181,8 +181,8 @@ public class Main1Fragment extends BaseFragment<FragmentMain1Binding> implements
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent intent = null;
|
||||
switch (view.getId()) {
|
||||
case R.id.fabu:
|
||||
int id = view.getId();
|
||||
if (id == R.id.fabu) {
|
||||
intent = null;
|
||||
if ((Config.getInstance(Main1Fragment.this.getContext()).getUser() == null)) {
|
||||
intent = new Intent(Main1Fragment.this.getContext(), LoginActivity.class);
|
||||
@@ -191,12 +191,10 @@ public class Main1Fragment extends BaseFragment<FragmentMain1Binding> implements
|
||||
intent = new Intent(Main1Fragment.this.getContext(), MyshopEditAcitivity.class);
|
||||
startActivityForResult(intent, myeditcode);
|
||||
}
|
||||
break;
|
||||
case R.id.liulan:
|
||||
} else if (id == R.id.liulan) {
|
||||
intent = new Intent(getActivity(), MyMarketShopActivity.class);
|
||||
intent.putExtra("type", 1);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -122,9 +122,8 @@ public class Main2Fragment extends BaseFragment<FragmentMain2Binding> implements
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
//1水费,2电费.3燃气费,4物业费,5车位管理费,6家政服务费,7报修支付费用
|
||||
switch (view.getId()){
|
||||
case R.id.fei0:
|
||||
|
||||
int id = view.getId();
|
||||
if (id == R.id.fei0) {
|
||||
if( (Config.getInstance(getContext()).getUser()==null)){
|
||||
intent =new Intent(getContext(),LoginActivity.class);
|
||||
startActivity(intent);
|
||||
@@ -134,10 +133,7 @@ public class Main2Fragment extends BaseFragment<FragmentMain2Binding> implements
|
||||
intent.putExtra("feeType","1");
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.fei1:
|
||||
|
||||
} else if (id == R.id.fei1) {
|
||||
if( (Config.getInstance(getContext()).getUser()==null)){
|
||||
intent =new Intent(getContext(),LoginActivity.class);
|
||||
startActivity(intent);
|
||||
@@ -147,9 +143,7 @@ public class Main2Fragment extends BaseFragment<FragmentMain2Binding> implements
|
||||
intent.putExtra("feeType","2");
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.fei2:
|
||||
} else if (id == R.id.fei2) {
|
||||
if( (Config.getInstance(getContext()).getUser()==null)){
|
||||
intent =new Intent(getContext(),LoginActivity.class);
|
||||
startActivity(intent);
|
||||
@@ -159,10 +153,7 @@ public class Main2Fragment extends BaseFragment<FragmentMain2Binding> implements
|
||||
intent.putExtra("feeType","3");
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.fei3:
|
||||
|
||||
} else if (id == R.id.fei3) {
|
||||
if( (Config.getInstance(getContext()).getUser()==null)){
|
||||
intent =new Intent(getContext(),LoginActivity.class);
|
||||
startActivity(intent);
|
||||
@@ -172,8 +163,7 @@ public class Main2Fragment extends BaseFragment<FragmentMain2Binding> implements
|
||||
intent.putExtra("feeType","4");
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
case R.id.fei4:
|
||||
} else if (id == R.id.fei4) {
|
||||
if( (Config.getInstance(getContext()).getUser()==null)){
|
||||
intent =new Intent(getContext(),LoginActivity.class);
|
||||
startActivity(intent);
|
||||
@@ -183,14 +173,11 @@ public class Main2Fragment extends BaseFragment<FragmentMain2Binding> implements
|
||||
intent.putExtra("feeType","5");
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.feilist:
|
||||
break;
|
||||
case R.id.helpcenter:
|
||||
break;
|
||||
} else if (id == R.id.feilist) {
|
||||
// 空操作
|
||||
} else if (id == R.id.helpcenter) {
|
||||
// 空操作
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -669,17 +669,15 @@ public class MainFragment extends BaseFragment<FragmentMainBinding> implements V
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent intent = null;
|
||||
switch (view.getId()) {
|
||||
case R.id.scan:
|
||||
int id = view.getId();
|
||||
if (id == R.id.scan) {
|
||||
if ((Config.getInstance(MainFragment.this.getContext()).getUser() == null)) {
|
||||
intent = new Intent(MainFragment.this.getContext(), LoginActivity.class);
|
||||
} else {
|
||||
intent = new Intent(getActivity(), QRcodeActivity.class);
|
||||
}
|
||||
startActivity(intent);
|
||||
break;
|
||||
case R.id.entrancegurd://门禁
|
||||
|
||||
} else if (id == R.id.entrancegurd) {//门禁
|
||||
if( (Config.getInstance(getContext()).getUser()==null)){
|
||||
intent =new Intent(getContext(),LoginActivity.class);
|
||||
startActivity(intent);
|
||||
@@ -701,8 +699,7 @@ public class MainFragment extends BaseFragment<FragmentMainBinding> implements V
|
||||
intent = new Intent(getActivity(), CodeActivity.class);
|
||||
}
|
||||
startActivity(intent);
|
||||
break;
|
||||
case R.id.cargara://社区内购
|
||||
} else if (id == R.id.cargara) {//社区内购
|
||||
String appId = "wx7e09fff168f6e58d"; // 填移动应用(App)的 AppId,非小程序的 AppID
|
||||
IWXAPI api = WXAPIFactory.createWXAPI(getActivity(), appId);
|
||||
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
|
||||
@@ -710,11 +707,9 @@ public class MainFragment extends BaseFragment<FragmentMainBinding> implements V
|
||||
req.path = "/pages/index/index"; //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
|
||||
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版
|
||||
api.sendReq(req);
|
||||
break;
|
||||
case R.id.moew1:
|
||||
} else if (id == R.id.moew1) {
|
||||
intent = new Intent(getActivity(), MyMarketShopActivity.class);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -195,8 +195,13 @@ public class MainTabActivity extends BaseActivity<ActivityMainTabBinding>
|
||||
if (currentFragment != null)
|
||||
fragmentTransaction.hide(currentFragment);
|
||||
|
||||
switch (i) {
|
||||
case R.id.button:
|
||||
int buttonId = R.id.button;
|
||||
int button1Id = R.id.button1;
|
||||
int rl2Id = R.id.rl2;
|
||||
int button3Id = R.id.button3;
|
||||
int button4Id = R.id.button4;
|
||||
|
||||
if (i == buttonId) {
|
||||
mDataBinding.button.setChecked(true);
|
||||
mDataBinding.button1.setChecked(false);
|
||||
mDataBinding.button2.setChecked(false);
|
||||
@@ -211,8 +216,7 @@ public class MainTabActivity extends BaseActivity<ActivityMainTabBinding>
|
||||
currentFragment = fragment0;
|
||||
|
||||
//setSytemBar(R.color.transparent);
|
||||
break;
|
||||
case R.id.button1:
|
||||
} else if (i == button1Id) {
|
||||
mDataBinding.button.setChecked(false);
|
||||
mDataBinding.button1.setChecked(true);
|
||||
mDataBinding.button2.setChecked(false);
|
||||
@@ -229,8 +233,7 @@ public class MainTabActivity extends BaseActivity<ActivityMainTabBinding>
|
||||
|
||||
currentFragment = fragment1;
|
||||
|
||||
break;
|
||||
case R.id.rl2:
|
||||
} else if (i == rl2Id) {
|
||||
mDataBinding.button.setChecked(false);
|
||||
mDataBinding.button1.setChecked(false);
|
||||
mDataBinding.button2.setChecked(true);
|
||||
@@ -243,8 +246,7 @@ public class MainTabActivity extends BaseActivity<ActivityMainTabBinding>
|
||||
}
|
||||
|
||||
currentFragment = messageFragment;
|
||||
break;
|
||||
case R.id.button3:
|
||||
} else if (i == button3Id) {
|
||||
// mDataBinding.getRoot().setBackground(getResources().getDrawable(R.drawable.background_slowly));
|
||||
if (fragment3 == null) {
|
||||
fragment3 = CartFragment.newInstance();
|
||||
@@ -254,8 +256,7 @@ public class MainTabActivity extends BaseActivity<ActivityMainTabBinding>
|
||||
}
|
||||
|
||||
currentFragment = fragment3;
|
||||
break;
|
||||
case R.id.button4:
|
||||
} else if (i == button4Id) {
|
||||
mDataBinding.button.setChecked(false);
|
||||
mDataBinding.button1.setChecked(false);
|
||||
mDataBinding.button2.setChecked(false);
|
||||
@@ -268,7 +269,6 @@ public class MainTabActivity extends BaseActivity<ActivityMainTabBinding>
|
||||
fragmentTransaction.show(fragment4);
|
||||
}
|
||||
currentFragment = fragment4;
|
||||
break;
|
||||
}
|
||||
try {
|
||||
fragmentTransaction.commit();
|
||||
|
||||
@@ -57,19 +57,17 @@ public class MakeErrorActivity extends BaseActivity<ActivityMakeErrorBinding> im
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.textView21:
|
||||
int id = v.getId();
|
||||
if (id == R.id.textView21) {
|
||||
Intent intent = new Intent(MakeErrorActivity.this, LogoActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
// getAsyTask(int index,Map<String,Object> map,String url,String titile,int visible,Boolean isPost)
|
||||
//(final int index,Map<String, Object> params,String url,final Activity act,String msg,int type,Handler mHandler,boolean isPost){
|
||||
// httpNet.getAsyBackResult(1, map, HttpUrl.giveABUg(), MakeErrorActivity.this, "正在上传服务器,请稍等", HttpNet.PROGRESSVISIBLE, handler, HttpNet.POSTTYPE);
|
||||
break;
|
||||
case R.id.textView22:
|
||||
} else if (id == R.id.textView22) {
|
||||
MyApplication.getApp().exit();
|
||||
finish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -38,16 +38,11 @@ public class MarkingFinishAwardDialong extends Dialog implements View.OnClickLis
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.close:
|
||||
int id = v.getId();
|
||||
if (id == R.id.close) {
|
||||
MarkingFinishAwardDialong.this.dismiss();
|
||||
break;
|
||||
case R.id.btn_oreder_back:
|
||||
} else if (id == R.id.btn_oreder_back) {
|
||||
// takeMyPhoto(1000);
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
// private void takeMyPhoto(int userImgeREQUST) {
|
||||
|
||||
@@ -66,12 +66,8 @@ public class ModifyPswdActivity extends BaseActivity<ActivityModifyPswdBinding>
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()){
|
||||
|
||||
|
||||
|
||||
case R.id.register:
|
||||
|
||||
int id = view.getId();
|
||||
if (id == R.id.register) {
|
||||
if(mDataBinding.logincode.getText().toString().length()<6){
|
||||
setToast(getString(R.string.me_input_old_password_tip));
|
||||
return;
|
||||
@@ -91,8 +87,6 @@ public class ModifyPswdActivity extends BaseActivity<ActivityModifyPswdBinding>
|
||||
}
|
||||
|
||||
register(view.getId());
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,10 +136,7 @@ public class ModifyPswdActivity extends BaseActivity<ActivityModifyPswdBinding>
|
||||
setToast(resultcode.msg);
|
||||
return;
|
||||
}
|
||||
switch (getcode1) {
|
||||
|
||||
|
||||
case R.id.register:
|
||||
if (getcode1 == R.id.register) {
|
||||
setToast("修改密码成功");
|
||||
mDataBinding.getRoot().postDelayed(new Runnable() {
|
||||
@Override
|
||||
@@ -153,9 +144,6 @@ public class ModifyPswdActivity extends BaseActivity<ActivityModifyPswdBinding>
|
||||
finish();
|
||||
}
|
||||
},1500);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -63,8 +63,7 @@ public class NewsDetailActivity extends BaseActivity<ActivityNewsDetailBinding>
|
||||
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
|
||||
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
|
||||
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
|
||||
webSettings.setAppCachePath(getPackageCodePath()+"/myapp");
|
||||
webSettings.setAppCacheMaxSize(10000);
|
||||
// setAppCachePath 和 setAppCacheMaxSize 已在 API 33 中移除,使用默认缓存设置
|
||||
//webview.loadUrl("www.baidu.com");
|
||||
webview.setWebViewClient(new WebViewClient(){
|
||||
@Override
|
||||
|
||||
@@ -74,10 +74,8 @@ public class RegisterActivity extends BaseActivity<ActivityRegisterBinding> impl
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
|
||||
|
||||
case R.id.getcode:
|
||||
int id = view.getId();
|
||||
if (id == R.id.getcode) {
|
||||
if (mDataBinding.registerphone.getText().toString().length() < 1) {
|
||||
setToast(getString(R.string.me_input_phone_tip));
|
||||
return;
|
||||
@@ -87,8 +85,7 @@ public class RegisterActivity extends BaseActivity<ActivityRegisterBinding> impl
|
||||
return;
|
||||
}
|
||||
getMesgCode(R.id.getcode);
|
||||
break;
|
||||
case R.id.register:
|
||||
} else if (id == R.id.register) {
|
||||
if (mDataBinding.registerphone.getText().toString().length() == 0) {
|
||||
setToast(getString(R.string.me_input_phone_tip));
|
||||
return;
|
||||
@@ -142,8 +139,6 @@ public class RegisterActivity extends BaseActivity<ActivityRegisterBinding> impl
|
||||
}
|
||||
|
||||
register(view.getId());
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,13 +199,10 @@ public class RegisterActivity extends BaseActivity<ActivityRegisterBinding> impl
|
||||
mDataBinding.getcode.setClickable(true);
|
||||
return;
|
||||
}
|
||||
switch (getcode1) {
|
||||
case R.id.getcode:
|
||||
if (getcode1 == R.id.getcode) {
|
||||
setToast(getString(R.string.megissucess));
|
||||
startTimer();
|
||||
break;
|
||||
|
||||
case R.id.register:
|
||||
} else if (getcode1 == R.id.register) {
|
||||
setToast(getString(R.string.registersucess));
|
||||
Gson gs = new Gson();
|
||||
LinkedTreeMap adta = (LinkedTreeMap) resultcode.data;
|
||||
@@ -227,9 +219,6 @@ public class RegisterActivity extends BaseActivity<ActivityRegisterBinding> impl
|
||||
}
|
||||
});
|
||||
new XPopup.Builder(RegisterActivity.this).asCustom(bindHouseDialog).show();
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -63,8 +63,7 @@ public class RegisterAgreementActivity extends BaseActivity<ActivityRegisterAgre
|
||||
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
|
||||
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
|
||||
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
|
||||
webSettings.setAppCachePath(getPackageCodePath()+"/myapp");
|
||||
webSettings.setAppCacheMaxSize(10000);
|
||||
// setAppCachePath 和 setAppCacheMaxSize 已在 API 33 中移除,使用默认缓存设置
|
||||
//webview.loadUrl("www.baidu.com");
|
||||
webview.setWebViewClient(new WebViewClient(){
|
||||
@Override
|
||||
|
||||
@@ -88,36 +88,29 @@ public class SettingActivity extends BaseActivity<ActivitySettingBinding> implem
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent intent = null;
|
||||
switch (view.getId()) {
|
||||
|
||||
case R.id.id0:
|
||||
int id = view.getId();
|
||||
if (id == R.id.id0) {
|
||||
intent = new Intent(SettingActivity.this, ModifyPswdActivity.class);
|
||||
startActivity(intent);
|
||||
break;
|
||||
case R.id.id3:
|
||||
} else if (id == R.id.id3) {
|
||||
// intent = new Intent(SettingActivity.this, AboutusActivity.class);
|
||||
// startActivity(intent);
|
||||
WebActivitytwo.runActivity(SettingActivity.this, "关于我们", "https://wy.dou1.net/articlemobile/index/detail?article_id=3");
|
||||
break;
|
||||
case R.id.id2:
|
||||
} else if (id == R.id.id2) {
|
||||
intent = new Intent(SettingActivity.this, AdeviseActivity.class);
|
||||
startActivity(intent);
|
||||
break;
|
||||
case R.id.id1:
|
||||
} else if (id == R.id.id1) {
|
||||
progressDialog.setMessage("正在清理...");
|
||||
|
||||
progressDialog.setCancelable(false);
|
||||
progressDialog.show();
|
||||
handler.sendEmptyMessage(1);
|
||||
|
||||
break;
|
||||
case R.id.loginout:
|
||||
} else if (id == R.id.loginout) {
|
||||
JPushInterface.deleteAlias(getApplicationContext(),0);
|
||||
Config.getInstance(SettingActivity.this).DeleteUser();
|
||||
MyApplication.getApp().existActivitys();
|
||||
intent = new Intent(SettingActivity.this, LoginActivity.class);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ public class WebActivitytwo extends AppCompatActivity implements View.OnClickLis
|
||||
webSettings.setBlockNetworkImage(false);//解决图片不显示
|
||||
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
|
||||
webSettings.setLoadsImagesAutomatically(true);
|
||||
webSettings.setAppCacheEnabled(true);
|
||||
// setAppCacheEnabled 已在 API 33 中移除,使用默认缓存设置
|
||||
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
|
||||
// webView.getSettings().setJavaScriptEnabled(true);
|
||||
webSettings.setSupportZoom(true);
|
||||
@@ -98,14 +98,9 @@ public class WebActivitytwo extends AppCompatActivity implements View.OnClickLis
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
default:
|
||||
break;
|
||||
case R.id.webView:
|
||||
break;
|
||||
case R.id.layTop_left_tv:
|
||||
int id = v.getId();
|
||||
if (id == R.id.layTop_left_tv) {
|
||||
finish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -410,7 +410,7 @@ public class AddDiscoveryActivity extends BaseActivity<ActivityAddDiscoveryBindi
|
||||
//界面中缩略图的质量
|
||||
.thumbnailScale(0.8f)
|
||||
//蓝色主题
|
||||
.theme(R.style.Matisse_Zhihu)
|
||||
.theme(R.style.Matisse_Zhihu_Custom)
|
||||
//Picasso加载方式
|
||||
.imageEngine(new PicassoEngine())
|
||||
//请求码
|
||||
|
||||
@@ -173,7 +173,7 @@ public class DiscoveryFragment extends BaseFragment<FragmentDiscoveryBinding> im
|
||||
//界面中缩略图的质量
|
||||
.thumbnailScale(0.8f)
|
||||
//蓝色主题
|
||||
.theme(R.style.Matisse_Zhihu)
|
||||
.theme(R.style.Matisse_Zhihu_Custom)
|
||||
//Picasso加载方式
|
||||
.imageEngine(new PicassoEngine())
|
||||
//请求码
|
||||
|
||||
@@ -119,8 +119,8 @@ public class AddAcarActivity extends BaseActivity<ActivityAddAcarBinding> implem
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.save:
|
||||
int id = view.getId();
|
||||
if (id == R.id.save) {
|
||||
if (mDataBinding.editcarnumber.getText().toString().length() < 2) {
|
||||
setToast(2, mDataBinding.editcarnumber.getHint().toString());
|
||||
return;
|
||||
@@ -175,7 +175,6 @@ public class AddAcarActivity extends BaseActivity<ActivityAddAcarBinding> implem
|
||||
|
||||
|
||||
getGankList(ApiConfig.BASE_URL, map, getResources().getString(R.string.save), type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -333,8 +333,7 @@ public class HousekeepingActivity extends BaseActivity<ActivityHousekeepingBindi
|
||||
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
|
||||
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
|
||||
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
|
||||
webSettings.setAppCachePath(getPackageCodePath() + "/myapp");
|
||||
webSettings.setAppCacheMaxSize(10000);
|
||||
// setAppCachePath 和 setAppCacheMaxSize 已在 API 33 中移除,使用默认缓存设置
|
||||
//webview.loadUrl("www.baidu.com");
|
||||
webview.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
|
||||
@@ -572,8 +572,8 @@ private String userHomeId="";
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.save:
|
||||
int id = view.getId();
|
||||
if (id == R.id.save) {
|
||||
if (mDataBinding.titile.getText().toString().trim().length() < 1) {
|
||||
setToast("请输入标题");
|
||||
return;
|
||||
@@ -612,13 +612,9 @@ private String userHomeId="";
|
||||
}
|
||||
|
||||
douploadimges();
|
||||
break;
|
||||
case R.id.time:
|
||||
} else if (id == R.id.time) {
|
||||
initDatePicker();
|
||||
break;
|
||||
|
||||
case R.id.typeText: {
|
||||
|
||||
} else if (id == R.id.typeText) {
|
||||
final MyBottomSheetDialog dialog = new MyBottomSheetDialog(this);
|
||||
SelectRepairWayDialog selectGenderDialog = new SelectRepairWayDialog(this, new SelectRepairWayDialog.SelectedItemOnClickListener() {
|
||||
@Override
|
||||
@@ -640,9 +636,6 @@ private String userHomeId="";
|
||||
});
|
||||
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
||||
dialog.applyStyle(com.rey.material.R.style.Material_App_BottomSheetDialog).contentView(selectGenderDialog).cancelable(true).inDuration(100).heightParam(ViewGroup.LayoutParams.WRAP_CONTENT).show();
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -451,9 +451,8 @@ public class MyUserMessage extends BaseActivity<ActivityMyUserMessageBinding>
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.mybirthday:
|
||||
|
||||
int id = view.getId();
|
||||
if (id == R.id.mybirthday) {
|
||||
final String[] a = {""};
|
||||
|
||||
final DateTimeUtils dateTimeUtils = new DateTimeUtils(MyUserMessage.this);
|
||||
@@ -484,10 +483,7 @@ public class MyUserMessage extends BaseActivity<ActivityMyUserMessageBinding>
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
break;
|
||||
case R.id.mymale:
|
||||
|
||||
} else if (id == R.id.mymale) {
|
||||
// final PopwindowLayoutGenderBinding popView = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.popwindow_layout_gender, null, false);
|
||||
//
|
||||
// final PopupWindowHelper popupWindowHelper = new PopupWindowHelper(popView.getRoot());
|
||||
@@ -531,12 +527,8 @@ public class MyUserMessage extends BaseActivity<ActivityMyUserMessageBinding>
|
||||
});
|
||||
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
||||
dialog.applyStyle(com.rey.material.R.style.Material_App_BottomSheetDialog).contentView(selectGenderDialog).cancelable(true).inDuration(100).heightParam(ViewGroup.LayoutParams.WRAP_CONTENT).show();
|
||||
|
||||
break;
|
||||
|
||||
case R.id.nickNameView:
|
||||
|
||||
|
||||
} else if (id == R.id.nickNameView) {
|
||||
// Handle nickNameView click
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -423,9 +423,8 @@ public class MyshopEditAcitivity extends BaseActivity<ActivityMyshopEditAcitivit
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.save:
|
||||
|
||||
int id = view.getId();
|
||||
if (id == R.id.save) {
|
||||
if (mDataBinding.editTitile.getText().toString().trim().length() < 1) {
|
||||
setToast("请输入标题");
|
||||
return;
|
||||
@@ -447,10 +446,6 @@ public class MyshopEditAcitivity extends BaseActivity<ActivityMyshopEditAcitivit
|
||||
return;
|
||||
}
|
||||
douploadimges();
|
||||
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -404,9 +404,8 @@ public class MyshopModifyAcitivity extends BaseActivity<ActivityMyshopEditAcitiv
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.save:
|
||||
|
||||
int id = view.getId();
|
||||
if (id == R.id.save) {
|
||||
if (mDataBinding.editTitile.getText().toString().trim().length() < 1) {
|
||||
setToast("请输入标题");
|
||||
return;
|
||||
@@ -428,10 +427,6 @@ public class MyshopModifyAcitivity extends BaseActivity<ActivityMyshopEditAcitiv
|
||||
return;
|
||||
}
|
||||
douploadimges();
|
||||
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -343,10 +343,8 @@ public class ConfirmCarmoneyDialog extends Dialog {
|
||||
public void onClick(View v) {
|
||||
// TODO Auto-generated method stub
|
||||
int id = v.getId();
|
||||
switch (id) {
|
||||
case R.id.title1:
|
||||
if (id == R.id.title1) {
|
||||
clickListenerInterface.doConfirm();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,12 +89,8 @@ public class ConfirmDialog extends Dialog {
|
||||
public void onClick(View v) {
|
||||
// TODO Auto-generated method stub
|
||||
int id = v.getId();
|
||||
switch (id) {
|
||||
case R.id.title1:
|
||||
if (id == R.id.title1) {
|
||||
clickListenerInterface.doConfirm();
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -86,12 +86,8 @@ public class ConfirmForGaranteeDetailDialog extends Dialog {
|
||||
public void onClick(View v) {
|
||||
// TODO Auto-generated method stub
|
||||
int id = v.getId();
|
||||
switch (id) {
|
||||
case R.id.title1:
|
||||
if (id == R.id.title1) {
|
||||
clickListenerInterface.doConfirm();
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -94,12 +94,8 @@ public class ConfirmViewDialog extends Dialog {
|
||||
public void onClick(View v) {
|
||||
// TODO Auto-generated method stub
|
||||
int id = v.getId();
|
||||
switch (id) {
|
||||
case R.id.title1:
|
||||
if (id == R.id.title1) {
|
||||
clickListenerInterface.doConfirm();
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,23 +40,17 @@ public class MyRadioButton extends RadioButton {
|
||||
int n = a.getIndexCount();
|
||||
for (int i = 0; i < n; i++) {
|
||||
int attr = a.getIndex(i);
|
||||
switch (attr) {
|
||||
case R.styleable.MyRadioButton_drawableSize:
|
||||
if (attr == R.styleable.MyRadioButton_drawableSize) {
|
||||
mDrawableSize = a.getDimensionPixelSize(R.styleable.MyRadioButton_drawableSize, 50);
|
||||
break;
|
||||
case R.styleable.MyRadioButton_drawableTop:
|
||||
} else if (attr == R.styleable.MyRadioButton_drawableTop) {
|
||||
drawableTop = a.getDrawable(attr);
|
||||
break;
|
||||
case R.styleable.MyRadioButton_drawableBottom:
|
||||
} else if (attr == R.styleable.MyRadioButton_drawableBottom) {
|
||||
drawableRight = a.getDrawable(attr);
|
||||
break;
|
||||
case R.styleable.MyRadioButton_drawableRight:
|
||||
} else if (attr == R.styleable.MyRadioButton_drawableRight) {
|
||||
drawableBottom = a.getDrawable(attr);
|
||||
break;
|
||||
case R.styleable.MyRadioButton_drawableLeft:
|
||||
} else if (attr == R.styleable.MyRadioButton_drawableLeft) {
|
||||
drawableLeft = a.getDrawable(attr);
|
||||
break;
|
||||
default:
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -354,8 +354,8 @@ public class SelectPicDanimicActivity extends Activity implements OnClickListene
|
||||
}
|
||||
}
|
||||
|
||||
switch (v.getId()) {
|
||||
case R.id.btn_take_photo:
|
||||
int id = v.getId();
|
||||
if (id == R.id.btn_take_photo) {
|
||||
try {
|
||||
|
||||
|
||||
@@ -378,8 +378,7 @@ public class SelectPicDanimicActivity extends Activity implements OnClickListene
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
break;
|
||||
case R.id.btn_pick_photo:
|
||||
} else if (id == R.id.btn_pick_photo) {
|
||||
try {
|
||||
//选择照片的时候也一样,我们用Action为Intent.ACTION_GET_CONTENT,
|
||||
//有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
|
||||
@@ -396,12 +395,8 @@ public class SelectPicDanimicActivity extends Activity implements OnClickListene
|
||||
startActivityForResult(intent, 2);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
}
|
||||
break;
|
||||
case R.id.btn_cancel:
|
||||
} else if (id == R.id.btn_cancel) {
|
||||
finish();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
9
app/src/main/res/drawable/picture_image_placeholder.xml
Normal file
9
app/src/main/res/drawable/picture_image_placeholder.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#E0E0E0" />
|
||||
<size
|
||||
android:width="200dp"
|
||||
android:height="200dp" />
|
||||
</shape>
|
||||
|
||||
@@ -36,4 +36,10 @@
|
||||
<attr name="tvTextSize" format="dimension"/>
|
||||
<attr name="btnTextSize" format="dimension"/>
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="SnackbarLayout">
|
||||
<attr name="android:maxWidth" />
|
||||
<attr name="maxActionInlineWidth" format="dimension" />
|
||||
<attr name="elevation" format="dimension" />
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
@@ -1,2 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<dimen name="design_snackbar_padding_vertical">14dp</dimen>
|
||||
<dimen name="design_snackbar_padding_vertical_2lines">20dp</dimen>
|
||||
</resources>
|
||||
@@ -135,4 +135,11 @@
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
</style>
|
||||
|
||||
<!-- Matisse 图片选择器主题 -->
|
||||
<style name="Matisse_Zhihu_Custom" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
32
build.gradle
32
build.gradle
@@ -2,13 +2,23 @@
|
||||
|
||||
buildscript {
|
||||
|
||||
ext {
|
||||
agp_version = '8.7.3'
|
||||
kotlin_version = '1.9.24'
|
||||
}
|
||||
repositories {
|
||||
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
|
||||
maven { url 'https://maven.aliyun.com/repository/public' }//jcenter
|
||||
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }//gradle-plugin
|
||||
maven { url 'https://maven.aliyun.com/repository/central' }//central
|
||||
maven { url 'https://maven.aliyun.com/repository/google' }//google
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
maven { url "https://jitpack.io" }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:4.2.2'
|
||||
|
||||
classpath "com.android.tools.build:gradle:$agp_version"
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
@@ -17,9 +27,21 @@ buildscript {
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
jcenter()
|
||||
maven { url "https://jitpack.io" }
|
||||
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
|
||||
maven { url 'https://maven.aliyun.com/repository/public' }//jcenter
|
||||
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }//gradle-plugin
|
||||
maven { url 'https://maven.aliyun.com/repository/central' }//central
|
||||
maven { url 'https://maven.aliyun.com/repository/google' }//google
|
||||
google()
|
||||
mavenCentral()
|
||||
maven { url "https://jitpack.io" }
|
||||
}
|
||||
|
||||
// 统一配置所有 Kotlin 编译任务的 JVM 目标版本
|
||||
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
|
||||
kotlinOptions {
|
||||
jvmTarget = '1.8'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,3 +14,16 @@ org.gradle.jvmargs=-Xmx1536m
|
||||
android.injected.testOnly=false
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
||||
# SSL Certificate handling - fixes PKIX path building failed error
|
||||
# Use JKS for Java 11+ compatibility
|
||||
systemProp.javax.net.ssl.trustStoreType=JKS
|
||||
|
||||
# If you still encounter SSL errors, you can temporarily disable SSL verification
|
||||
# WARNING: Only use this for development, not in production!
|
||||
# Uncomment the following lines as a last resort:
|
||||
# org.gradle.jvmargs=-Xmx1536m -Dtrust_all_cert=true
|
||||
|
||||
android.enableJetifier=true
|
||||
# Suppress deprecation warnings for Java 8 source/target
|
||||
android.javaCompile.suppressSourceTargetDeprecationWarning=true
|
||||
6
gradle/wrapper/gradle-wrapper.properties
vendored
6
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
#Wed Dec 08 14:35:23 CST 2021
|
||||
#Wed Jan 07 00:50:53 CST 2026
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
apply plugin: 'com.android.library'
|
||||
android {
|
||||
compileSdkVersion 30
|
||||
buildToolsVersion '30.0.2'
|
||||
namespace "com.lzy.ninegrid"
|
||||
compileSdkVersion 33
|
||||
// buildToolsVersion 在 AGP 8.0+ 中不再需要,会自动使用默认版本
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 21
|
||||
@@ -21,10 +22,10 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile fileTree(include: ['*.jar'], dir: 'libs')
|
||||
compile 'androidx.appcompat:appcompat:1.0.0'
|
||||
compile 'androidx.annotation:annotation:1.0.0'
|
||||
compile 'com.github.chrisbanes.photoview:library:1.2.4'
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation 'androidx.appcompat:appcompat:1.0.0'
|
||||
implementation 'androidx.annotation:annotation:1.0.0'
|
||||
implementation 'com.github.chrisbanes.photoview:library:1.2.4'
|
||||
|
||||
|
||||
implementation files('../app/libs/pldroid-player-2.1.9.jar')
|
||||
|
||||
452
当前项目配置环境.txt
Normal file
452
当前项目配置环境.txt
Normal file
@@ -0,0 +1,452 @@
|
||||
# Android 项目配置环境文档
|
||||
|
||||
## 一、项目基本信息
|
||||
|
||||
### 1.1 项目信息
|
||||
- **项目名称**: HouseProperty (房产物业管理)
|
||||
- **包名**: com.sl.HouseProperty
|
||||
- **命名空间**: com.sl.house_property
|
||||
- **版本号**: 1.1.9
|
||||
- **版本代码**: 119
|
||||
- **项目路径**: D:\Users\86181\AndroidStudioProjects\HouseProperty
|
||||
|
||||
### 1.2 应用配置
|
||||
- **ApplicationId**: com.sl.HouseProperty
|
||||
- **最小SDK版本**: 21 (Android 5.0 Lollipop)
|
||||
- **目标SDK版本**: 29 (Android 10)
|
||||
- **编译SDK版本**: 33 (Android 13)
|
||||
- **测试运行器**: androidx.test.runner.AndroidJUnitRunner
|
||||
|
||||
---
|
||||
|
||||
## 二、开发环境配置
|
||||
|
||||
### 2.1 Java 环境
|
||||
- **系统Java版本**: 1.8.0_101 (Java 8)
|
||||
- **项目要求Java版本**: Java 11+ (推荐使用 Android Studio JDK 21)
|
||||
- **JAVA_HOME**: C:\Program Files\Android\Android Studio1\jbr
|
||||
- **编译目标**: Java 8 (sourceCompatibility & targetCompatibility)
|
||||
- **Kotlin JVM目标**: 1.8
|
||||
|
||||
⚠️ **注意**: 项目要求Java 11+,但系统Java是1.8,需要使用Android Studio内置JDK
|
||||
|
||||
### 2.2 Android SDK 环境
|
||||
- **ANDROID_HOME**: C:\Users\86181\AppData\Local\Android\Sdk
|
||||
- **SDK路径**: C:\Users\86181\AppData\Local\Android\Sdk
|
||||
- **NDK配置**:
|
||||
- ABI过滤器: armeabi-v7a
|
||||
- 支持的架构: armeabi, armeabi-v7a, arm64-v8a, x86
|
||||
|
||||
### 2.3 构建工具版本
|
||||
|
||||
#### Gradle 配置
|
||||
- **Gradle版本**: 8.9
|
||||
- **Gradle分发URL**: https://services.gradle.org/distributions/gradle-8.9-bin.zip
|
||||
- **Gradle用户目录**: GRADLE_USER_HOME
|
||||
- **Gradle JVM参数**: -Xmx1536m
|
||||
|
||||
#### Android Gradle Plugin (AGP)
|
||||
- **AGP版本**: 8.7.3
|
||||
- **构建工具**: 自动使用默认版本(AGP 8.0+不再需要buildToolsVersion)
|
||||
|
||||
#### Kotlin 配置
|
||||
- **Kotlin版本**: 1.9.24
|
||||
- **Kotlin插件**: org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.24
|
||||
- **Kotlin标准库**: kotlin-stdlib:1.9.24
|
||||
|
||||
---
|
||||
|
||||
## 三、项目模块结构
|
||||
|
||||
### 3.1 模块列表
|
||||
```
|
||||
HouseProperty/
|
||||
├── app/ # 主应用模块
|
||||
└── ninegridview/ # 自定义九宫格图片显示模块
|
||||
```
|
||||
|
||||
### 3.2 模块配置
|
||||
- **主模块**: app (com.android.application)
|
||||
- **子模块**: ninegridview (library)
|
||||
- **模块依赖**: app 依赖 ninegridview
|
||||
|
||||
---
|
||||
|
||||
## 四、构建配置
|
||||
|
||||
### 4.1 构建类型 (Build Types)
|
||||
|
||||
#### Debug 构建
|
||||
- **代码混淆**: 禁用 (minifyEnabled false)
|
||||
- **签名配置**: defaultSignature
|
||||
- **调试信息**: 包含
|
||||
|
||||
#### Release 构建
|
||||
- **代码混淆**: 禁用 (minifyEnabled false) ⚠️ **安全风险**
|
||||
- **签名配置**: 已注释(未启用)
|
||||
- **ProGuard规则**: proguard-android.txt + proguard-rules.pro
|
||||
|
||||
### 4.2 签名配置
|
||||
```gradle
|
||||
signingConfigs {
|
||||
defaultSignature {
|
||||
keyAlias: 'key0'
|
||||
keyPassword: 'haotian'
|
||||
storeFile: 'haotian.jks'
|
||||
storePassword: 'haotian'
|
||||
}
|
||||
}
|
||||
```
|
||||
⚠️ **安全警告**: 签名密钥硬编码在build.gradle中,存在安全风险
|
||||
|
||||
### 4.3 打包配置
|
||||
- **排除文件**:
|
||||
- META-INF/DEPENDENCIES
|
||||
- META-INF/NOTICE
|
||||
- META-INF/LICENSE
|
||||
- META-INF/LICENSE.txt
|
||||
- META-INF/NOTICE.txt
|
||||
|
||||
### 4.4 资源处理
|
||||
- **AAPT选项**:
|
||||
- cruncherEnabled: false
|
||||
- useNewCruncher: false (已废弃)
|
||||
- **资源目录**:
|
||||
- assets: src/main/assets
|
||||
- jniLibs: libs
|
||||
|
||||
### 4.5 Lint 配置
|
||||
- **错误中断**: 禁用 (abortOnError false)
|
||||
- **警告**: 不中断构建
|
||||
|
||||
---
|
||||
|
||||
## 五、功能特性配置
|
||||
|
||||
### 5.1 已启用特性
|
||||
- ✅ **DataBinding**: 已启用
|
||||
- ✅ **MultiDex**: 已配置(androidx.multidex:multidex:2.0.1)
|
||||
- ✅ **AndroidX**: 已启用 (android.useAndroidX=true)
|
||||
- ✅ **Jetifier**: 已启用 (android.enableJetifier=true)
|
||||
|
||||
### 5.2 Manifest占位符
|
||||
```gradle
|
||||
manifestPlaceholders = [
|
||||
JPUSH_PKGNAME: applicationId,
|
||||
JPUSH_APPKEY: "4b6e03f9cc9466efbc0b2528",
|
||||
JPUSH_CHANNEL: "developer-default"
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、依赖库配置
|
||||
|
||||
### 6.1 仓库配置 (Repositories)
|
||||
|
||||
#### Maven 仓库
|
||||
1. **阿里云Maven镜像** (主要仓库)
|
||||
- https://maven.aliyun.com/nexus/content/groups/public/
|
||||
- https://maven.aliyun.com/repository/public
|
||||
- https://maven.aliyun.com/repository/gradle-plugin
|
||||
- https://maven.aliyun.com/repository/central
|
||||
- https://maven.aliyun.com/repository/google
|
||||
|
||||
2. **官方仓库**
|
||||
- Google Maven
|
||||
- Maven Central
|
||||
- JitPack
|
||||
|
||||
3. **本地仓库**
|
||||
- flatDir: libs目录
|
||||
|
||||
### 6.2 核心依赖库
|
||||
|
||||
#### Kotlin 相关
|
||||
- kotlin-stdlib: 1.9.24
|
||||
- kotlin-gradle-plugin: 1.9.24
|
||||
|
||||
#### AndroidX / Support Library
|
||||
- androidx.multidex:multidex: 2.0.1
|
||||
- com.android.support:appcompat-v7: 28.0.0 ⚠️ **应迁移到AndroidX**
|
||||
|
||||
#### 网络请求
|
||||
- com.squareup.retrofit2:retrofit: 2.1.0 ⚠️ **版本过旧(2016年)**
|
||||
- com.squareup.retrofit2:converter-gson: 2.1.0
|
||||
- com.squareup.retrofit2:adapter-rxjava: 2.1.0
|
||||
- com.squareup.okhttp3:logging-interceptor: 3.4.1
|
||||
- com.lzy.net:okgo: 3.0.4
|
||||
- com.lzy.net:okrx2: 2.0.2
|
||||
|
||||
#### 响应式编程
|
||||
- io.reactivex:rxjava: 1.1.0 ⚠️ **版本过旧,已停止维护**
|
||||
- io.reactivex:rxandroid: 1.1.0
|
||||
- io.reactivex.rxjava2:rxjava: 2.1.5 ⚠️ **混用RxJava 1和2**
|
||||
- io.reactivex.rxjava2:rxandroid: 2.1.1
|
||||
- com.trello:rxlifecycle: + (最新版本)
|
||||
- com.trello:rxlifecycle-components: + (最新版本)
|
||||
|
||||
#### 图片加载
|
||||
- com.github.bumptech.glide:glide: 4.9.0 ✅
|
||||
- com.squareup.picasso:picasso: 2.5.2 ⚠️ **与Glide混用,建议移除**
|
||||
- com.github.chrisbanes:PhotoView: 2.0.0
|
||||
|
||||
#### JSON 处理
|
||||
- com.google.code.gson:gson: 2.6.2 ⚠️ **版本过旧(2016年)**
|
||||
|
||||
#### UI 组件
|
||||
- com.scwang.smartrefresh:SmartRefreshLayout: 1.1.0
|
||||
- com.gyf.immersionbar:immersionbar: 3.0.0
|
||||
- com.lxj:xpopup: 1.8.10
|
||||
- com.youth.banner:banner: 1.4.10
|
||||
- com.jcodecraeer:xrecyclerview: 1.3.2
|
||||
- com.github.CymChad:BaseRecyclerViewAdapterHelper: 2.9.30
|
||||
- com.nineoldandroids:library: 2.4.0
|
||||
|
||||
#### 数据库
|
||||
- com.j256.ormlite:ormlite-core: 5.1
|
||||
- com.j256.ormlite:ormlite-android: 5.1
|
||||
|
||||
#### 权限管理
|
||||
- com.hjq:xxpermissions: 5.5
|
||||
- com.tbruyelle.rxpermissions2:rxpermissions: 0.9.5
|
||||
|
||||
#### 图片/视频选择
|
||||
- com.zhihu.android:matisse: 0.5.3-beta3
|
||||
- io.github.lucksiege:pictureselector: v2.7.3-rc05
|
||||
- fm.jiecao:jiecaovideoplayer: 4.8.3
|
||||
|
||||
#### 支付相关
|
||||
- alipaySdk-15.5.9.aar (本地AAR)
|
||||
- com.tencent.mm.opensdk:wechat-sdk-android-without-mta: + (最新版本)
|
||||
|
||||
#### 推送服务
|
||||
- cn.jiguang.sdk:jpush: 3.6.6
|
||||
- cn.jiguang.sdk:jcore: 2.3.8
|
||||
|
||||
#### 其他工具库
|
||||
- com.tencent.bugly:crashreport: latest.release
|
||||
- top.zibin:Luban: 1.1.8 (图片压缩)
|
||||
- com.google.zxing:core: 3.3.0 (二维码)
|
||||
- tech.wangjie:qrcodetools: 1.0.0
|
||||
- liji.library.dev:citypickerview: 5.2.2
|
||||
- me.jessyan:autosize: 1.1.2 (屏幕适配)
|
||||
- com.arialyy.aria:Aria: 3.1.1 (下载框架)
|
||||
- net.dankito.richtexteditor:richtexteditor-android: 2.0.8
|
||||
|
||||
### 6.3 本地依赖 (libs目录)
|
||||
|
||||
#### AAR 文件
|
||||
- alipaySdk-15.5.9.aar (支付宝SDK)
|
||||
- cutil-release.aar (自定义工具库)
|
||||
- selectpicker-release.aar (选择器)
|
||||
- gifdecoder-4.5.0.aar
|
||||
- glide-4.5.0.aar
|
||||
- glide-4.6.1.aar
|
||||
- material-1.2.5.aar
|
||||
- PhotoView-2.0.0.aar
|
||||
|
||||
#### JAR 文件
|
||||
- fastjson-1.2.7.jar
|
||||
- pldroid-player-2.1.9.jar (播放器SDK)
|
||||
|
||||
#### 本地SO库 (Native Libraries)
|
||||
- **armeabi-v7a**:
|
||||
- libqcOpenSSL.so
|
||||
- libQPlayer.so
|
||||
- **armeabi**:
|
||||
- libqcOpenSSL.so
|
||||
- libQPlayer.so
|
||||
- **arm64-v8a**:
|
||||
- libqcOpenSSL.so
|
||||
- libQPlayer.so
|
||||
- **x86**:
|
||||
- libqcOpenSSL.so
|
||||
- libQPlayer.so
|
||||
|
||||
---
|
||||
|
||||
## 七、Gradle 配置详情
|
||||
|
||||
### 7.1 gradle.properties 配置
|
||||
```properties
|
||||
# JVM参数
|
||||
org.gradle.jvmargs=-Xmx1536m
|
||||
|
||||
# AndroidX配置
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
||||
# 测试配置
|
||||
android.injected.testOnly=false
|
||||
|
||||
# Java编译配置
|
||||
android.javaCompile.suppressSourceTargetDeprecationWarning=true
|
||||
|
||||
# SSL证书配置
|
||||
systemProp.javax.net.ssl.trustStoreType=JKS
|
||||
```
|
||||
|
||||
### 7.2 local.properties 配置
|
||||
```properties
|
||||
sdk.dir=C\:\\Users\\86181\\AppData\\Local\\Android\\Sdk
|
||||
```
|
||||
|
||||
### 7.3 settings.gradle 配置
|
||||
```gradle
|
||||
include ':app',':ninegridview'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、编译环境要求
|
||||
|
||||
### 8.1 必需环境
|
||||
- ✅ **JDK**: Java 11+ (推荐 Android Studio JDK 21)
|
||||
- ✅ **Android SDK**: API Level 33
|
||||
- ✅ **Gradle**: 8.9
|
||||
- ✅ **Android Gradle Plugin**: 8.7.3
|
||||
- ✅ **Kotlin**: 1.9.24
|
||||
|
||||
### 8.2 推荐环境变量设置
|
||||
```powershell
|
||||
# 设置Java环境(编译时使用)
|
||||
$env:JAVA_HOME="C:\Program Files\Android\Android Studio1\jbr"
|
||||
|
||||
# 设置Android SDK路径
|
||||
$env:ANDROID_HOME="C:\Users\$env:USERNAME\AppData\Local\Android\Sdk"
|
||||
```
|
||||
|
||||
### 8.3 编译命令
|
||||
```bash
|
||||
# Debug版本编译
|
||||
$env:JAVA_HOME="C:\Program Files\Android\Android Studio1\jbr"; $env:ANDROID_HOME="C:\Users\$env:USERNAME\AppData\Local\Android\Sdk"; .\gradlew.bat assembleDebug
|
||||
|
||||
# Release版本编译
|
||||
$env:JAVA_HOME="C:\Program Files\Android\Android Studio1\jbr"; $env:ANDROID_HOME="C:\Users\$env:USERNAME\AppData\Local\Android\Sdk"; .\gradlew.bat assembleRelease
|
||||
|
||||
# 清理项目
|
||||
.\gradlew.bat clean
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、已知配置问题
|
||||
|
||||
### 9.1 ⚠️ 高优先级问题
|
||||
|
||||
1. **签名密钥硬编码**
|
||||
- 位置: app/build.gradle
|
||||
- 风险: 安全漏洞
|
||||
- 建议: 移至gradle.properties或使用密钥管理服务
|
||||
|
||||
2. **代码混淆未启用**
|
||||
- Release版本: minifyEnabled false
|
||||
- 风险: 代码容易被反编译
|
||||
- 建议: 启用混淆并配置规则
|
||||
|
||||
3. **依赖版本过旧**
|
||||
- Retrofit: 2.1.0 (2016年)
|
||||
- RxJava: 1.1.0 (已停止维护)
|
||||
- Gson: 2.6.2 (存在安全漏洞)
|
||||
- 建议: 升级到最新稳定版本
|
||||
|
||||
4. **混用多个版本库**
|
||||
- RxJava 1.x 和 RxJava 2.x 混用
|
||||
- Glide 和 Picasso 混用
|
||||
- 建议: 统一使用一个版本/库
|
||||
|
||||
### 9.2 ⚠️ 中优先级问题
|
||||
|
||||
1. **Support Library未完全迁移**
|
||||
- 仍使用 com.android.support:appcompat-v7:28.0.0
|
||||
- 建议: 完全迁移到AndroidX
|
||||
|
||||
2. **targetSdkVersion过旧**
|
||||
- 当前: 29 (Android 10)
|
||||
- 建议: 升级到33+ (Android 13)
|
||||
|
||||
3. **使用flatDir加载本地AAR**
|
||||
- 不推荐使用flatDir
|
||||
- 建议: 使用本地Maven仓库或发布到私有仓库
|
||||
|
||||
### 9.3 ⚠️ 低优先级问题
|
||||
|
||||
1. **Gradle JVM内存配置**
|
||||
- 当前: 1536m
|
||||
- 建议: 根据项目大小调整(建议2048m+)
|
||||
|
||||
2. **NDK ABI过滤器**
|
||||
- 当前: 仅支持 armeabi-v7a
|
||||
- 建议: 根据需求添加 arm64-v8a
|
||||
|
||||
---
|
||||
|
||||
## 十、环境检查清单
|
||||
|
||||
### 10.1 开发环境检查
|
||||
- [ ] JDK 11+ 已安装并配置
|
||||
- [ ] Android SDK 已安装(API 33)
|
||||
- [ ] Android Studio 已安装
|
||||
- [ ] Gradle 8.9 已下载
|
||||
- [ ] 环境变量已配置(JAVA_HOME, ANDROID_HOME)
|
||||
|
||||
### 10.2 项目配置检查
|
||||
- [ ] build.gradle 配置正确
|
||||
- [ ] local.properties 配置正确
|
||||
- [ ] gradle.properties 配置正确
|
||||
- [ ] 签名文件存在(haotian.jks)
|
||||
- [ ] 依赖库可正常下载
|
||||
|
||||
### 10.3 编译检查
|
||||
- [ ] 项目可正常同步
|
||||
- [ ] Debug版本可正常编译
|
||||
- [ ] Release版本可正常编译
|
||||
- [ ] 无编译错误和警告
|
||||
|
||||
---
|
||||
|
||||
## 十一、配置优化建议
|
||||
|
||||
### 11.1 立即优化
|
||||
1. 移除硬编码的签名密钥
|
||||
2. 启用Release版本代码混淆
|
||||
3. 升级关键依赖库版本
|
||||
|
||||
### 11.2 短期优化
|
||||
1. 统一依赖库版本(移除混用)
|
||||
2. 完全迁移到AndroidX
|
||||
3. 升级targetSdkVersion
|
||||
|
||||
### 11.3 长期优化
|
||||
1. 使用依赖版本管理(Version Catalog)
|
||||
2. 建立CI/CD流程
|
||||
3. 配置代码质量检查工具
|
||||
|
||||
---
|
||||
|
||||
## 十二、配置参考
|
||||
|
||||
### 12.1 推荐JDK配置
|
||||
```powershell
|
||||
# PowerShell环境变量设置(临时)
|
||||
$env:JAVA_HOME="C:\Program Files\Android\Android Studio1\jbr"
|
||||
$env:ANDROID_HOME="C:\Users\$env:USERNAME\AppData\Local\Android\Sdk"
|
||||
$env:PATH="$env:JAVA_HOME\bin;$env:ANDROID_HOME\platform-tools;$env:PATH"
|
||||
```
|
||||
|
||||
### 12.2 推荐Gradle配置
|
||||
```properties
|
||||
# gradle.properties
|
||||
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
|
||||
org.gradle.parallel=true
|
||||
org.gradle.caching=true
|
||||
org.gradle.daemon=true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**文档生成时间**: 2025年1月
|
||||
**项目路径**: D:\Users\86181\AndroidStudioProjects\HouseProperty
|
||||
**配置检查**: 基于当前项目文件分析
|
||||
|
||||
382
项目点评.txt
Normal file
382
项目点评.txt
Normal file
@@ -0,0 +1,382 @@
|
||||
# Android 房产物业管理项目 - 项目点评报告
|
||||
|
||||
## 项目概述
|
||||
- **项目名称**: HouseProperty (房产物业管理)
|
||||
- **包名**: com.sl.HouseProperty
|
||||
- **版本**: 1.1.9 (versionCode: 119)
|
||||
- **项目类型**: Android 原生应用
|
||||
- **开发语言**: Java + Kotlin 混合开发
|
||||
- **构建工具**: Gradle 8.9, Android Gradle Plugin 8.7.3
|
||||
|
||||
---
|
||||
|
||||
## 一、项目结构分析
|
||||
|
||||
### 1.1 目录结构
|
||||
✅ **优点**:
|
||||
- 模块化设计,包含主应用模块和 ninegridview 自定义模块
|
||||
- 代码按功能分类(user、discovery、order、cart等)
|
||||
- 工具类和实体类分离清晰
|
||||
|
||||
⚠️ **问题**:
|
||||
- 包结构层次较深,部分类组织不够清晰
|
||||
- 存在大量Activity类(122个Java文件),建议考虑Fragment化
|
||||
- 缺少统一的架构层(如Repository、ViewModel等)
|
||||
|
||||
### 1.2 代码组织
|
||||
- **Activity数量**: 约50+个Activity,数量较多
|
||||
- **Fragment使用**: 部分使用Fragment,但不够统一
|
||||
- **自定义View**: 有较多自定义View组件
|
||||
- **工具类**: utils和tools包下有较多工具类
|
||||
|
||||
---
|
||||
|
||||
## 二、技术栈评估
|
||||
|
||||
### 2.1 核心技术
|
||||
✅ **已采用**:
|
||||
- DataBinding(数据绑定)
|
||||
- Kotlin(部分使用)
|
||||
- Retrofit + RxJava(网络请求)
|
||||
- ORMLite(数据库)
|
||||
- Glide(图片加载)
|
||||
- 极光推送(JPush)
|
||||
|
||||
### 2.2 依赖库分析
|
||||
|
||||
#### ⚠️ **严重问题 - 依赖版本过旧**:
|
||||
|
||||
1. **Retrofit 2.1.0** (2016年版本)
|
||||
- 当前最新: 2.9.0+
|
||||
- 风险: 存在安全漏洞,功能缺失
|
||||
|
||||
2. **RxJava 1.1.0** (2016年版本)
|
||||
- 当前最新: RxJava 3.x
|
||||
- 风险: 已停止维护,性能问题
|
||||
|
||||
3. **Gson 2.6.2** (2016年版本)
|
||||
- 当前最新: 2.10.1+
|
||||
- 风险: 安全漏洞
|
||||
|
||||
4. **Picasso 2.5.2** (2016年版本)
|
||||
- 建议: 统一使用Glide,移除Picasso
|
||||
|
||||
5. **Support Library 28.0.0**
|
||||
- 问题: 应迁移到AndroidX
|
||||
- 当前项目已部分使用AndroidX,存在混用情况
|
||||
|
||||
#### ✅ **依赖管理建议**:
|
||||
- 统一使用AndroidX,移除Support Library
|
||||
- 升级所有依赖到最新稳定版本
|
||||
- 移除未使用的依赖(如Picasso,项目已使用Glide)
|
||||
- 使用依赖版本管理(version catalog)
|
||||
|
||||
### 2.3 第三方库使用情况
|
||||
- **网络库**: Retrofit + OkHttp + OkGo(混用,建议统一)
|
||||
- **图片加载**: Glide + Picasso(混用,建议只保留Glide)
|
||||
- **响应式编程**: RxJava 1.x + RxJava 2.x(混用,建议统一到RxJava 3)
|
||||
- **数据库**: ORMLite(较旧,建议迁移到Room)
|
||||
- **UI组件**: 大量自定义View和第三方UI库
|
||||
|
||||
---
|
||||
|
||||
## 三、代码质量分析
|
||||
|
||||
### 3.1 编译问题(已修复)
|
||||
✅ **已解决**:
|
||||
- Matisse样式资源冲突(已重命名为Matisse_Zhihu_Custom)
|
||||
- Switch语句中使用R.id问题(已改为if-else)
|
||||
- 语法错误(多余的花括号)
|
||||
|
||||
### 3.2 代码规范问题
|
||||
|
||||
#### ⚠️ **命名规范**:
|
||||
- 部分类名拼写错误:`MyshopEditAcitivity` → `MyshopEditActivity`
|
||||
- 部分类名不符合规范:`AddAnewGranteeActivity`(建议:`AddGranteeActivity`)
|
||||
- 变量命名不够统一
|
||||
|
||||
#### ⚠️ **代码结构**:
|
||||
- 大量Activity直接处理业务逻辑,缺少分层
|
||||
- 网络请求代码分散在各Activity中
|
||||
- 缺少统一的错误处理机制
|
||||
- 硬编码较多(如API地址、密钥等)
|
||||
|
||||
#### ⚠️ **注释和文档**:
|
||||
- 代码注释较少
|
||||
- 缺少类和方法级别的文档注释
|
||||
- 部分注释为中文,部分为英文,不统一
|
||||
|
||||
### 3.3 架构设计
|
||||
|
||||
#### ❌ **当前架构问题**:
|
||||
1. **无明确架构模式**
|
||||
- 传统MVC,但Model层不清晰
|
||||
- 业务逻辑直接写在Activity中
|
||||
- 缺少Repository层和ViewModel层
|
||||
|
||||
2. **BaseActivity使用**
|
||||
- ✅ 有BaseActivity基类,提供统一功能
|
||||
- ⚠️ 但子类仍然承担过多职责
|
||||
|
||||
3. **数据层**
|
||||
- 使用ORMLite,但缺少统一的数据访问层
|
||||
- 网络请求和本地存储逻辑分散
|
||||
|
||||
#### ✅ **架构改进建议**:
|
||||
1. **采用MVVM架构**
|
||||
- Activity/Fragment → ViewModel → Repository → DataSource
|
||||
- 使用LiveData或RxJava进行数据观察
|
||||
|
||||
2. **引入依赖注入**
|
||||
- 使用Dagger Hilt或Koin
|
||||
- 解耦组件依赖
|
||||
|
||||
3. **统一数据层**
|
||||
- Repository模式统一数据访问
|
||||
- Room替代ORMLite
|
||||
- 网络层统一封装
|
||||
|
||||
---
|
||||
|
||||
## 四、安全性分析
|
||||
|
||||
### 4.1 ⚠️ **严重安全问题**
|
||||
|
||||
1. **签名密钥硬编码**
|
||||
```gradle
|
||||
signingConfigs {
|
||||
defaultSignature {
|
||||
keyAlias 'key0'
|
||||
keyPassword 'haotian'
|
||||
storeFile file('haotian.jks')
|
||||
storePassword 'haotian'
|
||||
}
|
||||
}
|
||||
```
|
||||
**风险**: 密钥泄露,任何人都可以签名应用
|
||||
**建议**:
|
||||
- 使用gradle.properties存储密钥信息
|
||||
- 添加到.gitignore
|
||||
- 使用密钥管理服务
|
||||
|
||||
2. **API密钥硬编码**
|
||||
- JPush AppKey直接写在build.gradle中
|
||||
- 建议使用BuildConfig或配置文件
|
||||
|
||||
3. **ProGuard配置**
|
||||
- Release版本未启用代码混淆(minifyEnabled false)
|
||||
- 风险:代码容易被反编译
|
||||
- 建议:启用混淆,配置混淆规则
|
||||
|
||||
### 4.2 权限管理
|
||||
- 权限声明较多,部分可能未使用
|
||||
- 缺少运行时权限检查的统一封装
|
||||
- AndroidManifest中存在重复权限声明
|
||||
|
||||
---
|
||||
|
||||
## 五、性能分析
|
||||
|
||||
### 5.1 构建配置
|
||||
|
||||
#### ✅ **优点**:
|
||||
- 使用Gradle 8.9和AGP 8.7.3(较新版本)
|
||||
- 配置了Kotlin支持
|
||||
- 使用阿里云Maven镜像加速
|
||||
|
||||
#### ⚠️ **问题**:
|
||||
- targetSdkVersion 29(较旧,建议升级到33+)
|
||||
- minSdkVersion 21(Android 5.0),可考虑提升
|
||||
- 未启用代码混淆和资源压缩
|
||||
- 使用flatDir加载本地AAR(不推荐)
|
||||
|
||||
### 5.2 运行时性能
|
||||
|
||||
#### ⚠️ **潜在问题**:
|
||||
1. **内存管理**
|
||||
- Application中维护Activity列表(可能内存泄漏)
|
||||
- 缺少内存泄漏检测工具(如LeakCanary)
|
||||
|
||||
2. **网络请求**
|
||||
- 混用多个网络库,可能造成重复请求
|
||||
- 缺少请求缓存机制
|
||||
|
||||
3. **图片加载**
|
||||
- 同时使用Glide和Picasso,增加APK体积
|
||||
- 缺少图片压缩和缓存策略
|
||||
|
||||
4. **数据库**
|
||||
- ORMLite性能不如Room
|
||||
- 缺少数据库迁移机制
|
||||
|
||||
---
|
||||
|
||||
## 六、兼容性和维护性
|
||||
|
||||
### 6.1 Android版本兼容
|
||||
- **minSdkVersion**: 21 (Android 5.0) - 覆盖约95%设备
|
||||
- **targetSdkVersion**: 29 (Android 10) - 需要升级到33+
|
||||
- **compileSdkVersion**: 33 - 正常
|
||||
|
||||
### 6.2 代码维护性
|
||||
|
||||
#### ❌ **问题**:
|
||||
1. **代码重复**
|
||||
- 多个Activity中有相似的网络请求代码
|
||||
- 缺少统一的工具类封装
|
||||
|
||||
2. **耦合度高**
|
||||
- Activity之间直接跳转,缺少路由管理
|
||||
- 业务逻辑和UI耦合
|
||||
|
||||
3. **测试覆盖**
|
||||
- 未看到单元测试代码
|
||||
- 缺少UI测试
|
||||
|
||||
4. **版本控制**
|
||||
- 可能存在大文件未使用.gitignore
|
||||
- 签名文件应排除在版本控制外
|
||||
|
||||
---
|
||||
|
||||
## 七、功能完整性
|
||||
|
||||
### 7.1 核心功能模块
|
||||
根据代码分析,项目包含以下功能:
|
||||
- ✅ 用户登录/注册
|
||||
- ✅ 房产管理
|
||||
- ✅ 物业服务(报修、缴费等)
|
||||
- ✅ 发现/社区功能
|
||||
- ✅ 购物车/订单
|
||||
- ✅ 消息推送
|
||||
- ✅ 支付功能(支付宝、微信)
|
||||
|
||||
### 7.2 功能实现质量
|
||||
- 功能较完整,但代码组织需要优化
|
||||
- 部分功能可能存在边界情况处理不足
|
||||
|
||||
---
|
||||
|
||||
## 八、改进建议优先级
|
||||
|
||||
### 🔴 **高优先级(必须修复)**
|
||||
|
||||
1. **安全性问题**
|
||||
- [ ] 移除硬编码的签名密钥
|
||||
- [ ] 启用ProGuard代码混淆
|
||||
- [ ] 将敏感信息移至配置文件
|
||||
|
||||
2. **依赖升级**
|
||||
- [ ] 升级Retrofit到2.9.0+
|
||||
- [ ] 统一RxJava版本(建议RxJava 3)
|
||||
- [ ] 迁移到AndroidX
|
||||
- [ ] 升级Gson到最新版本
|
||||
|
||||
3. **代码规范**
|
||||
- [ ] 修复类名拼写错误
|
||||
- [ ] 统一代码风格
|
||||
- [ ] 添加代码注释
|
||||
|
||||
### 🟡 **中优先级(建议修复)**
|
||||
|
||||
1. **架构优化**
|
||||
- [ ] 引入MVVM架构
|
||||
- [ ] 统一网络请求层
|
||||
- [ ] 引入依赖注入框架
|
||||
|
||||
2. **性能优化**
|
||||
- [ ] 移除未使用的依赖
|
||||
- [ ] 统一图片加载库(只使用Glide)
|
||||
- [ ] 添加内存泄漏检测
|
||||
|
||||
3. **代码质量**
|
||||
- [ ] 添加单元测试
|
||||
- [ ] 引入代码检查工具(Lint、FindBugs)
|
||||
- [ ] 统一错误处理机制
|
||||
|
||||
### 🟢 **低优先级(可选优化)**
|
||||
|
||||
1. **技术升级**
|
||||
- [ ] 迁移ORMLite到Room
|
||||
- [ ] 引入协程替代RxJava
|
||||
- [ ] 使用Compose重构部分UI
|
||||
|
||||
2. **开发体验**
|
||||
- [ ] 添加CI/CD流程
|
||||
- [ ] 完善项目文档
|
||||
- [ ] 统一开发规范文档
|
||||
|
||||
---
|
||||
|
||||
## 九、总体评价
|
||||
|
||||
### 9.1 项目评分(满分10分)
|
||||
|
||||
| 评估项 | 得分 | 说明 |
|
||||
|--------|------|------|
|
||||
| **功能完整性** | 8/10 | 功能较完整,覆盖主要业务场景 |
|
||||
| **代码质量** | 5/10 | 存在较多问题,需要重构 |
|
||||
| **架构设计** | 4/10 | 缺少清晰架构,耦合度高 |
|
||||
| **安全性** | 3/10 | 存在严重安全隐患 |
|
||||
| **性能** | 6/10 | 基本满足需求,有优化空间 |
|
||||
| **可维护性** | 4/10 | 代码组织混乱,维护困难 |
|
||||
| **技术栈** | 5/10 | 依赖版本过旧,需要升级 |
|
||||
| **文档** | 3/10 | 缺少文档和注释 |
|
||||
|
||||
**综合评分: 4.75/10**
|
||||
|
||||
### 9.2 项目状态
|
||||
- **当前状态**: ⚠️ **需要重大改进**
|
||||
- **可维护性**: ❌ **较差**
|
||||
- **技术债务**: 🔴 **高**
|
||||
|
||||
### 9.3 改进路线图
|
||||
|
||||
#### 第一阶段(1-2个月)- 基础修复
|
||||
1. 修复安全性问题
|
||||
2. 升级关键依赖
|
||||
3. 修复编译错误和代码规范问题
|
||||
4. 启用代码混淆
|
||||
|
||||
#### 第二阶段(2-3个月)- 架构优化
|
||||
1. 迁移到AndroidX
|
||||
2. 统一网络请求层
|
||||
3. 引入MVVM架构
|
||||
4. 添加单元测试
|
||||
|
||||
#### 第三阶段(3-6个月)- 深度优化
|
||||
1. 重构核心模块
|
||||
2. 性能优化
|
||||
3. 完善文档
|
||||
4. 建立CI/CD
|
||||
|
||||
---
|
||||
|
||||
## 十、总结
|
||||
|
||||
### 优点
|
||||
✅ 功能相对完整,能够满足业务需求
|
||||
✅ 使用了DataBinding等现代Android技术
|
||||
✅ 有BaseActivity等基础架构
|
||||
✅ 模块化设计有一定基础
|
||||
|
||||
### 主要问题
|
||||
❌ 安全性存在严重隐患(密钥硬编码)
|
||||
❌ 依赖版本过旧,存在安全风险
|
||||
❌ 代码质量不高,缺少规范
|
||||
❌ 架构设计不清晰,耦合度高
|
||||
❌ 缺少测试和文档
|
||||
|
||||
### 建议
|
||||
这是一个**功能完整但技术债务较高**的项目。建议:
|
||||
1. **立即修复安全性问题**
|
||||
2. **制定重构计划,分阶段执行**
|
||||
3. **建立代码规范和开发流程**
|
||||
4. **引入现代化架构和工具**
|
||||
|
||||
---
|
||||
|
||||
**报告生成时间**: 2025年1月
|
||||
**项目路径**: D:\Users\86181\AndroidStudioProjects\HouseProperty
|
||||
**分析工具**: 代码审查 + 静态分析
|
||||
|
||||
Reference in New Issue
Block a user