Compare commits

..

No commits in common. 'master' and 'dev2' have entirely different histories.
master ... dev2

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="emulator-5554" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2022-06-02T07:36:08.505054300Z" />
</component>
</project>

@ -18,7 +18,6 @@
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/ic_launcher_background.xml" value="0.229" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/ic_launcher_background.xml" value="0.229" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/layerlist_inputtext_modify.xml" value="0.194" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/layerlist_inputtext_modify.xml" value="0.194" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/pb_login_loading.xml" value="0.2195" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/pb_login_loading.xml" value="0.2195" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/ps_image_placeholder.xml" value="0.19" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/selector_bottm_modify_info_save.xml" value="0.213" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/selector_bottm_modify_info_save.xml" value="0.213" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/selector_bottom_add_course.xml" value="0.1915" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/selector_bottom_add_course.xml" value="0.1915" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/selector_bottom_modify_info_save.xml" value="0.1955" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/drawable/selector_bottom_modify_info_save.xml" value="0.1955" />
@ -96,7 +95,6 @@
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/card_location_poi.xml" value="0.21472663139329806" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/card_location_poi.xml" value="0.21472663139329806" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/card_my_info_record.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/card_my_info_record.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/content_home_activity_stu.xml" value="0.17346014492753623" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/content_home_activity_stu.xml" value="0.17346014492753623" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/dialog_image.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/dialog_input.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/dialog_input.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_class_list.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_class_list.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_course_class_list.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_course_class_list.xml" value="0.25364583333333335" />
@ -115,7 +113,7 @@
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_stu_my_info.xml" value="0.264" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_stu_my_info.xml" value="0.264" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_class_list.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_class_list.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_class_msg.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_class_msg.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_course_list.xml" value="0.2" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_course_list.xml" value="0.536" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_home.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_home.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_my_info.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_tea_my_info.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_user_my_info.xml" value="0.25364583333333335" /> <entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_user_my_info.xml" value="0.25364583333333335" />

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

@ -74,11 +74,7 @@ dependencies {
implementation 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0' implementation 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0'
// //
implementation 'io.github.lucksiege:pictureselector:v3.10.2' implementation 'com.github.donkingliang:ImageSelector:2.2.1'
// image compress library (Not necessary)
implementation 'io.github.lucksiege:compress:v3.10.2'
// uCrop library
implementation 'io.github.lucksiege:ucrop:v3.10.2'
// //
implementation 'gdut.bsx:xdraglayout:1.1.1' implementation 'gdut.bsx:xdraglayout:1.1.1'
@ -90,4 +86,7 @@ dependencies {
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
} }

@ -13,9 +13,6 @@
<!-- 手机照片访问权限,调用相机权限 --> <!-- 手机照片访问权限,调用相机权限 -->
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<!-- 这个权限用于进行网络定位--> <!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 这个权限用于访问GPS定位--> <!-- 这个权限用于访问GPS定位-->
@ -42,8 +39,7 @@
android:theme="@style/Theme.STLink" android:theme="@style/Theme.STLink"
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
android:largeHeap="true" android:largeHeap="true">
tools:targetApi="n">
<!--百度定位AK--> <!--百度定位AK-->
<meta-data <meta-data
@ -66,12 +62,10 @@
android:resource="@xml/file_paths"/> android:resource="@xml/file_paths"/>
</provider> </provider>
<!-- 调整二维码扫描界面为竖屏 --> <!-- 调整二维码扫描界面为竖屏 -->
<activity <activity
android:name="com.journeyapps.barcodescanner.CaptureActivity" android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="fullSensor" android:screenOrientation="portrait"
tools:replace="screenOrientation" /> tools:replace="screenOrientation" />
<!-- 开机加载动画 --> <!-- 开机加载动画 -->

@ -22,6 +22,10 @@ public class LaunchActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch); setContentView(R.layout.activity_launch);
// //去除当前活动标题栏
// Objects.requireNonNull(getSupportActionBar()).hide();
mClipLeftLoadingImageView = findViewById(R.id.iv_login_loading); mClipLeftLoadingImageView = findViewById(R.id.iv_login_loading);
mClipLeftLoadingImageView.setImageLevel(0); mClipLeftLoadingImageView.setImageLevel(0);
@ -33,10 +37,13 @@ public class LaunchActivity extends AppCompatActivity {
//延时加载 //延时加载
Handler handler = new Handler(); Handler handler = new Handler();
handler.postDelayed(() -> { handler.postDelayed(new Runnable() {
Intent intent = new Intent(LaunchActivity.this, IdChooseActivity.class); @Override
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); public void run() {
startActivity(intent); Intent intent = new Intent(LaunchActivity.this, IdChooseActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}, 1000);//3秒后执行Runnable中的run方法 }, 1000);//3秒后执行Runnable中的run方法
} }

@ -7,6 +7,7 @@ import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.view.Gravity; import android.view.Gravity;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.Toast; import android.widget.Toast;
@ -68,19 +69,25 @@ public class IdChooseActivity extends AppCompatActivity {
*/ */
public void setOnclickListener(){ public void setOnclickListener(){
// 选择学生端登录 // 选择学生端登录
stuLoginCho.setOnClickListener(v -> { stuLoginCho.setOnClickListener(new View.OnClickListener() {
intentIdCho = new Intent(IdChooseActivity.this, LoginActivity.class); @Override
bundle.putInt(ModelFieldConstants.ROLE_ID, 0); public void onClick(View v) {
intentIdCho.putExtras(bundle); intentIdCho = new Intent(IdChooseActivity.this, LoginActivity.class);
startActivity(intentIdCho); bundle.putInt(ModelFieldConstants.ROLE_ID, 0);
intentIdCho.putExtras(bundle);
startActivity(intentIdCho);
}
}); });
// 选择教师端登录 // 选择教师端登录
teaLoginCho.setOnClickListener(v -> { teaLoginCho.setOnClickListener(new View.OnClickListener() {
intentIdCho = new Intent(IdChooseActivity.this, LoginActivity.class); @Override
bundle.putInt(ModelFieldConstants.ROLE_ID, 1); public void onClick(View v) {
intentIdCho.putExtras(bundle); intentIdCho = new Intent(IdChooseActivity.this, LoginActivity.class);
startActivity(intentIdCho); bundle.putInt(ModelFieldConstants.ROLE_ID, 1);
intentIdCho.putExtras(bundle);
startActivity(intentIdCho);
}
}); });
} }
@ -119,6 +126,9 @@ public class IdChooseActivity extends AppCompatActivity {
Intent intent = new Intent(Intent.ACTION_MAIN); Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME); intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent); startActivity(intent);
//退出程序代码
// finish(); //结束程序
// System.exit(0); //退出程序
} }
} }
} }

@ -80,18 +80,21 @@ public class LoginActivity extends AppCompatActivity {
/** /**
* *
*/ */
@SuppressLint("ResourceAsColor")
private void setOnclickListener(){ private void setOnclickListener(){
LoginUtil.userLogin(LoginActivity.this, btLogin, etAccount, etPwd, cbRememberPwd ); LoginUtil.userLogin(LoginActivity.this, btLogin, etAccount, etPwd, cbRememberPwd );
//用户注册 //用户注册
lgRegister.setOnClickListener(v -> { lgRegister.setOnClickListener(new View.OnClickListener() {
lgRegister.setTextColor(R.color.crimson); @SuppressLint("ResourceAsColor")
lgRegister.getPaint().setUnderlineText(true); @Override
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class); public void onClick(View v) {
intent.putExtras(bundle); lgRegister.setTextColor(R.color.crimson);
startActivity(intent); lgRegister.getPaint().setUnderlineText(true);
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
}); });
} }
@ -119,7 +122,7 @@ public class LoginActivity extends AppCompatActivity {
String account = spFile.getString(accountKey, null); String account = spFile.getString(accountKey, null);
String password = spFile.getString(passwordKey, null); String password = spFile.getString(passwordKey, null);
boolean rememberPassword = spFile.getBoolean(rememberPasswordKey, false); Boolean rememberPassword = spFile.getBoolean(rememberPasswordKey, false);
if(account != null && !TextUtils.isEmpty(account)){ if(account != null && !TextUtils.isEmpty(account)){
etAccount.setText(account); etAccount.setText(account);
etAccount.setSelection(account.length()); etAccount.setSelection(account.length());

@ -18,7 +18,6 @@ import com.example.stlink.fragments.TeaHomeFragment;
import com.example.stlink.fragments.UserInfoFragment; import com.example.stlink.fragments.UserInfoFragment;
import com.example.stlink.model.constants.ModelFieldConstants; import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.utils.activityUtil.MainActivityUtil; import com.example.stlink.utils.activityUtil.MainActivityUtil;
import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.util.ArrayList; import java.util.ArrayList;
@ -31,8 +30,6 @@ public class MainActivity extends AppCompatActivity {
private Integer roleId; private Integer roleId;
private Bundle bundle; private Bundle bundle;
private BadgeDrawable badge;
@RequiresApi(api = Build.VERSION_CODES.O) @RequiresApi(api = Build.VERSION_CODES.O)
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
@ -60,18 +57,10 @@ public class MainActivity extends AppCompatActivity {
bottomNavigationView.getMenu().getItem(1).setTitle("班级消息"); bottomNavigationView.getMenu().getItem(1).setTitle("班级消息");
} }
badge = bottomNavigationView.getOrCreateBadge(1);
// orCreateBadge.setVisible(false);
badge.setNumber(0);
} }
/** /**
* *
*
* flutter
* uniapp
* kotlin
*/ */
private void initPager(){ private void initPager(){
List<Fragment> list = new ArrayList<>(); List<Fragment> list = new ArrayList<>();
@ -82,7 +71,7 @@ public class MainActivity extends AppCompatActivity {
list.add(teaCourseListFragment); list.add(teaCourseListFragment);
}else{ }else{
StuHomeFragment stuHomeFragment = StuHomeFragment.newInstance("主页"); StuHomeFragment stuHomeFragment = StuHomeFragment.newInstance("主页");
StuClassListFragment stuClassListFragment = StuClassListFragment.newInstance("班级消息", MainActivity.this, badge); StuClassListFragment stuClassListFragment = StuClassListFragment.newInstance("班级消息", MainActivity.this);
list.add(stuHomeFragment); list.add(stuHomeFragment);
list.add(stuClassListFragment); list.add(stuClassListFragment);
} }

@ -5,6 +5,7 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.view.View; import android.view.View;
import android.widget.ImageButton; import android.widget.ImageButton;
@ -26,6 +27,7 @@ import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.model.LatLng;
@ -39,6 +41,7 @@ import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.example.stlink.R; import com.example.stlink.R;
import com.example.stlink.configs.adapter.LocationPoiAdapter; import com.example.stlink.configs.adapter.LocationPoiAdapter;
import com.example.stlink.configs.onRecyclerViewItemClickListener; import com.example.stlink.configs.onRecyclerViewItemClickListener;
import com.example.stlink.fragments.StuHomeFragment;
import com.example.stlink.model.constants.ModelFieldConstants; import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.utils.MyLocationListener; import com.example.stlink.utils.MyLocationListener;
@ -103,7 +106,6 @@ public class MapActivity extends AppCompatActivity {
/** /**
* *
*/ */
@SuppressLint("NotifyDataSetChanged")
private void initView(){ private void initView(){
//获取布局相关控件 //获取布局相关控件
mMapView = findViewById(R.id.b_map_view); mMapView = findViewById(R.id.b_map_view);
@ -114,33 +116,40 @@ public class MapActivity extends AppCompatActivity {
mRecyclerView= findViewById(R.id.rv_msg); mRecyclerView= findViewById(R.id.rv_msg);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
locationPoiHandler = new Handler(msg -> { locationPoiHandler = new Handler(new Handler.Callback() {
if(msg.arg1 == 1){ @SuppressLint("NotifyDataSetChanged")
adapter=new LocationPoiAdapter(MapActivity.this,mList); @Override
mRecyclerView.setAdapter(adapter); public boolean handleMessage(@NonNull Message msg) {
adapter.notifyDataSetChanged(); if(msg.arg1 == 1){
adapter.setOnItemClickListener(recyclerViewItemClickListener); adapter=new LocationPoiAdapter(MapActivity.this,mList);
mRecyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
adapter.setOnItemClickListener(recyclerViewItemClickListener);
}
return false;
} }
return false;
}); });
myLocationListenerHandler = new Handler(msg -> { myLocationListenerHandler = new Handler(new Handler.Callback() {
nowLocation = myLocationListener.getLocation(); @Override
if(msg.arg1 == 200 && nowLocation != null){ public boolean handleMessage(@NonNull Message msg) {
LatLng point = new LatLng(nowLocation.getLatitude(), nowLocation.getLongitude()); nowLocation = myLocationListener.getLocation();
System.out.println("reverseGeocoding: start!!!!!!!!!!!!"); if(msg.arg1 == 200 && nowLocation != null){
//单次定位结束,销毁定位 LatLng point = new LatLng(nowLocation.getLatitude(), nowLocation.getLongitude());
System.out.println("mBaiduMap:closing................"); System.out.println("reverseGeocoding: start!!!!!!!!!!!!");
mLocationClient.stop(); //单次定位结束,销毁定位
//关闭定位图层 System.out.println("mBaiduMap:closing................");
mLocationClient.stop();
//关闭定位图层
// mBaiduMap.setMyLocationEnabled(false); // mBaiduMap.setMyLocationEnabled(false);
//开始地理反编码 //开始地理反编码
reverseGeocoding(point); reverseGeocoding(point);
}else{ }else{
System.out.println("mLocationClient : " + mLocationClient.toString()); System.out.println("mLocationClient : " + mLocationClient.toString());
System.out.println("nowLocation : " + nowLocation); System.out.println("nowLocation : " + nowLocation);
}
return false;
} }
return false;
}); });
// 得到地图 // 得到地图
@ -239,16 +248,19 @@ public class MapActivity extends AppCompatActivity {
*/ */
private void setOtherListener(){ private void setOtherListener(){
//重定位 //重定位
ivRelocation.setOnClickListener(v -> { ivRelocation.setOnClickListener(new View.OnClickListener() {
//点击重定位按钮,启动定位 @Override
System.out.println("mBaiduMap:starting................"); public void onClick(View v) {
mLocationClient.start(); //点击重定位按钮,启动定位
//开启定位图层 System.out.println("mBaiduMap:starting................");
mLocationClient.start();
//开启定位图层
// mBaiduMap.setMyLocationEnabled(true); // mBaiduMap.setMyLocationEnabled(true);
// BDLocation nowLocation = myLocationListener.getLocation(); // BDLocation nowLocation = myLocationListener.getLocation();
// LatLng ll = new LatLng(nowLocation.getLatitude(), nowLocation.getLongitude()); // LatLng ll = new LatLng(nowLocation.getLatitude(), nowLocation.getLongitude());
// MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll); // MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
// mBaiduMap.animateMapStatus(msu); // mBaiduMap.animateMapStatus(msu);
}
}); });
abBtReturn.setOnClickListener(new View.OnClickListener() { abBtReturn.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -257,33 +269,40 @@ public class MapActivity extends AppCompatActivity {
} }
}); });
//保存 //保存
abBtSave.setOnClickListener(v -> { abBtSave.setOnClickListener(new View.OnClickListener() {
nowLocation = myLocationListener.getLocation(); @Override
String ll = "(" + nowLocation.getLatitude() + "," + nowLocation.getLongitude() + ")"; public void onClick(View v) {
Intent intent = new Intent(); nowLocation = myLocationListener.getLocation();
Bundle bundle = getIntent().getExtras(); String ll = "(" + nowLocation.getLatitude() + "," + nowLocation.getLongitude() + ")";
bundle.putString(ModelFieldConstants.LOCATION, ll); Intent intent = new Intent();
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
setResult(100,intent); bundle.putString(ModelFieldConstants.LOCATION, ll);
finish(); intent.putExtras(bundle);
setResult(100,intent);
finish();
}
}); });
recyclerViewItemClickListener = new onRecyclerViewItemClickListener() { recyclerViewItemClickListener = new onRecyclerViewItemClickListener() {
@Override @Override
public void onItemClick(RecyclerView parent, View view, int position) { public void onItemClick(RecyclerView parent, View view, int position) {
PoiInfo poiInfo = mList.get(position); PoiInfo poiInfo = mList.get(position);
//添加"Yes"按钮
//添加取消
AlertDialog alertDialog2 = new AlertDialog.Builder(MapActivity.this) AlertDialog alertDialog2 = new AlertDialog.Builder(MapActivity.this)
.setMessage("签到地点【" + poiInfo.name + "】") .setMessage("签到地点【" + poiInfo.name + "】")
.setPositiveButton("确定", (dialogInterface, i) -> { .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
Intent intent = new Intent(); @Override
Bundle bundle = getIntent().getExtras(); public void onClick(DialogInterface dialogInterface, int i) {
bundle.putString(ModelFieldConstants.LOCATION, poiInfo.name); Intent intent = new Intent();
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
setResult(100,intent); bundle.putString(ModelFieldConstants.LOCATION, poiInfo.name);
finish(); intent.putExtras(bundle);
setResult(100,intent);
finish();
}
}) })
.setNegativeButton("取消", (dialogInterface, i) -> { .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}) })
.create(); .create();
alertDialog2.show(); alertDialog2.show();

@ -14,5 +14,9 @@ public class ScanQRCodeActivity extends AppCompatActivity {
setContentView(R.layout.activity_scan_code); setContentView(R.layout.activity_scan_code);
} }
private void initView(){
}
} }

@ -1,6 +1,7 @@
package com.example.stlink.activitys.fragmentChild.activityStuClassList; package com.example.stlink.activitys.fragmentChild.activityStuClassList;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
@ -22,6 +23,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.example.stlink.R; import com.example.stlink.R;
import com.example.stlink.activitys.ScanQRCodeActivity;
import com.example.stlink.configs.adapter.StuCourseSignedAdapter; import com.example.stlink.configs.adapter.StuCourseSignedAdapter;
import com.example.stlink.model.constants.ModelFieldConstants; import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.model.constants.UrlConstants; import com.example.stlink.model.constants.UrlConstants;
@ -56,7 +58,6 @@ public class CourseSignIn extends AppCompatActivity {
private TextInputEditText etCodeInput; private TextInputEditText etCodeInput;
private static List<CourseSign> courseHasSignedList; private static List<CourseSign> courseHasSignedList;
@SuppressLint("StaticFieldLeak")
private static StuCourseSignedAdapter adapter; private static StuCourseSignedAdapter adapter;
private Handler signHandler; private Handler signHandler;
@ -121,69 +122,94 @@ public class CourseSignIn extends AppCompatActivity {
} }
private void setClickListener(){ private void setClickListener(){
abIvTitle.setOnClickListener(v -> finish()); abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
//点击签到后的事件 //点击签到后的事件
btSign.setOnClickListener(v -> { btSign.setOnClickListener(new View.OnClickListener() {
@SuppressLint("InflateParams") @Override
View view = LayoutInflater.from(CourseSignIn.this).inflate(R.layout.dialog_input, null); public void onClick(View v) {
//添加取消 @SuppressLint("InflateParams")
//添加"Yes"按钮 View view = LayoutInflater.from(CourseSignIn.this).inflate(R.layout.dialog_input, null);
@SuppressLint("NotifyDataSetChanged") AlertDialog.Builder builder = new AlertDialog.Builder(CourseSignIn.this)
AlertDialog.Builder builder = new AlertDialog.Builder(CourseSignIn.this) .setMessage("请输入签到口令")
.setMessage("请输入签到口令") .setView(view)
.setView(view) .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
.setPositiveButton("确定", (dialogInterface, i) -> { @Override
etCodeInput = view.findViewById(R.id.et_code_input); public void onClick(DialogInterface dialogInterface, int i) {
Editable etSignCode = etCodeInput.getText(); etCodeInput = view.findViewById(R.id.et_code_input);
if(etSignCode == null){ Editable etSignCode = etCodeInput.getText();
Toast.makeText(CourseSignIn.this, "口令为空", Toast.LENGTH_SHORT).show(); if(etSignCode == null){
}else{ Toast.makeText(CourseSignIn.this, "口令为空", Toast.LENGTH_SHORT).show();
signCodeStr = etSignCode.toString(); }else{
int signCode; signCodeStr = etSignCode.toString();
StuSignRequest stuSignRequest = new StuSignRequest(); int signCode;
stuSignRequest.setUserSignId(courseSignId); StuSignRequest stuSignRequest = new StuSignRequest();
stuSignRequest.setUserId(bundle.getLong(ModelFieldConstants.ID)); stuSignRequest.setUserSignId(courseSignId);
try{ stuSignRequest.setUserId(bundle.getLong(ModelFieldConstants.ID));
signCode = Integer.parseInt(signCodeStr); try{
stuSignRequest.setSignCode(signCode); signCode = Integer.parseInt(signCodeStr);
signHandler = new Handler(msg -> { stuSignRequest.setSignCode(signCode);
if(msg.arg1 == -1){ signHandler = new Handler(new Handler.Callback() {
String errorMsg = (String) msg.obj; @Override
Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show(); public boolean handleMessage(@NonNull Message msg) {
}else if(msg.arg1 == 1){ if(msg.arg1 == -1){
Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show(); String errorMsg = (String) msg.obj;
tvSignRecord.setVisibility(View.VISIBLE); Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show();
getSignedHandler = new Handler(msg1 -> { }else if(msg.arg1 == 1){
if(msg1.arg1 == 1){ Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged(); tvSignRecord.setVisibility(View.VISIBLE);
getSignedHandler = new Handler(new Handler.Callback() {
@SuppressLint("NotifyDataSetChanged")
@Override
public boolean handleMessage(@NonNull Message msg) {
if(msg.arg1 == 1){
adapter.notifyDataSetChanged();
}
return false;
}
});
getHasSignedList();
}
return false;
} }
return false;
}); });
getHasSignedList(); signIn(stuSignRequest);
}catch ( NumberFormatException numberFormatException){
Toast.makeText(CourseSignIn.this, "口令输入错误", Toast.LENGTH_SHORT).show();
} }
return false; }
});
signIn(stuSignRequest);
}catch ( NumberFormatException numberFormatException){
Toast.makeText(CourseSignIn.this, "口令输入错误", Toast.LENGTH_SHORT).show();
} }
} })
}) .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
.setNegativeButton("取消", (dialogInterface, i) -> { @Override
}) public void onClick(DialogInterface dialogInterface, int i) {
.setNeutralButton("扫码", (dialog, which) -> { }
// 创建IntentIntegrator对象 })
IntentIntegrator intentIntegrator = new IntentIntegrator(CourseSignIn.this) .setNeutralButton("扫码", new DialogInterface.OnClickListener() {
.setBeepEnabled(true) //扫描提示音 @Override
.setPrompt("这是个扫码签到界面") public void onClick(DialogInterface dialog, int which) {
//.setCaptureActivity(MyCaptureActivity.class) //修改扫码活动 // TODO 扫码签到
.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)// 扫码的类型,可选:一维码,二维码,一/二维码 // Intent intent = new Intent(CourseSignIn.this, ScanQRCodeActivity.class);
.setTimeout(10000);//15秒未扫描则将自动关闭扫码界面 // intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// 开始扫描 // startActivity(intent);
intentIntegrator.initiateScan(); // 创建IntentIntegrator对象
}); IntentIntegrator intentIntegrator = new IntentIntegrator(CourseSignIn.this)
AlertDialog alertDialog2 = builder.create(); .setBeepEnabled(true) //扫描提示音
alertDialog2.show(); .setPrompt("这是个扫码签到界面")
//.setCaptureActivity(MyCaptureActivity.class) //修改扫码活动
.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)// 扫码的类型,可选:一维码,二维码,一/二维码
.setTimeout(10000);//15秒未扫描则将自动关闭扫码界面
// 开始扫描
intentIntegrator.initiateScan();
}
});
AlertDialog alertDialog2 = builder.create();
alertDialog2.show();
}
}); });
} }
@ -191,43 +217,46 @@ public class CourseSignIn extends AppCompatActivity {
* *
*/ */
private void getHasSignedList(){ private void getHasSignedList(){
new Thread(() -> { new Thread(new Runnable() {
bundle = getIntent().getExtras(); @Override
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" + public void run() {
ModelFieldConstants.USER_ID + "=" + bundle.getLong(ModelFieldConstants.ID) + "&" + bundle = getIntent().getExtras();
ModelFieldConstants.COURSE_SIGN_STATUS + "=" + 1 + "&" + String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
"current=1&size=10"; ModelFieldConstants.USER_ID + "=" + bundle.getLong(ModelFieldConstants.ID) + "&" +
String url = UrlConstants.STUDENT_SIGN_LIST + "?" + urlParam; ModelFieldConstants.COURSE_SIGN_STATUS + "=" + 1 + "&" +
new GetUrlParamHttpUtils() { "current=1&size=10";
@Override String url = UrlConstants.STUDENT_SIGN_LIST + "?" + urlParam;
public void nextMethod(BaseResponse<Object> baseResponse) { new GetUrlParamHttpUtils() {
if(baseResponse.getData() != null){ @Override
System.out.println("StuClassListFragment:courseDataBaseResponse.getData() = " + baseResponse.getData() + "..............."); public void nextMethod(BaseResponse<Object> baseResponse) {
if(baseResponse.getData() != null){
System.out.println("StuClassListFragment:courseDataBaseResponse.getData() = " + baseResponse.getData() + "...............");
//解析数据 //解析数据
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
Object obj = baseResponse.getData(); Object obj = baseResponse.getData();
LinkedTreeMap<String, String> courseDataMap = null; LinkedTreeMap<String, String> courseDataMap = null;
if(obj instanceof LinkedTreeMap){ if(obj instanceof LinkedTreeMap){
courseDataMap = (LinkedTreeMap<String, String>) obj; courseDataMap = (LinkedTreeMap<String, String>) obj;
} }
//将LinkedTreeMap中字段映射到CourseData类中 //将LinkedTreeMap中字段映射到CourseData类中
//array:学生获取所选课程签到列表返回实体 //array:学生获取所选课程签到列表返回实体
String jsonString = gson.toJson(courseDataMap); String jsonString = gson.toJson(courseDataMap);
CourseData<CourseSign> courseData = gson.fromJson(jsonString, new TypeToken<CourseData<CourseSign>>() {}.getType()); CourseData<CourseSign> courseData = gson.fromJson(jsonString, new TypeToken<CourseData<CourseSign>>() {}.getType());
if(courseData.getRecords().size() != 0){ if(courseData.getRecords().size() != 0){
courseHasSignedList.addAll(courseData.getRecords()); courseHasSignedList.addAll(courseData.getRecords());
System.out.println("Here............................."); System.out.println("Here.............................");
Message message = new Message(); Message message = new Message();
message.arg1 = 1; message.arg1 = 1;
getSignedHandler.sendMessage(message); getSignedHandler.sendMessage(message);
}
} }
} }
} @Override
@Override public void failedMethod(BaseResponse<Object> baseResponse) { }
public void failedMethod(BaseResponse<Object> baseResponse) { } }.getConnect(url);
}.getConnect(url); }
}).start(); }).start();
} }
@ -236,26 +265,29 @@ public class CourseSignIn extends AppCompatActivity {
* @param stuSignRequest * @param stuSignRequest
*/ */
private void signIn(StuSignRequest stuSignRequest){ private void signIn(StuSignRequest stuSignRequest){
new Thread(() -> { new Thread(new Runnable() {
System.out.println( "CourseSignIn:stuSignRequest : " + stuSignRequest.toString()); @Override
String json = JSON.toJSONString(stuSignRequest); public void run() {
String url = UrlConstants.STUDENT_SIGN; System.out.println( "CourseSignIn:stuSignRequest : " + stuSignRequest.toString());
String json = JSON.toJSONString(stuSignRequest);
String url = UrlConstants.STUDENT_SIGN;
new PostBodyParamHttpUtils() { new PostBodyParamHttpUtils() {
@Override @Override
public void nextMethod(BaseResponse<Object> baseResponse) { public void nextMethod(BaseResponse<Object> baseResponse) {
Message message = new Message(); Message message = new Message();
message.arg1 = 1; message.arg1 = 1;
signHandler.sendMessage(message); signHandler.sendMessage(message);
} }
@Override @Override
public void failedMethod(BaseResponse<Object> baseResponse) { public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message(); Message message = new Message();
message.arg1 = -1; message.arg1 = -1;
message.obj = baseResponse.getMsg(); message.obj = baseResponse.getMsg();
signHandler.sendMessage(message); signHandler.sendMessage(message);
} }
}.postConnect(url, json); }.postConnect(url, json);
}
}).start(); }).start();
} }
@ -275,22 +307,29 @@ public class CourseSignIn extends AppCompatActivity {
try{ try{
signCode = Integer.parseInt(signCodeStr); signCode = Integer.parseInt(signCodeStr);
stuSignRequest.setSignCode(signCode); stuSignRequest.setSignCode(signCode);
signHandler = new Handler(msg -> { signHandler = new Handler(new Handler.Callback() {
if(msg.arg1 == -1){ @Override
String errorMsg = (String) msg.obj; public boolean handleMessage(@NonNull Message msg) {
Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show(); if(msg.arg1 == -1){
}else if(msg.arg1 == 1){ String errorMsg = (String) msg.obj;
Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show(); Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show();
tvSignRecord.setVisibility(View.VISIBLE); }else if(msg.arg1 == 1){
getSignedHandler = new Handler(msg1 -> { Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show();
if(msg1.arg1 == 1){ tvSignRecord.setVisibility(View.VISIBLE);
adapter.notifyDataSetChanged(); getSignedHandler = new Handler(new Handler.Callback() {
} @SuppressLint("NotifyDataSetChanged")
return false; @Override
}); public boolean handleMessage(@NonNull Message msg) {
getHasSignedList(); if(msg.arg1 == 1){
adapter.notifyDataSetChanged();
}
return false;
}
});
getHasSignedList();
}
return false;
} }
return false;
}); });
signIn(stuSignRequest); signIn(stuSignRequest);
}catch ( NumberFormatException numberFormatException){ }catch ( NumberFormatException numberFormatException){

@ -39,7 +39,7 @@ public class AllCourses extends AppCompatActivity {
private List<Course> coursesData; private List<Course> coursesData;
private StuAddCourseAdapter adapter; private StuAddCourseAdapter adapter;
private ImageView abIvTitle; private ImageView abIvTitle;
private SwipeRefreshLayout srlMyRefresh; private static SwipeRefreshLayout srlMyRefresh;
private static Bundle bundle; private static Bundle bundle;
private static Handler handler; private static Handler handler;

@ -13,6 +13,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.example.stlink.R; import com.example.stlink.R;
import com.example.stlink.fragments.CourseClassListFragment; import com.example.stlink.fragments.CourseClassListFragment;
@ -124,7 +125,13 @@ public class CourseDetail extends AppCompatActivity {
* *
*/ */
private void setListener(){ private void setListener(){
abIvTitle.setOnClickListener(v -> finish()); abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
} }
private void initPager(){ private void initPager(){
@ -139,43 +146,46 @@ public class CourseDetail extends AppCompatActivity {
} }
private void getCourseDetail(){ private void getCourseDetail(){
new Thread(() -> { new Thread(new Runnable() {
@Override
long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID); public void run() {
long userId = bundle.getLong(ModelFieldConstants.USER_ID);
long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID);
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" + long userId = bundle.getLong(ModelFieldConstants.USER_ID);
ModelFieldConstants.USER_ID + "=" + userId;
String url = UrlConstants.COURSE_DETAIL + "?" + urlParam; String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
ModelFieldConstants.USER_ID + "=" + userId;
new GetUrlParamHttpUtils() { String url = UrlConstants.COURSE_DETAIL + "?" + urlParam;
@Override
public void nextMethod(BaseResponse<Object> baseResponse) { new GetUrlParamHttpUtils() {
@Override
//解析数据 public void nextMethod(BaseResponse<Object> baseResponse) {
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
Object obj = baseResponse.getData(); //解析数据
LinkedTreeMap<String, String> courseDetailMap = null; Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
if(obj instanceof LinkedTreeMap){ Object obj = baseResponse.getData();
courseDetailMap = (LinkedTreeMap<String, String>) obj; LinkedTreeMap<String, String> courseDetailMap = null;
if(obj instanceof LinkedTreeMap){
courseDetailMap = (LinkedTreeMap<String, String>) obj;
}
//将LinkedTreeMap中字段映射到User类中
String jsonString = gson.toJson(courseDetailMap);
CourseDetailData courseDetail = gson.fromJson(jsonString, new TypeToken<CourseDetailData>() {}.getType());
System.out.println("courseDetail = " + courseDetail + "..................");
Message message = new Message();
message.obj = courseDetail;
message.arg1 = 200;
handler.sendMessage(message);
} }
//将LinkedTreeMap中字段映射到User类中 @Override
String jsonString = gson.toJson(courseDetailMap); public void failedMethod(BaseResponse<Object> baseResponse) {
CourseDetailData courseDetail = gson.fromJson(jsonString, new TypeToken<CourseDetailData>() {}.getType()); Message message = new Message();
System.out.println("courseDetail = " + courseDetail + ".................."); message.obj = baseResponse.getMsg();
Message message = new Message(); message.arg1 = baseResponse.getCode();
message.obj = courseDetail; handler .sendMessage(message);
message.arg1 = 200; }
handler.sendMessage(message); }.getConnect(url);
} }
@Override
public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message();
message.obj = baseResponse.getMsg();
message.arg1 = baseResponse.getCode();
handler .sendMessage(message);
}
}.getConnect(url);
}).start(); }).start();
} }
} }

@ -1,25 +1,14 @@
package com.example.stlink.activitys.fragmentChild.activityTeaHome; package com.example.stlink.activitys.fragmentChild.activityTeaHome;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.provider.MediaStore;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
@ -30,11 +19,9 @@ import com.example.stlink.fragments.LeaveListFragment;
import com.example.stlink.fragments.SignListFragment; import com.example.stlink.fragments.SignListFragment;
import com.example.stlink.model.constants.ModelFieldConstants; import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.model.constants.UrlConstants; import com.example.stlink.model.constants.UrlConstants;
import com.example.stlink.model.request.CourseCreateSignRequest;
import com.example.stlink.model.response.BaseResponse; import com.example.stlink.model.response.BaseResponse;
import com.example.stlink.model.response.data.CourseSignMsg; import com.example.stlink.model.response.data.CourseSignMsg;
import com.example.stlink.utils.CommonUtils; import com.example.stlink.utils.CommonUtils;
import com.example.stlink.utils.QRCodeUtil;
import com.example.stlink.utils.activityUtil.CheckCourseSignUtil; import com.example.stlink.utils.activityUtil.CheckCourseSignUtil;
import com.example.stlink.utils.httpUtils.GetUrlParamHttpUtils; import com.example.stlink.utils.httpUtils.GetUrlParamHttpUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
@ -53,7 +40,6 @@ public class CheckCourseSign extends AppCompatActivity {
private TextView tvCourseStuAmountMsg; private TextView tvCourseStuAmountMsg;
private TextView tvCourseStuArriveAmountMsg; private TextView tvCourseStuArriveAmountMsg;
private TextView tvCourseStuLeaveAmountMsg; private TextView tvCourseStuLeaveAmountMsg;
private ImageView ivCode;
private CheckCourseSignUtil checkCourseSignUtil; private CheckCourseSignUtil checkCourseSignUtil;
@ -63,11 +49,6 @@ public class CheckCourseSign extends AppCompatActivity {
private Bundle bundle; private Bundle bundle;
private Handler handler; private Handler handler;
private Handler shareImageHandler;
private static ActivityResultLauncher<Intent> intentActivityResultLauncher;
Dialog dialog;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -76,11 +57,10 @@ public class CheckCourseSign extends AppCompatActivity {
initPage(); initPage();
} }
private void initView(){ private void initView(){
CommonUtils.changeStatusBar(CheckCourseSign.this); CommonUtils.changeStatusBar(CheckCourseSign.this);
ivCode = findViewById(R.id.iv_code);
abIvTitle = findViewById(R.id.ab_iv_title); abIvTitle = findViewById(R.id.ab_iv_title);
aTvCourseName = findViewById(R.id.ab_tv_course_name); aTvCourseName = findViewById(R.id.ab_tv_course_name);
tvCourseNameMsg = findViewById(R.id.tv_course_name_msg); tvCourseNameMsg = findViewById(R.id.tv_course_name_msg);
@ -91,39 +71,22 @@ public class CheckCourseSign extends AppCompatActivity {
checkCourseSignUtil = new CheckCourseSignUtil(this.getWindow().getDecorView(),CheckCourseSign.this); checkCourseSignUtil = new CheckCourseSignUtil(this.getWindow().getDecorView(),CheckCourseSign.this);
dialog = new Dialog(this, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
setClickListener(); setClickListener();
refreshData(); refreshData();
handler = new Handler(msg -> { handler = new Handler(new Handler.Callback() {
if(msg.arg1 == 200){ @Override
aTvCourseName.setText(courseSignMsg.getCourseName()); public boolean handleMessage(@NonNull Message msg) {
tvCourseStuAmountMsg.setText(String.valueOf(courseSignMsg.getCourseNum())); if(msg.arg1 == 200){
aTvCourseName.setText(courseSignMsg.getCourseName());
tvCourseStuAmountMsg.setText(String.valueOf(courseSignMsg.getCourseNum()));
}
return false;
} }
return false;
}); });
getCourseSignMsg(); getCourseSignMsg();
shareImageHandler = new Handler(msg -> {
if(msg.arg1 == 200){
Intent shareIntent = (Intent) msg.obj;
System.out.println("Here...............shareImageHandler.....");
startActivity(Intent.createChooser(shareIntent, "分享图片"));
}
return false;
});
// 意图函数加载器
intentActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
Intent data = result.getData();
int resultCode = result.getResultCode();
System.out.println("registerForActivityResult...........................");
if (resultCode == Activity.RESULT_OK) {
System.out.println("图片分享成功。。。。");
}
});
} }
private void refreshData(){ private void refreshData(){
@ -136,37 +99,14 @@ public class CheckCourseSign extends AppCompatActivity {
if(!TextUtils.isEmpty(teaName)){ if(!TextUtils.isEmpty(teaName)){
tvCourseTeaNameMsg.setText(teaName); tvCourseTeaNameMsg.setText(teaName);
} }
Object obj = bundle.getSerializable(ModelFieldConstants.COURSE_CREATE_SIGN_REQUEST);
if(obj instanceof CourseCreateSignRequest ){
CourseCreateSignRequest courseCreateSignRequest = (CourseCreateSignRequest) obj;
String signCode = String.valueOf(courseCreateSignRequest.getSignCode());
Bitmap codeBitmap = QRCodeUtil.createQRCode(signCode,500,500,null);
ivCode.setImageBitmap(codeBitmap);
}
} }
private void setClickListener(){ private void setClickListener(){
abIvTitle.setOnClickListener(v -> finish()); abIvTitle.setOnClickListener(new View.OnClickListener() {
ivCode.setOnClickListener(v -> { @Override
ivCode.setVisibility(View.INVISIBLE); public void onClick(View v) {
View view = LayoutInflater.from(CheckCourseSign.this).inflate(R.layout.dialog_image, null); finish();
ImageView ivCodeBig = view.findViewById(R.id.iv_code_big); }
ivCodeBig.setImageDrawable(ivCode.getDrawable());
dialog.setContentView(view);
dialog.show();
ivCodeBig.setOnClickListener(v1 -> {
dialog.dismiss();
ivCode.setVisibility(View.VISIBLE);
});
ivCodeBig.setOnLongClickListener(v12 -> {
shareImage();
return true;
});
});
ivCode.setOnLongClickListener(v -> {
shareImage();
return true;
}); });
} }
@ -227,39 +167,4 @@ public class CheckCourseSign extends AppCompatActivity {
} }
}).start(); }).start();
} }
/**
*
*/
private void shareImage(){
new Thread(() -> {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("image/*"); //设置分享内容的类型
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), getBitmap(ivCode.getDrawable()), null,null));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
Message message = new Message();
message.arg1 = 200;
message.obj = shareIntent;
shareImageHandler.sendMessage(message);
}).start();
}
/**
* drawableBitMap
* @param drawable ImageView
* @return BitMap
*/
private Bitmap getBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
//canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
} }

@ -1,6 +1,8 @@
package com.example.stlink.activitys.fragmentChild.activityTeaHome; package com.example.stlink.activitys.fragmentChild.activityTeaHome;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
@ -17,8 +19,8 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.donkingliang.imageselector.utils.ImageSelector;
import com.example.stlink.R; import com.example.stlink.R;
import com.example.stlink.configs.GlideEngine;
import com.example.stlink.model.constants.ModelFieldConstants; import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.model.constants.UrlConstants; import com.example.stlink.model.constants.UrlConstants;
import com.example.stlink.model.request.CourseCreateRequest; import com.example.stlink.model.request.CourseCreateRequest;
@ -26,13 +28,9 @@ import com.example.stlink.utils.CommonUtils;
import com.example.stlink.utils.activityUtil.CreateCourseUtil; import com.example.stlink.utils.activityUtil.CreateCourseUtil;
import com.example.stlink.utils.activityUtil.ImgUploadUtil; import com.example.stlink.utils.activityUtil.ImgUploadUtil;
import com.google.android.material.datepicker.MaterialDatePicker; import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputEditText;
import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.config.SelectModeConfig;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects; import java.util.Objects;
@ -60,8 +58,6 @@ public class CreateCourse extends AppCompatActivity {
private Handler btAddHandler; private Handler btAddHandler;
private Handler imgUploadHandler;
//每两秒进行一个检测 //每两秒进行一个检测
private final Runnable btRunnable = new Runnable() { private final Runnable btRunnable = new Runnable() {
@SuppressLint("ResourceAsColor") @SuppressLint("ResourceAsColor")
@ -108,8 +104,6 @@ public class CreateCourse extends AppCompatActivity {
Toast.makeText(CreateCourse.this, "创建成功", Toast.LENGTH_SHORT).show(); Toast.makeText(CreateCourse.this, "创建成功", Toast.LENGTH_SHORT).show();
btAddHandler.removeCallbacks(btRunnable); btAddHandler.removeCallbacks(btRunnable);
finish(); finish();
} else {
Toast.makeText(CreateCourse.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
} }
} }
}; };
@ -143,6 +137,42 @@ public class CreateCourse extends AppCompatActivity {
btAddHandler.postDelayed(btRunnable, 2000); btAddHandler.postDelayed(btRunnable, 2000);
} }
//用于图片选择器选择图片之后的回调,来完成图片上传和刷新本地
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && data != null) {
//获取选择器返回的数据
ArrayList<String> images = data.getStringArrayListExtra(
ImageSelector.SELECT_RESULT);
String url = images.get(0);
Handler handler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
bundle = (Bundle) msg.obj;
if(bundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS)){
System.out.println("refreshData..................");
getIntent().putExtras(bundle);
refreshData();
//表示照片添加成功
isSuccessCoursePhoto = true;
}else{
Toast.makeText(CreateCourse.this, "修改失败", Toast.LENGTH_SHORT).show();
}
}
};
ImgUploadUtil.userImgUpload(bundle, handler, url, ModelFieldConstants.COURSE_PHOTO);
/**
*
* true
* true
*/
boolean isCameraImage = data.getBooleanExtra(ImageSelector.IS_CAMERA_IMAGE, false);
}
}
/** /**
* *
*/ */
@ -179,33 +209,14 @@ public class CreateCourse extends AppCompatActivity {
refreshData(); refreshData();
// 用于图片上传成功之后刷新界面
imgUploadHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
bundle = (Bundle) msg.obj;
if(bundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS)){
System.out.println("refreshData..................");
getIntent().putExtras(bundle);
refreshData();
//表示照片添加成功
isSuccessCoursePhoto = true;
}else{
Toast.makeText(CreateCourse.this, "修改失败", Toast.LENGTH_SHORT).show();
}
}
};
setClickListener(); setClickListener();
} }
private void refreshData(){ private void refreshData(){
bundle = getIntent().getExtras(); bundle = getIntent().getExtras();
String courseImg = bundle.getString(ModelFieldConstants.COURSE_PHOTO); String courseImg = bundle.getString(ModelFieldConstants.COURSE_PHOTO);
if(courseImg != null){ // 将图片加载出来 if(courseImg != null){
Glide.with(getApplicationContext()) Glide.with(getApplicationContext())
.load(courseImg) .load(courseImg)
.into(ivAddImg); .into(ivAddImg);
@ -222,86 +233,109 @@ public class CreateCourse extends AppCompatActivity {
* *
*/ */
private void setClickListener(){ private void setClickListener(){
startDatePicker.addOnPositiveButtonClickListener(selection -> { startDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
String startFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日"); @Override
etStartTime.setText(startFormDate); public void onPositiveButtonClick(Long selection) {
isSuccessCourseStartTime = true; String startFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日");
Bundle bundle1 = getIntent().getExtras(); etStartTime.setText(startFormDate);
bundle1.putLong(ModelFieldConstants.START_TIME, selection); isSuccessCourseStartTime = true;
getIntent().putExtras(bundle1); Bundle bundle1 = getIntent().getExtras();
bundle1.putLong(ModelFieldConstants.START_TIME, selection);
getIntent().putExtras(bundle1);
}
}); });
endDatePicker.addOnPositiveButtonClickListener(selection -> { endDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
String endFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日"); @Override
etEndTime.setText(endFormDate); public void onPositiveButtonClick(Long selection) {
isSuccessCourseEndTime = true; String endFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日");
Bundle bundle1 = getIntent().getExtras(); etEndTime.setText(endFormDate);
bundle1.putLong(ModelFieldConstants.END_TIME, selection); isSuccessCourseEndTime = true;
getIntent().putExtras(bundle1); Bundle bundle1 = getIntent().getExtras();
bundle1.putLong(ModelFieldConstants.END_TIME, selection);
getIntent().putExtras(bundle1);
}
}); });
//点击添加图片 //点击添加图片
ivAddImg.setOnClickListener(v -> { ivAddImg.setOnClickListener(new View.OnClickListener() {
// 调用第三方开源图片库 @Override
PictureSelector.create(this) public void onClick(View v) {
.openGallery(SelectMimeType.ofImage()) //调用第三方开源库,单选并剪裁
.setImageEngine(GlideEngine.createGlideEngine()) // 图片加载引擎 ImageSelector.builder()
.setMaxSelectNum(1)// 最大图片选择数量 int .useCamera(false) // 设置是否使用拍照
.setImageSpanCount(4)// 每行显示个数 int .setCrop(true) // 设置是否使用图片剪切功能。
.setSelectionMode(SelectModeConfig.SINGLE)// 多选 or 单选 .setCropRatio(1.0f) // 图片剪切的宽高比,默认1.0f。宽固定为手机屏幕的宽。
.isPreviewImage(true)// 是否可预览图片 true or false .setSingle(true) //设置是否单选
.isSelectZoomAnim(true)// 图片列表点击 缩放效果 默认true .canPreview(true) //是否可以预览图片默认为true
.isGif(false) //是否显示gif文件 .start(CreateCourse.this, 100); // 打开相册
.isWebp(false) //是否显示webp文件 }
.isBmp(false) //是否显示bmp文件
.isMaxSelectEnabledMask(true) //达到最大选择数是否开启禁选蒙层
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) { // 选择图片后回调
LocalMedia localMedia = result.get(0);
ImgUploadUtil.userImgUpload(bundle, imgUploadHandler, localMedia.getRealPath(), ModelFieldConstants.COURSE_PHOTO);
}
@Override
public void onCancel() { } // 取消
});
}); });
//课程开始时间 //课程开始时间
etStartTime.setOnClickListener(v -> { etStartTime.setOnClickListener(new View.OnClickListener() {
if(!startDatePicker.isAdded()){ @Override
startDatePicker.show(getSupportFragmentManager(), "Hello"); public void onClick(View v) {
if(!startDatePicker.isAdded()){
startDatePicker.show(getSupportFragmentManager(), "Hello");
}
} }
}); });
//课程结束时间 //课程结束时间
etEndTime.setOnClickListener(v -> { etEndTime.setOnClickListener(new View.OnClickListener() {
if(!endDatePicker.isAdded()){ @Override
endDatePicker.show(getSupportFragmentManager(), "Hello"); public void onClick(View v) {
} if(!endDatePicker.isAdded()){
endDatePicker.show(getSupportFragmentManager(), "Hello");
}
}
}); });
//刷新当前时间 //刷新当前时间
etCreateTime.setOnClickListener(v -> { etCreateTime.setOnClickListener(new View.OnClickListener() {
long currentDate = System.currentTimeMillis(); @Override
String curFormDate = CommonUtils.stampToDate(String.valueOf(currentDate), "yyyy年MM月dd日"); public void onClick(View v) {
etCreateTime.setText(curFormDate); long currentDate = System.currentTimeMillis();
isSuccessCourseCreateTime = true; String curFormDate = CommonUtils.stampToDate(String.valueOf(currentDate), "yyyy年MM月dd日");
etCreateTime.setText(curFormDate);
isSuccessCourseCreateTime = true;
}
}); });
//课程状态选择 //课程状态选择
etStatus.setOnClickListener(v -> { etStatus.setOnClickListener(new View.OnClickListener() {
String[] singleItems = {"未结课", "已结课"}; @Override
int checkedItem = "未结课".equals(Objects.requireNonNull(etStatus.getText()).toString()) ? 0 : 1; public void onClick(View v) {
String[] singleItems = {"未结课", "已结课"};
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(CreateCourse.this) int checkedItem = "未结课".equals(etStatus.getText().toString()) ? 0 : 1;
.setTitle("请选择课程授课状态")
.setNeutralButton(getString(R.string.cancel), (dialog, which) -> { MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(CreateCourse.this)
.setTitle("请选择课程授课状态")
}) .setNeutralButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
.setPositiveButton(getString(R.string.ok), (dialog, which) -> @Override
etStatus.setText(singleItems[bundle.getInt("checkedItem")])) public void onClick(DialogInterface dialog, int which) {
.setSingleChoiceItems(singleItems, checkedItem, (dialog, which) ->
bundle.putInt("checkedItem", which)); }
materialAlertDialogBuilder.show(); })
.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
etStatus.setText(singleItems[bundle.getInt("checkedItem")]);
}
})
.setSingleChoiceItems(singleItems, checkedItem, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
bundle.putInt("checkedItem", which);
}
});
materialAlertDialogBuilder.show();
}
}); });
//返回上一个活动 //返回上一个活动
abIvTitle.setOnClickListener(v -> finish()); abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
} }
/** /**

@ -1,15 +1,10 @@
package com.example.stlink.activitys.fragmentChild.activityTeaHome; package com.example.stlink.activitys.fragmentChild.activityTeaHome;
import android.Manifest;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
@ -18,10 +13,10 @@ import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton; import androidx.appcompat.widget.AppCompatButton;
import androidx.core.content.ContextCompat;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.example.stlink.R; import com.example.stlink.R;
@ -114,7 +109,7 @@ public class CreateSign extends AppCompatActivity {
Long curTimeStamp = System.currentTimeMillis(); Long curTimeStamp = System.currentTimeMillis();
String currTime = CommonUtils.stampToDate(String.valueOf(curTimeStamp), "yyyy-MM-dd-HH-mm-ss"); String currTime = CommonUtils.stampToDate(String.valueOf(curTimeStamp), "yyyy-MM-dd-hh-mm-ss");
String[] timeStrs = currTime.split("-"); String[] timeStrs = currTime.split("-");
currYear = Integer.parseInt(timeStrs[0]); currYear = Integer.parseInt(timeStrs[0]);
currMonth = Integer.parseInt(timeStrs[1]); currMonth = Integer.parseInt(timeStrs[1]);
@ -124,7 +119,7 @@ public class CreateSign extends AppCompatActivity {
currSecond = Integer.parseInt(timeStrs[5]); currSecond = Integer.parseInt(timeStrs[5]);
startTimePicker = new MaterialTimePicker.Builder() startTimePicker = new MaterialTimePicker.Builder()
.setTimeFormat(TimeFormat.CLOCK_24H) .setTimeFormat(TimeFormat.CLOCK_12H)
.setHour(currHour) .setHour(currHour)
.setMinute(currMin) .setMinute(currMin)
.setTitleText("开始时间选择") .setTitleText("开始时间选择")
@ -132,7 +127,7 @@ public class CreateSign extends AppCompatActivity {
.setNegativeButtonText("取消") .setNegativeButtonText("取消")
.build(); .build();
endTimePicker = new MaterialTimePicker.Builder() endTimePicker = new MaterialTimePicker.Builder()
.setTimeFormat(TimeFormat.CLOCK_24H) .setTimeFormat(TimeFormat.CLOCK_12H)
.setHour(currHour) .setHour(currHour)
.setMinute(currMin) .setMinute(currMin)
.setTitleText("结束时间选择") .setTitleText("结束时间选择")
@ -169,192 +164,205 @@ public class CreateSign extends AppCompatActivity {
* *
*/ */
private void setClickListener(){ private void setClickListener(){
tvCourseName.setOnClickListener(v -> { tvCourseName.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(CreateSign.this, ChooseCourse.class); @Override
intent.putExtras(getIntent().getExtras()); public void onClick(View v) {
intentActivityResultLauncher.launch(intent); Intent intent = new Intent(CreateSign.this, ChooseCourse.class);
intent.putExtras(getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
});
abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
}); });
abIvTitle.setOnClickListener(v -> finish());
//点击添加图片 //点击添加图片
ivAddImg.setOnClickListener(v -> { ivAddImg.setOnClickListener(new View.OnClickListener() {
String signCode = Objects.requireNonNull(etCode.getText()).toString(); @Override
if (TextUtils.isEmpty(signCode)){ public void onClick(View v) {
Toast.makeText(CreateSign.this, "请先输入签到码", Toast.LENGTH_SHORT).show(); String signCode = Objects.requireNonNull(etCode.getText()).toString();
}else{ if (TextUtils.isEmpty(signCode)){
Bitmap codeBitmap = QRCodeUtil.createQRCode(signCode,500,500,null); Toast.makeText(CreateSign.this, "请先输入签到码", Toast.LENGTH_SHORT).show();
ivAddImg.setImageBitmap(codeBitmap); }else{
Bitmap codeBitmap = QRCodeUtil.createQRCode(signCode,500,500,null);
ivAddImg.setImageBitmap(codeBitmap);
}
} }
}); });
//设置回调方法,进行获取选择的时间,并将其刷新到界面 //设置回调方法,进行获取选择的时间,并将其刷新到界面
startTimePicker.addOnPositiveButtonClickListener(v -> { startTimePicker.addOnPositiveButtonClickListener(new View.OnClickListener() {
int startHour = startTimePicker.getHour(); @Override
int startMin = startTimePicker.getMinute(); public void onClick(View v) {
String startTime = currYear + "-" + int startHour = startTimePicker.getHour();
currMonth + "-" + int startMin = startTimePicker.getMinute();
currDay + " " + String startTime = String.valueOf(currYear) + "-" +
startHour + ":" + String.valueOf(currMonth) + "-" +
startMin + ":" + "00"; String.valueOf(currDay) + " " +
try { String.valueOf(startHour) + ":" +
startTimeStamp = Long.parseLong(CommonUtils.dateToStamp(startTime, "yyyy-MM-dd HH:mm:ss")); String.valueOf(startMin) + ":" + "00";
} catch (ParseException e) { try {
e.printStackTrace(); startTimeStamp = Long.parseLong(CommonUtils.dateToStamp(startTime, "yyyy-MM-dd hh:mm:ss"));
} catch (ParseException e) {
e.printStackTrace();
}
etStartTime.setText(startTime);
hasChooseStartTime = true;
} }
etStartTime.setText(startTime);
hasChooseStartTime = true;
}); });
endTimePicker.addOnPositiveButtonClickListener(v -> { endTimePicker.addOnPositiveButtonClickListener(new View.OnClickListener() {
int endHour = endTimePicker.getHour(); @Override
int endMin = endTimePicker.getMinute(); public void onClick(View v) {
String endTime = currYear + "-" + int endHour = endTimePicker.getHour();
currMonth + "-" + int endMin = endTimePicker.getMinute();
currDay + " " + String endTime = String.valueOf(currYear) + "-" +
endHour + ":" + String.valueOf(currMonth) + "-" +
endMin + ":" + "00"; String.valueOf(currDay) + " " +
try { String.valueOf(endHour) + ":" +
endTimeStamp = Long.parseLong(CommonUtils.dateToStamp(endTime, "yyyy-MM-dd HH:mm:ss")); String.valueOf(endMin) + ":" + "00";
} catch (ParseException e) { try {
e.printStackTrace(); endTimeStamp = Long.parseLong(CommonUtils.dateToStamp(endTime, "yyyy-MM-dd hh:mm:ss"));
} catch (ParseException e) {
e.printStackTrace();
}
etEndTime.setText(endTime);
hasChooseEndTime = true;
} }
etEndTime.setText(endTime);
hasChooseEndTime = true;
}); });
//课程开始时间 //课程开始时间
etStartTime.setOnClickListener(v -> { etStartTime.setOnClickListener(new View.OnClickListener() {
if(!startTimePicker.isAdded()){ @Override
startTimePicker.show(getSupportFragmentManager(), "Hello"); public void onClick(View v) {
if(!startTimePicker.isAdded()){
startTimePicker.show(getSupportFragmentManager(), "Hello");
}
} }
}); });
//课程结束时间 //课程结束时间
etEndTime.setOnClickListener(v -> { etEndTime.setOnClickListener(new View.OnClickListener() {
if(!endTimePicker.isAdded()){ @Override
endTimePicker.show(getSupportFragmentManager(), "Hello"); public void onClick(View v) {
if(!endTimePicker.isAdded()){
endTimePicker.show(getSupportFragmentManager(), "Hello");
}
} }
}); });
//定位 //定位
etLocation.setOnClickListener(v -> { etLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(CreateSign.this, MapActivity.class);
intent.putExtras(getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE); // etLocation.setText("定位");
boolean ok = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (ok) {//开了定位服务
if (ContextCompat.checkSelfPermission(CreateSign.this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) { //有权限
Intent intent = new Intent(CreateSign.this, MapActivity.class);
intent.putExtras(getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
} else { // 跳转到授予定位权限界面
Toast.makeText(CreateSign.this, "需要授予定位权限", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + this.getPackageName()));
startActivity(intent);
}
} else {
Toast.makeText(CreateSign.this, "系统检测到未开启GPS定位服务", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
} }
}); });
//保存按钮 //保存按钮
abBtSave.setOnClickListener(v -> { abBtSave.setOnClickListener(new View.OnClickListener() {
bundle = getIntent().getExtras(); @Override
String courseName = bundle.getString(ModelFieldConstants.COURSE_NAME); public void onClick(View v) {
String stuAmountStr = Objects.requireNonNull(etStuAmount.getText()).toString(); bundle = getIntent().getExtras();
String location = Objects.requireNonNull(etLocation.getText()).toString(); String courseName = bundle.getString(ModelFieldConstants.COURSE_NAME);
String signCodeStr = Objects.requireNonNull(etCode.getText()).toString(); String stuAmountStr = Objects.requireNonNull(etStuAmount.getText()).toString();
long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID); String location = Objects.requireNonNull(etLocation.getText()).toString();
Long userId = bundle.getLong(ModelFieldConstants.ID); String signCodeStr = Objects.requireNonNull(etCode.getText()).toString();
if(!TextUtils.isEmpty(courseName)){ Long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID);
if(!TextUtils.isEmpty(stuAmountStr)){ Long userId = bundle.getLong(ModelFieldConstants.ID);
if(hasChooseStartTime && hasChooseEndTime){ if(!TextUtils.isEmpty(courseName)){
if(startTimeStamp <= endTimeStamp){ if(!TextUtils.isEmpty(stuAmountStr)){
if(!TextUtils.isEmpty(location)){ if(hasChooseStartTime && hasChooseEndTime){
if(!TextUtils.isEmpty(signCodeStr)){ if(startTimeStamp <= endTimeStamp){
try{ if(!TextUtils.isEmpty(location)){
Long stuAmount = Long.parseLong(stuAmountStr); if(!TextUtils.isEmpty(signCodeStr)){
try{ try{
Long signCode = Long.parseLong(signCodeStr); Long stuAmount = Long.parseLong(stuAmountStr);
CourseCreateSignRequest courseCreateSignRequest = new CourseCreateSignRequest(); try{
courseCreateSignRequest.setCourseName(courseName); Long signCode = Long.parseLong(signCodeStr);
courseCreateSignRequest.setTotal(stuAmount); CourseCreateSignRequest courseCreateSignRequest = new CourseCreateSignRequest();
courseCreateSignRequest.setBeginTime(startTimeStamp); courseCreateSignRequest.setCourseName(courseName);
courseCreateSignRequest.setEndTime(endTimeStamp); courseCreateSignRequest.setTotal(stuAmount);
courseCreateSignRequest.setCourseAddr(location); courseCreateSignRequest.setBeginTime(startTimeStamp);
courseCreateSignRequest.setCourseId(courseId); courseCreateSignRequest.setEndTime(endTimeStamp);
courseCreateSignRequest.setUserId(userId); courseCreateSignRequest.setCourseAddr(location);
courseCreateSignRequest.setSignCode(signCode); courseCreateSignRequest.setCourseId(courseId);
handler = new Handler(msg -> { courseCreateSignRequest.setUserId(userId);
if(msg.arg1 == 200){ courseCreateSignRequest.setSignCode(signCode);
String error = (String) msg.obj; handler = new Handler(new Handler.Callback() {
Toast.makeText(CreateSign.this, error, Toast.LENGTH_SHORT).show(); @Override
}else if(msg.arg1 == 100){ public boolean handleMessage(@NonNull Message msg) {
Toast.makeText(CreateSign.this, "创建签到成功", Toast.LENGTH_SHORT).show(); if(msg.arg1 == 200){
//创建成功后直接结束当前活动,并且跳到查看签到状态 String error = (String) msg.obj;
Intent intent = new Intent(); Toast.makeText(CreateSign.this, error, Toast.LENGTH_SHORT).show();
bundle = getIntent().getExtras(); }else if(msg.arg1 == 100){
bundle.putLong(ModelFieldConstants.NOW_SIGN_COURSE_ID, courseId); Toast.makeText(CreateSign.this, "创建签到成功", Toast.LENGTH_SHORT).show();
bundle.putString(ModelFieldConstants.NOW_SIGN_COURSE_NAME, courseName); //创建成功后直接结束当前活动,并且跳到查看签到状态
bundle.putSerializable(ModelFieldConstants.COURSE_CREATE_SIGN_REQUEST , courseCreateSignRequest); Intent intent = new Intent();
intent.putExtras(bundle); bundle = getIntent().getExtras();
setResult(100,intent); bundle.putLong(ModelFieldConstants.NOW_SIGN_COURSE_ID, courseId);
finish(); bundle.putString(ModelFieldConstants.NOW_SIGN_COURSE_NAME, courseName);
} intent.putExtras(bundle);
return false; setResult(100,intent);
}); finish();
createSign(courseCreateSignRequest); }
return false;
}
});
createSign(courseCreateSignRequest);
}catch (NumberFormatException numberFormatException){
Toast.makeText(CreateSign.this, "请输入数字作为签到码", Toast.LENGTH_SHORT).show();
}
}catch (NumberFormatException numberFormatException){ }catch (NumberFormatException numberFormatException){
Toast.makeText(CreateSign.this, "请输入数字作为签到码", Toast.LENGTH_SHORT).show(); Toast.makeText(CreateSign.this, "请输入正确的签到人数", Toast.LENGTH_SHORT).show();
} }
}catch (NumberFormatException numberFormatException){ }else{
Toast.makeText(CreateSign.this, "请输入正确的签到人数", Toast.LENGTH_SHORT).show(); Toast.makeText(CreateSign.this, "请先输入签到口令", Toast.LENGTH_SHORT).show();
} }
}else{ }else{
Toast.makeText(CreateSign.this, "请先输入签到口令", Toast.LENGTH_SHORT).show(); Toast.makeText(CreateSign.this, "请先选择签到地点", Toast.LENGTH_SHORT).show();
} }
}else{ }else{
Toast.makeText(CreateSign.this, "请先选择签到地点", Toast.LENGTH_SHORT).show(); Toast.makeText(CreateSign.this, "时间设置错误", Toast.LENGTH_SHORT).show();
} }
}else{ }else{
Toast.makeText(CreateSign.this, "时间设置错误", Toast.LENGTH_SHORT).show(); Toast.makeText(CreateSign.this, "请先选择开始结束时间", Toast.LENGTH_SHORT).show();
} }
}else{ }else{
Toast.makeText(CreateSign.this, "请先选择开始结束时间", Toast.LENGTH_SHORT).show(); Toast.makeText(CreateSign.this, "请先输入待签到人数", Toast.LENGTH_SHORT).show();
} }
}else{ }else{
Toast.makeText(CreateSign.this, "请先输入待签到人数", Toast.LENGTH_SHORT).show(); Toast.makeText(CreateSign.this, "请先选择课程", Toast.LENGTH_SHORT).show();
} }
}else{
Toast.makeText(CreateSign.this, "请先选择课程", Toast.LENGTH_SHORT).show();
} }
}); });
} }
/**
*
* @param courseCreateSignRequest
*/
private void createSign(CourseCreateSignRequest courseCreateSignRequest){ private void createSign(CourseCreateSignRequest courseCreateSignRequest){
new Thread(() -> { new Thread(new Runnable() {
System.out.println( "courseCreateSignRequest : " + courseCreateSignRequest.toString() + ".............................."); @Override
String json = JSON.toJSONString(courseCreateSignRequest); public void run() {
String url = UrlConstants.TEACHER_INITIATE; System.out.println( "courseCreateSignRequest : " + courseCreateSignRequest.toString() + "..............................");
String json = JSON.toJSONString(courseCreateSignRequest);
String url = UrlConstants.TEACHER_INITIATE;
new PostBodyParamHttpUtils() { new PostBodyParamHttpUtils() {
@Override @Override
public void nextMethod(BaseResponse<Object> baseResponse) { public void nextMethod(BaseResponse<Object> baseResponse) {
Message message = new Message(); Message message = new Message();
message.arg1 = 100; message.arg1 = 100;
handler.sendMessage(message); handler.sendMessage(message);
} }
@Override @Override
public void failedMethod(BaseResponse<Object> baseResponse) { public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message(); Message message = new Message();
message.arg1 = 200; message.arg1 = 200;
message.obj = baseResponse.getMsg(); message.obj = baseResponse.getMsg();
handler.sendMessage(message); handler.sendMessage(message);
} }
}.postConnect(url, json); }.postConnect(url, json);
}
}).start(); }).start();
} }
} }

@ -9,6 +9,7 @@ import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@ -80,9 +81,7 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
if(tiNewMsg.getText() != null){ tiNewMsg.setSelection(tiNewMsg.getText().length());
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.COLLEGE_NAME : { case ModelFieldConstants.COLLEGE_NAME : {
@ -93,9 +92,7 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
if(tiNewMsg.getText() != null){ tiNewMsg.setSelection(tiNewMsg.getText().length());
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.REAL_NAME : { case ModelFieldConstants.REAL_NAME : {
@ -106,9 +103,7 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
if(tiNewMsg.getText() != null){ tiNewMsg.setSelection(tiNewMsg.getText().length());
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.ID_NUMBER : { case ModelFieldConstants.ID_NUMBER : {
@ -123,9 +118,7 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
if(tiNewMsg.getText() != null){ tiNewMsg.setSelection(tiNewMsg.getText().length());
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.GENDER : { case ModelFieldConstants.GENDER : {
@ -145,24 +138,36 @@ public class ModifyUserInfo extends AppCompatActivity {
tiNewMsg.setKeyListener(null); tiNewMsg.setKeyListener(null);
tiNewMsg.setOnClickListener(v -> { tiNewMsg.setOnClickListener(new View.OnClickListener() {
System.out.println("choose gender............"); @Override
String[] singleItems = {"男", "女"}; public void onClick(View v) {
int checkedItem = 0; System.out.println("choose gender............");
if(tiNewMsg.getText() != null){ String[] singleItems = {"男", "女"};
checkedItem = "男".equals(tiNewMsg.getText().toString()) ? 0 : 1; int checkedItem = "男".equals(tiNewMsg.getText().toString()) ? 0 : 1;
}
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(ModifyUserInfo.this)
.setTitle("请选择性别")
.setNeutralButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(ModifyUserInfo.this) }
.setTitle("请选择性别") })
.setNeutralButton(getString(R.string.cancel), (dialog, which) -> { .setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tiNewMsg.setText(singleItems[bundle.getInt("checkedItem")]);
}
})
.setSingleChoiceItems(singleItems, checkedItem, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
bundle.putInt("checkedItem", which);
}
});
materialAlertDialogBuilder.show();
}
})
.setPositiveButton(getString(R.string.ok), (dialog, which) ->
tiNewMsg.setText(singleItems[bundle.getInt("checkedItem")]))
.setSingleChoiceItems(singleItems, checkedItem, (dialog, which) ->
bundle.putInt("checkedItem", which));
materialAlertDialogBuilder.show();
}); });
break; break;
} }
@ -174,9 +179,7 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
if (tiNewMsg.getText() != null){ tiNewMsg.setSelection(tiNewMsg.getText().length());
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.PHONE : { case ModelFieldConstants.PHONE : {
@ -187,14 +190,11 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
if(tiNewMsg.getText() != null){ tiNewMsg.setSelection(tiNewMsg.getText().length());
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
default:{ default:{
String errorText = "error....."; tiNewMsg.setText("error.....");
tiNewMsg.setText(errorText);
} }
} }
} }
@ -204,7 +204,12 @@ public class ModifyUserInfo extends AppCompatActivity {
*/ */
private void setListener(){ private void setListener(){
//返回上一个活动,也就是个人信息部分 //返回上一个活动,也就是个人信息部分
abIvTitle.setOnClickListener(v -> finish()); abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
tiNewMsg.addTextChangedListener(new TextWatcher() { tiNewMsg.addTextChangedListener(new TextWatcher() {
@Override @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@ -219,7 +224,12 @@ public class ModifyUserInfo extends AppCompatActivity {
abBtSave.setBackgroundResource(R.drawable.selector_bottom_modify_info_save_2); abBtSave.setBackgroundResource(R.drawable.selector_bottom_modify_info_save_2);
abBtSave.setTextColor(Color.WHITE); abBtSave.setTextColor(Color.WHITE);
//为按钮添加点击事件 //为按钮添加点击事件
abBtSave.setOnClickListener(v -> dialog()); abBtSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog();
}
});
} }
@Override @Override
@ -234,7 +244,6 @@ public class ModifyUserInfo extends AppCompatActivity {
*/ */
private void dialog(){ private void dialog(){
//添加取消
AlertDialog alertDialog2 = new AlertDialog.Builder(this) AlertDialog alertDialog2 = new AlertDialog.Builder(this)
.setMessage("请确认是否进行" + abTvTitle.getText()) .setMessage("请确认是否进行" + abTvTitle.getText())
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮 .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@ -250,7 +259,10 @@ public class ModifyUserInfo extends AppCompatActivity {
}; };
} }
}) })
.setNegativeButton("取消", (dialogInterface, i) -> { .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}) })
.create(); .create();
alertDialog2.show(); alertDialog2.show();
@ -260,23 +272,57 @@ public class ModifyUserInfo extends AppCompatActivity {
* *
*/ */
private void modifyInfo(){ private void modifyInfo(){
new Thread(() -> { new Thread(new Runnable() {
JSONObject jsonObject = new JSONObject(); @Override
boolean isLegalInput = false; public void run() {
try { JSONObject jsonObject = new JSONObject();
jsonObject.put(ModelFieldConstants.ID, (Long) bundle.get(ModelFieldConstants.ID)); Boolean isLegalInput = false;
} catch (JSONException e) { try {
e.printStackTrace(); jsonObject.put(ModelFieldConstants.ID, (Long) bundle.get(ModelFieldConstants.ID));
} } catch (JSONException e) {
//根据上一个活动传递过来的选择字段,来选择对应的传输方法 e.printStackTrace();
String modifyField = (String) bundle.get(ModelFieldConstants.TO_BE_MODIFY); }
switch (modifyField){ //根据上一个活动传递过来的选择字段,来选择对应的传输方法
case ModelFieldConstants.ID_NUMBER: String modifyField = (String) bundle.get(ModelFieldConstants.TO_BE_MODIFY);
case ModelFieldConstants.IN_SCHOOL_TIME:{ switch (modifyField){
case ModelFieldConstants.ID_NUMBER:
case ModelFieldConstants.IN_SCHOOL_TIME:{
try {
Long msg = Long.parseLong(Objects.requireNonNull(tiNewMsg.getText()).toString());
jsonObject.put(modifyField, msg);
bundle.putLong(modifyField, msg);
isLegalInput = true;
}catch (NumberFormatException e){
e.printStackTrace();
Message msg = new Message();
msg.obj = "输入非法.";
handler.sendMessage(msg);
}catch (JSONException e) {
e.printStackTrace();
}
break;
}
case ModelFieldConstants.GENDER:{
try {
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
if("男".equals(msg) || "女".equals(msg)){
Boolean msgBoolean = "男".equals(msg);
jsonObject.put(modifyField, msgBoolean);
bundle.putBoolean(modifyField, msgBoolean);
isLegalInput = true;
}
} catch (JSONException e) {
e.printStackTrace();
}
break;
}
case ModelFieldConstants.PHONE: {
try { try {
Long msg = Long.parseLong(Objects.requireNonNull(tiNewMsg.getText()).toString()); String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
//判断输入电话号码是否能解析为long型能解析的话说明输入没有非法字符
Long msgLong = Long.parseLong(msg);
jsonObject.put(modifyField, msg); jsonObject.put(modifyField, msg);
bundle.putLong(modifyField, msg); bundle.putString(modifyField, msg);
isLegalInput = true; isLegalInput = true;
}catch (NumberFormatException e){ }catch (NumberFormatException e){
e.printStackTrace(); e.printStackTrace();
@ -284,103 +330,72 @@ public class ModifyUserInfo extends AppCompatActivity {
msg.obj = "输入非法."; msg.obj = "输入非法.";
handler.sendMessage(msg); handler.sendMessage(msg);
}catch (JSONException e) { }catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
}
break;
}
case ModelFieldConstants.GENDER:{
try {
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
if("男".equals(msg) || "女".equals(msg)){
Boolean msgBoolean = "男".equals(msg);
jsonObject.put(modifyField, msgBoolean);
bundle.putBoolean(modifyField, msgBoolean);
isLegalInput = true;
} }
} catch (JSONException e) { break;
e.printStackTrace();
}
break;
}
case ModelFieldConstants.PHONE: {
try {
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
//判断输入电话号码是否能解析为long型能解析的话说明输入没有非法字符
// Long msgLong = Long.parseLong(msg);
jsonObject.put(modifyField, msg);
bundle.putString(modifyField, msg);
isLegalInput = true;
}catch (NumberFormatException e){
e.printStackTrace();
Message msg = new Message();
msg.obj = "输入非法.";
handler.sendMessage(msg);
}catch (JSONException e) {
e.printStackTrace();
} }
break; case ModelFieldConstants.EMAIL:{
} Message message = new Message();
case ModelFieldConstants.EMAIL:{ try {
Message message = new Message(); String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
try { String[] msgStr = msg.split("@");
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString(); //必须得包含@符号
String[] msgStr = msg.split("@"); if(msgStr.length == 2){
//必须得包含@符号 //邮箱的两部分必定是长度大于0的
if(msgStr.length == 2){ if(msgStr[0].length() > 0 && msgStr[1].length() > 0){
//邮箱的两部分必定是长度大于0的 jsonObject.put(modifyField, msg);
if(msgStr[0].length() > 0 && msgStr[1].length() > 0){ bundle.putString(modifyField, msg);
jsonObject.put(modifyField, msg); isLegalInput = true;
bundle.putString(modifyField, msg); }else{
isLegalInput = true; message.obj = "输入非法.";
handler.sendMessage(message);
}
}else{ }else{
message.obj = "输入非法."; message.obj = "输入非法.";
handler.sendMessage(message); handler.sendMessage(message);
} }
}else{ } catch (NumberFormatException e){
e.printStackTrace();
message.obj = "输入非法."; message.obj = "输入非法.";
handler.sendMessage(message); handler.sendMessage(message);
}catch (JSONException e) {
e.printStackTrace();
} }
} catch (NumberFormatException e){
e.printStackTrace();
message.obj = "输入非法.";
handler.sendMessage(message);
}catch (JSONException e) {
e.printStackTrace();
}
break; break;
} }
default:{ default:{
try { try {
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString(); String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
jsonObject.put(modifyField, msg); jsonObject.put(modifyField, msg);
bundle.putString(modifyField, msg); bundle.putString(modifyField, msg);
isLegalInput = true; isLegalInput = true;
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
}
} }
} }
} System.out.println( "jsonObject : " + jsonObject.toString() + "..............................");
System.out.println( "jsonObject : " + jsonObject + ".............................."); String json = jsonObject.toString();
String json = jsonObject.toString(); String url = UrlConstants.USER_UPDATE;
String url = UrlConstants.USER_UPDATE;
if(isLegalInput){ if(isLegalInput){
new PostBodyParamHttpUtils() { new PostBodyParamHttpUtils() {
@Override @Override
public void nextMethod(BaseResponse<Object> baseResponse) { public void nextMethod(BaseResponse<Object> baseResponse) {
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtras(bundle); intent.putExtras(bundle);
setResult(RESULT_OK,intent); setResult(RESULT_OK,intent);
finish(); finish();
} }
@Override @Override
public void failedMethod(BaseResponse<Object> baseResponse) { public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message(); Message message = new Message();
System.out.println("修改失败......................."); System.out.println("修改失败.......................");
handler.sendMessage(message); handler.sendMessage(message);
} }
}.postConnect(url, json); }.postConnect(url, json);
}
} }
}).start(); }).start();
} }

@ -6,6 +6,7 @@ import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@ -20,17 +21,12 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.donkingliang.imageselector.utils.ImageSelector;
import com.example.stlink.R; import com.example.stlink.R;
import com.example.stlink.configs.GlideEngine;
import com.example.stlink.model.constants.ModelFieldConstants; import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.model.constants.UrlConstants; import com.example.stlink.model.constants.UrlConstants;
import com.example.stlink.utils.CommonUtils; import com.example.stlink.utils.CommonUtils;
import com.example.stlink.utils.activityUtil.ImgUploadUtil; import com.example.stlink.utils.activityUtil.ImgUploadUtil;
import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.config.SelectModeConfig;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -62,11 +58,9 @@ public class UserInfoDetail extends AppCompatActivity {
private Bundle bundle; private Bundle bundle;
private Handler imgUploadHandler;
private ActivityResultLauncher<Intent> intentActivityResultLauncher; private ActivityResultLauncher<Intent> intentActivityResultLauncher;
// private ArrayList<String> arrayList; private ArrayList<String> arrayList;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
@ -112,29 +106,52 @@ public class UserInfoDetail extends AppCompatActivity {
assert data != null; assert data != null;
getIntent().putExtras(data.getExtras()); getIntent().putExtras(data.getExtras());
refreshData(); refreshData();
}else if (resultCode == 100){
assert data != null;
ArrayList<String> images = data.getStringArrayListExtra(
ImageSelector.SELECT_RESULT);
} }
}); });
refreshData(); refreshData();
imgUploadHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
bundle = (Bundle) msg.obj;
if(bundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS)){
System.out.println("refreshData..................");
getIntent().putExtras(bundle);
refreshData();
}else{
Toast.makeText(UserInfoDetail.this, "修改失败", Toast.LENGTH_SHORT).show();
}
}
};
initOnClickListener(); initOnClickListener();
} }
//用于图片选择器选择图片之后的回调,来完成图片上传和刷新本地
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && data != null) {
//获取选择器返回的数据
ArrayList<String> images = data.getStringArrayListExtra(
ImageSelector.SELECT_RESULT);
String url = images.get(0);
Handler handler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
bundle = (Bundle) msg.obj;
if(bundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS)){
System.out.println("refreshData..................");
getIntent().putExtras(bundle);
refreshData();
}else{
Toast.makeText(UserInfoDetail.this, "修改失败", Toast.LENGTH_SHORT).show();
}
}
};
ImgUploadUtil.userImgUpload(bundle, handler, url, ModelFieldConstants.AVATAR);
/**
*
* true
* true
*/
boolean isCameraImage = data.getBooleanExtra(ImageSelector.IS_CAMERA_IMAGE, false);
}
}
private void refreshData(){ private void refreshData(){
bundle = getIntent().getExtras(); bundle = getIntent().getExtras();
int roleId = bundle.getInt(ModelFieldConstants.ROLE_ID); int roleId = bundle.getInt(ModelFieldConstants.ROLE_ID);
@ -143,7 +160,7 @@ public class UserInfoDetail extends AppCompatActivity {
String userNameMsg = (String) bundle.get(ModelFieldConstants.USER_NAME); String userNameMsg = (String) bundle.get(ModelFieldConstants.USER_NAME);
String realNameMsg = (String) bundle.get(ModelFieldConstants.REAL_NAME); String realNameMsg = (String) bundle.get(ModelFieldConstants.REAL_NAME);
Long idNumberMsg = (Long) bundle.get(ModelFieldConstants.ID_NUMBER); Long idNumberMsg = (Long) bundle.get(ModelFieldConstants.ID_NUMBER);
boolean sexMsg = bundle.getBoolean(ModelFieldConstants.GENDER); Boolean sexMsg = bundle.getBoolean(ModelFieldConstants.GENDER);
Long createTimeMsg = (Long) bundle.get(ModelFieldConstants.CREATE_TIME); Long createTimeMsg = (Long) bundle.get(ModelFieldConstants.CREATE_TIME);
String emailMsg = (String) bundle.get(ModelFieldConstants.EMAIL); String emailMsg = (String) bundle.get(ModelFieldConstants.EMAIL);
String phoneMsg = (String) bundle.get(ModelFieldConstants.PHONE); String phoneMsg = (String) bundle.get(ModelFieldConstants.PHONE);
@ -156,7 +173,7 @@ public class UserInfoDetail extends AppCompatActivity {
Glide.with(getApplicationContext()) Glide.with(getApplicationContext())
.load(avatar) .load(avatar)
//添加圆角 //添加圆角
.apply(RequestOptions.bitmapTransform(new RoundedCorners(30))) .apply(new RequestOptions().bitmapTransform(new RoundedCorners(30)))
.into(ivHeadImg); .into(ivHeadImg);
} }
if(schoolName != null){ if(schoolName != null){
@ -171,10 +188,12 @@ public class UserInfoDetail extends AppCompatActivity {
if(idNumberMsg != null){ if(idNumberMsg != null){
tvIdNumberMsg.setText(String.valueOf(idNumberMsg)); tvIdNumberMsg.setText(String.valueOf(idNumberMsg));
} }
if(sexMsg){ if(sexMsg != null){
tvSexMsg.setText("男"); if(sexMsg){
}else{ tvSexMsg.setText("男");
tvSexMsg.setText("女"); }else{
tvSexMsg.setText("女");
}
} }
if(createTimeMsg != null){ if(createTimeMsg != null){
Date date = new Date(createTimeMsg); Date date = new Date(createTimeMsg);
@ -191,97 +210,110 @@ public class UserInfoDetail extends AppCompatActivity {
} }
/** /**
* *
*/ */
public void initOnClickListener(){ public void initOnClickListener(){
//头像 //头像
clHeadImg.setOnClickListener(v -> { clHeadImg.setOnClickListener(new View.OnClickListener() {
// 调用第三方开源图片库 @Override
PictureSelector.create(this) public void onClick(View v) {
.openGallery(SelectMimeType.ofImage()) //调用第三方开源库,单选并剪裁
.setImageEngine(GlideEngine.createGlideEngine()) // 图片加载引擎 ImageSelector.builder()
.setMaxSelectNum(1)// 最大图片选择数量 int .useCamera(true) // 设置是否使用拍照
.setImageSpanCount(4)// 每行显示个数 int .setCrop(true) // 设置是否使用图片剪切功能。
.setSelectionMode(SelectModeConfig.SINGLE)// 多选 or 单选 .setCropRatio(1.0f) // 图片剪切的宽高比,默认1.0f。宽固定为手机屏幕的宽。
.isPreviewImage(true)// 是否可预览图片 true or false .setSingle(true) //设置是否单选
.isSelectZoomAnim(true)// 图片列表点击 缩放效果 默认true .canPreview(true) //是否可以预览图片默认为true
.isGif(false) //是否显示gif文件 .start(UserInfoDetail.this, 100); // 打开相册
.isWebp(false) //是否显示webp文件 }
.isBmp(false) //是否显示bmp文件
.isMaxSelectEnabledMask(true) //达到最大选择数是否开启禁选蒙层
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
LocalMedia localMedia = result.get(0);
String path = localMedia.getRealPath();
ImgUploadUtil.userImgUpload(bundle, imgUploadHandler, path, ModelFieldConstants.AVATAR);
}
@Override
public void onCancel() {
}
});
}); });
clUserName.setOnClickListener(v -> { clUserName.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); @Override
Bundle bundle = getIntent().getExtras(); public void onClick(View v) {
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.USER_NAME); Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.USER_NAME);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent); intentActivityResultLauncher.launch(intent);
}
}); });
clSchoolName.setOnClickListener(v -> { clSchoolName.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); @Override
Bundle bundle = getIntent().getExtras(); public void onClick(View v) {
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.COLLEGE_NAME); Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
intentActivityResultLauncher.launch(intent); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.COLLEGE_NAME);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clRealName.setOnClickListener(v -> { clRealName.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); @Override
Bundle bundle = getIntent().getExtras(); public void onClick(View v) {
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.REAL_NAME); Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
intentActivityResultLauncher.launch(intent); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.REAL_NAME);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clIdNumber.setOnClickListener(v -> { clIdNumber.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); @Override
Bundle bundle = getIntent().getExtras(); public void onClick(View v) {
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.ID_NUMBER); Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
intentActivityResultLauncher.launch(intent); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.ID_NUMBER);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clSex.setOnClickListener(v -> { clSex.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); @Override
Bundle bundle = getIntent().getExtras(); public void onClick(View v) {
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.GENDER); Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
intentActivityResultLauncher.launch(intent); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.GENDER);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clCreateTime.setOnClickListener(v -> { clCreateTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}); });
clEmail.setOnClickListener(v -> { clEmail.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); @Override
Bundle bundle = getIntent().getExtras(); public void onClick(View v) {
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.EMAIL); Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
intentActivityResultLauncher.launch(intent); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.EMAIL);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clPhone.setOnClickListener(v -> { clPhone.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); @Override
Bundle bundle = getIntent().getExtras(); public void onClick(View v) {
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.PHONE); Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
intent.putExtras(bundle); Bundle bundle = getIntent().getExtras();
intentActivityResultLauncher.launch(intent); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.PHONE);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
//返回上一个活动,也就是个人信息部分 //返回上一个活动,也就是个人信息部分
abIvTitle.setOnClickListener(v -> { abIvTitle.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(); @Override
intent.putExtras(bundle); public void onClick(View v) {
setResult(RESULT_OK,intent); Intent intent = new Intent();
finish(); intent.putExtras(bundle);
setResult(RESULT_OK,intent);
finish();
}
}); });
} }

@ -33,6 +33,11 @@ public class UserInfoRecord extends AppCompatActivity {
private void setClickListener(){ private void setClickListener(){
//返回上一个活动,也就是个人信息部分 //返回上一个活动,也就是个人信息部分
abIvTitle.setOnClickListener(v -> finish()); abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
} }
} }

@ -2,6 +2,7 @@ package com.example.stlink.activitys.fragmentChild.activityUserInfo;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
@ -37,16 +38,30 @@ public class UserInfoSetting extends AppCompatActivity {
} }
private void setClickListener(){ private void setClickListener(){
btExit.setOnClickListener(v -> btExit.setOnClickListener(new View.OnClickListener() {
CommonUtils.exitApp(UserInfoSetting.this)); @Override
public void onClick(View v) {
btLoginOut.setOnClickListener(v -> { // finish();//这个只是从方法栈中移除了当前活动
Intent intent = new Intent(UserInfoSetting.this, IdChooseActivity.class); // System.exit(0); //同上
//退出登录后,禁止再退回来 CommonUtils.exitApp(UserInfoSetting.this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); }
startActivity(intent); });
btLoginOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(UserInfoSetting.this, IdChooseActivity.class);
//退出登录后,禁止再退回来
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}); });
//返回上一个活动,也就是个人信息部分 //返回上一个活动,也就是个人信息部分
abIvTitle.setOnClickListener(v -> finish()); abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
} }
} }

@ -1,155 +0,0 @@
package com.example.stlink.configs;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.example.stlink.R;
import com.luck.picture.lib.engine.ImageEngine;
import com.luck.picture.lib.interfaces.OnCallbackListener;
import com.luck.picture.lib.utils.ActivityCompatHelper;
/**
* @author luck
* @date 2019-11-13 17:02
* @describe Glide
*/
public class GlideEngine implements ImageEngine {
/**
*
*
* @param context
* @param url url
* @param imageView
*/
@Override
public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return;
}
Glide.with(context)
.load(url)
.into(imageView);
}
/**
* urlbitmap
*
* @param context
* @param url url
* @param maxWidth
* @param maxHeight
* @param call
*/
@Override
public void loadImageBitmap(@NonNull Context context, @NonNull String url, int maxWidth, int maxHeight, OnCallbackListener<Bitmap> call) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return;
}
Glide.with(context)
.asBitmap()
.override(maxWidth, maxHeight)
.load(url)
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
if (call != null) {
call.onCall(resource);
}
}
@Override
public void onLoadFailed(@Nullable Drawable errorDrawable) {
if (call != null) {
call.onCall(null);
}
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
}
/**
*
*
* @param context
* @param url
* @param imageView ImageView
*/
@Override
public void loadAlbumCover(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return;
}
Glide.with(context)
.asBitmap()
.load(url)
.override(180, 180)
.sizeMultiplier(0.5f)
.transform(new CenterCrop(), new RoundedCorners(8))
.placeholder(R.drawable.ps_image_placeholder)
.into(imageView);
}
/**
*
*
* @param context
* @param url
* @param imageView ImageView
*/
@Override
public void loadGridImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return;
}
Glide.with(context)
.load(url)
.override(200, 200)
.centerCrop()
.placeholder(R.drawable.ps_image_placeholder)
.into(imageView);
}
@Override
public void pauseRequests(Context context) {
Glide.with(context).pauseRequests();
}
@Override
public void resumeRequests(Context context) {
Glide.with(context).resumeRequests();
}
private GlideEngine() {
}
private static GlideEngine instance;
public static GlideEngine createGlideEngine() {
if (null == instance) {
synchronized (GlideEngine.class) {
if (null == instance) {
instance = new GlideEngine();
}
}
}
return instance;
}
}

@ -81,7 +81,6 @@ public class LocationPoiAdapter extends RecyclerView.Adapter<LocationPoiAdapter.
tvBuildingDescription = itemView.findViewById(R.id.tv_building_description); tvBuildingDescription = itemView.findViewById(R.id.tv_building_description);
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "ViewHolder{" + return "ViewHolder{" +

@ -119,7 +119,6 @@ public class StuAddCourseAdapter extends RecyclerView.Adapter<StuAddCourseAdapte
holder.ivRight.setOnClickListener(new View.OnClickListener() { holder.ivRight.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
//添加取消
AlertDialog alertDialog2 = new AlertDialog.Builder(mContext) AlertDialog alertDialog2 = new AlertDialog.Builder(mContext)
.setMessage("确认加入课程") .setMessage("确认加入课程")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮 .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@ -142,7 +141,10 @@ public class StuAddCourseAdapter extends RecyclerView.Adapter<StuAddCourseAdapte
}; };
} }
}) })
.setNegativeButton("取消", (dialogInterface, i) -> { }) .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) { }
})
.create(); .create();
alertDialog2.show(); alertDialog2.show();
} }
@ -153,32 +155,35 @@ public class StuAddCourseAdapter extends RecyclerView.Adapter<StuAddCourseAdapte
* *
*/ */
private void deleteCourse(int position){ private void deleteCourse(int position){
new Thread(() -> { new Thread(new Runnable() {
AppCompatActivity appCompatActivity = (AppCompatActivity) mContext; @Override
Bundle bundle = appCompatActivity.getIntent().getExtras(); public void run() {
Long courseId = mCourseData.get(position).getmCourseId(); AppCompatActivity appCompatActivity = (AppCompatActivity) mContext;
long userId = bundle.getLong(ModelFieldConstants.ID); Bundle bundle = appCompatActivity.getIntent().getExtras();
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" + Long courseId = mCourseData.get(position).getmCourseId();
ModelFieldConstants.USER_ID + "=" + userId; long userId = bundle.getLong(ModelFieldConstants.ID);
String url = UrlConstants.STUDENT_SELECT + "?" + urlParam; String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
ModelFieldConstants.USER_ID + "=" + userId;
new PostBodyParamHttpUtils() { String url = UrlConstants.STUDENT_SELECT + "?" + urlParam;
@Override
public void nextMethod(BaseResponse<Object> baseResponse) { new PostBodyParamHttpUtils() {
Message message = new Message(); @Override
message.obj = "添加成功"; public void nextMethod(BaseResponse<Object> baseResponse) {
message.arg1 = 200; Message message = new Message();
handler.sendMessage(message); message.obj = "添加成功";
} message.arg1 = 200;
@Override handler.sendMessage(message);
public void failedMethod(BaseResponse<Object> baseResponse) { }
Message message = new Message(); @Override
System.out.println("添加失败......................."); public void failedMethod(BaseResponse<Object> baseResponse) {
message.obj = "添加失败"; Message message = new Message();
message.arg1 = 400; System.out.println("添加失败.......................");
handler.sendMessage(message); message.obj = "添加失败";
} message.arg1 = 400;
}.postConnect(url, ""); handler.sendMessage(message);
}
}.postConnect(url, "");
}
}).start(); }).start();
} }
} }

@ -46,8 +46,9 @@ public class StuCourseSignedAdapter extends RecyclerView.Adapter<StuCourseSigned
View view = LayoutInflater.from(mContext) View view = LayoutInflater.from(mContext)
.inflate(resourceId, parent, false); .inflate(resourceId, parent, false);
ViewHolder holder = new ViewHolder(view);
return new ViewHolder(view); return holder;
} }
@Override @Override

@ -112,14 +112,13 @@ public class StuDeleteCourseAdapter extends RecyclerView.Adapter<StuDeleteCourse
/** /**
* 线线 * 线线
* @param holder * @param holder
* @param position Item * @param position
*/ */
public void setDeleteClickListener(ViewHolder holder, int position){ public void setDeleteClickListener(ViewHolder holder, int position){
holder.ivRight.setOnClickListener(new View.OnClickListener() { holder.ivRight.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
//添加取消
AlertDialog alertDialog2 = new AlertDialog.Builder(mContext) AlertDialog alertDialog2 = new AlertDialog.Builder(mContext)
.setMessage("确认退出课程") .setMessage("确认退出课程")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮 .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@ -138,7 +137,10 @@ public class StuDeleteCourseAdapter extends RecyclerView.Adapter<StuDeleteCourse
}; };
} }
}) })
.setNegativeButton("取消", (dialogInterface, i) -> { .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}) })
.create(); .create();
alertDialog2.show(); alertDialog2.show();
@ -150,32 +152,35 @@ public class StuDeleteCourseAdapter extends RecyclerView.Adapter<StuDeleteCourse
* *
*/ */
private void deleteCourse(int position){ private void deleteCourse(int position){
new Thread(() -> { new Thread(new Runnable() {
AppCompatActivity appCompatActivity = (AppCompatActivity) mContext; @Override
Bundle bundle = appCompatActivity.getIntent().getExtras(); public void run() {
Long courseId = mCourseData.get(position).getmCourseId(); AppCompatActivity appCompatActivity = (AppCompatActivity) mContext;
long userId = bundle.getLong(ModelFieldConstants.ID); Bundle bundle = appCompatActivity.getIntent().getExtras();
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" + Long courseId = mCourseData.get(position).getmCourseId();
ModelFieldConstants.USER_ID + "=" + userId; Long userId = bundle.getLong(ModelFieldConstants.ID);
String url = UrlConstants.STUDENT_DROP + "?" + urlParam; String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
ModelFieldConstants.USER_ID + "=" + userId;
new DeleteUrlParamHttpUtils() { String url = UrlConstants.STUDENT_DROP + "?" + urlParam;
@Override
public void nextMethod(BaseResponse<Object> baseResponse) { new DeleteUrlParamHttpUtils() {
Message message = new Message(); @Override
message.obj = "退出成功"; public void nextMethod(BaseResponse<Object> baseResponse) {
message.arg1 = 200; Message message = new Message();
handler.sendMessage(message); message.obj = "退出成功";
} message.arg1 = 200;
@Override handler.sendMessage(message);
public void failedMethod(BaseResponse<Object> baseResponse) { }
Message message = new Message(); @Override
System.out.println("退出失败......................."); public void failedMethod(BaseResponse<Object> baseResponse) {
message.obj = "退出失败"; Message message = new Message();
message.arg1 = 400; System.out.println("退出失败.......................");
handler.sendMessage(message); message.obj = "退出失败";
} message.arg1 = 400;
}.deleteConnect(url); handler.sendMessage(message);
}
}.deleteConnect(url);
}
}).start(); }).start();
} }
} }

@ -113,14 +113,13 @@ public class TeaDeleteCourseAdapter extends RecyclerView.Adapter<TeaDeleteCourse
/** /**
* 线线 * 线线
* @param holder * @param holder
* @param position item * @param position
*/ */
public void setDeleteClickListener(ViewHolder holder, int position){ public void setDeleteClickListener(ViewHolder holder, int position){
holder.ivRight.setOnClickListener(new View.OnClickListener() { holder.ivRight.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
//添加取消
AlertDialog alertDialog2 = new AlertDialog.Builder(mContext) AlertDialog alertDialog2 = new AlertDialog.Builder(mContext)
.setMessage("确认删除课程") .setMessage("确认删除课程")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮 .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@ -143,7 +142,10 @@ public class TeaDeleteCourseAdapter extends RecyclerView.Adapter<TeaDeleteCourse
}; };
} }
}) })
.setNegativeButton("取消", (dialogInterface, i) -> { .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}) })
.create(); .create();
alertDialog2.show(); alertDialog2.show();
@ -155,32 +157,35 @@ public class TeaDeleteCourseAdapter extends RecyclerView.Adapter<TeaDeleteCourse
* *
*/ */
private void deleteCourse(int position){ private void deleteCourse(int position){
new Thread(() -> { new Thread(new Runnable() {
AppCompatActivity appCompatActivity = (AppCompatActivity) mContext; @Override
Bundle bundle = appCompatActivity.getIntent().getExtras(); public void run() {
Long courseId = mCourseData.get(position).getmCourseId(); AppCompatActivity appCompatActivity = (AppCompatActivity) mContext;
long userId = bundle.getLong(ModelFieldConstants.ID); Bundle bundle = appCompatActivity.getIntent().getExtras();
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" + Long courseId = mCourseData.get(position).getmCourseId();
ModelFieldConstants.USER_ID + "=" + userId; Long userId = bundle.getLong(ModelFieldConstants.ID);
String url = UrlConstants.TEACHER_COURSE + "?" + urlParam; String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
ModelFieldConstants.USER_ID + "=" + userId;
new DeleteUrlParamHttpUtils() { String url = UrlConstants.TEACHER_COURSE + "?" + urlParam;
@Override
public void nextMethod(BaseResponse<Object> baseResponse) { new DeleteUrlParamHttpUtils() {
Message message = new Message(); @Override
message.obj = "删除成功"; public void nextMethod(BaseResponse<Object> baseResponse) {
message.arg1 = 200; Message message = new Message();
handler.sendMessage(message); message.obj = "删除成功";
} message.arg1 = 200;
@Override handler.sendMessage(message);
public void failedMethod(BaseResponse<Object> baseResponse) { }
Message message = new Message(); @Override
System.out.println("删除失败......................."); public void failedMethod(BaseResponse<Object> baseResponse) {
message.obj = "删除失败"; Message message = new Message();
message.arg1 = 400; System.out.println("删除失败.......................");
handler.sendMessage(message); message.obj = "删除失败";
} message.arg1 = 400;
}.deleteConnect(url); handler.sendMessage(message);
}
}.deleteConnect(url);
}
}).start(); }).start();
} }
} }

@ -45,11 +45,11 @@ public class NestedScrollableHost extends FrameLayout {
return (ViewPager2) var2; return (ViewPager2) var2;
} }
private View getChild() { private final View getChild() {
return this.getChildCount() > 0 ? this.getChildAt(0) : null; return this.getChildCount() > 0 ? this.getChildAt(0) : null;
} }
private boolean canChildScroll(int orientation, float delta) { private final boolean canChildScroll(int orientation, float delta) {
boolean var5 = false; boolean var5 = false;
int direction = -((int) Math.signum(delta)); int direction = -((int) Math.signum(delta));
View var10000; View var10000;
@ -57,11 +57,11 @@ public class NestedScrollableHost extends FrameLayout {
switch (orientation) { switch (orientation) {
case 0: case 0:
var10000 = this.getChild(); var10000 = this.getChild();
var6 = var10000 != null && var10000.canScrollHorizontally(direction); var6 = var10000 != null ? var10000.canScrollHorizontally(direction) : false;
break; break;
case 1: case 1:
var10000 = this.getChild(); var10000 = this.getChild();
var6 = var10000 != null && var10000.canScrollVertically(direction); var6 = var10000 != null ? var10000.canScrollVertically(direction) : false;
break; break;
default: default:
// throw (Throwable)(new IllegalArgumentException()); // throw (Throwable)(new IllegalArgumentException());
@ -76,7 +76,7 @@ public class NestedScrollableHost extends FrameLayout {
return super.onInterceptTouchEvent(e); return super.onInterceptTouchEvent(e);
} }
private void handleInterceptTouchEvent(MotionEvent e) { private final void handleInterceptTouchEvent(MotionEvent e) {
ViewPager2 var10000 = this.getParentViewPager(); ViewPager2 var10000 = this.getParentViewPager();
if (var10000 != null) { if (var10000 != null) {
int orientation = var10000.getOrientation(); int orientation = var10000.getOrientation();
@ -96,7 +96,11 @@ public class NestedScrollableHost extends FrameLayout {
if (scaledDx > (float) this.touchSlop || scaledDy > (float) this.touchSlop) { if (scaledDx > (float) this.touchSlop || scaledDy > (float) this.touchSlop) {
if (isVpHorizontal == scaledDy > scaledDx) { if (isVpHorizontal == scaledDy > scaledDx) {
this.getParent().requestDisallowInterceptTouchEvent(false); this.getParent().requestDisallowInterceptTouchEvent(false);
} else this.getParent().requestDisallowInterceptTouchEvent(this.canChildScroll(orientation, isVpHorizontal ? dx : dy)); } else if (this.canChildScroll(orientation, isVpHorizontal ? dx : dy)) {
this.getParent().requestDisallowInterceptTouchEvent(true);
} else {
this.getParent().requestDisallowInterceptTouchEvent(false);
}
} }
} }

@ -55,14 +55,23 @@ public class CourseSelectedStuFragment extends Fragment {
} }
private void setClickListener(){ private void setClickListener(){
stu1.setOnClickListener(v -> { stu1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}); });
stu2.setOnClickListener(v -> { stu2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}); });
stu3.setOnClickListener(v -> { stu3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}); });
} }

@ -141,9 +141,12 @@ public class CrsFinishedListFragment extends Fragment {
@Override @Override
public void onItemLongClick(RecyclerView parent, View view, int position) { } public void onItemLongClick(RecyclerView parent, View view, int position) { }
}); });
srlMyRefresh.setOnRefreshListener(() -> { srlMyRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
refreshData(); @Override
srlMyRefresh.setRefreshing(false); public void onRefresh() {
refreshData();
srlMyRefresh.setRefreshing(false);
}
}); });
} }

@ -143,9 +143,12 @@ public class CrsUnfinishedListFragment extends Fragment {
@Override @Override
public void onItemLongClick(RecyclerView parent, View view, int position) { } public void onItemLongClick(RecyclerView parent, View view, int position) { }
}); });
srlMyRefresh.setOnRefreshListener(() -> { srlMyRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
refreshData(); @Override
srlMyRefresh.setRefreshing(false); public void onRefresh() {
refreshData();
srlMyRefresh.setRefreshing(false);
}
}); });
} }

@ -9,6 +9,7 @@ import android.os.Message;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -29,7 +30,6 @@ import com.example.stlink.model.domain.CourseSign;
import com.example.stlink.model.response.BaseResponse; import com.example.stlink.model.response.BaseResponse;
import com.example.stlink.model.response.data.CourseData; import com.example.stlink.model.response.data.CourseData;
import com.example.stlink.utils.httpUtils.GetUrlParamHttpUtils; import com.example.stlink.utils.httpUtils.GetUrlParamHttpUtils;
import com.google.android.material.badge.BadgeDrawable;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.internal.LinkedTreeMap; import com.google.gson.internal.LinkedTreeMap;
@ -47,8 +47,6 @@ public class StuClassListFragment extends Fragment {
private static AppCompatActivity mAppCompatActivity; private static AppCompatActivity mAppCompatActivity;
private static SwipeRefreshLayout srlMyRefresh; private static SwipeRefreshLayout srlMyRefresh;
private static BadgeDrawable mBadge;
private int currentPage = 1; private int currentPage = 1;
private int size = 10; private int size = 10;
@ -69,9 +67,8 @@ public class StuClassListFragment extends Fragment {
} }
public static StuClassListFragment newInstance(String str, AppCompatActivity appCompatActivity, BadgeDrawable orCreateBadge){ public static StuClassListFragment newInstance(String str, AppCompatActivity appCompatActivity){
mAppCompatActivity = appCompatActivity; mAppCompatActivity = appCompatActivity;
mBadge = orCreateBadge;
StuClassListFragment frag = new StuClassListFragment(); StuClassListFragment frag = new StuClassListFragment();
return frag; return frag;
} }
@ -85,7 +82,6 @@ public class StuClassListFragment extends Fragment {
@SuppressLint("NotifyDataSetChanged")
public static void refreshData(){ public static void refreshData(){
courseIdList = new ArrayList<>(); courseIdList = new ArrayList<>();
courseSigns = new ArrayList<>(); courseSigns = new ArrayList<>();
@ -103,15 +99,19 @@ public class StuClassListFragment extends Fragment {
getStuSelectedCourseList(); getStuSelectedCourseList();
//只有在获取当前学生所选课程的所有id之后才能遍历 //只有在获取当前学生所选课程的所有id之后才能遍历
handler = new Handler(msg -> { handler = new Handler(new Handler.Callback() {
if(msg.arg1 == 100){ @SuppressLint("NotifyDataSetChanged")
getToBeSignList(); @Override
setListener(); public boolean handleMessage(@NonNull Message msg) {
}else if(msg.arg1 == 200){ if(msg.arg1 == 100){
adapter.notifyDataSetChanged(); getToBeSignList();
System.out.println("StuClassListFragment:courseSigns = " + courseSigns.toString()); setListener();
}else if(msg.arg1 == 200){
adapter.notifyDataSetChanged();
System.out.println("StuClassListFragment:courseSigns = " + courseSigns.toString());
}
return false;
} }
return false;
}); });
} }
@ -136,9 +136,12 @@ public class StuClassListFragment extends Fragment {
} }
}); });
srlMyRefresh.setOnRefreshListener(() -> { srlMyRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
refreshData(); @Override
srlMyRefresh.setRefreshing(false); public void onRefresh() {
refreshData();
srlMyRefresh.setRefreshing(false);
}
}); });
} }
@ -188,49 +191,48 @@ public class StuClassListFragment extends Fragment {
* *
*/ */
private static void getToBeSignList(){ private static void getToBeSignList(){
new Thread(() -> { new Thread(new Runnable() {
for(Long courseId : courseIdList){ @Override
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" + public void run() {
ModelFieldConstants.USER_ID + "=" + bundle.getLong(ModelFieldConstants.ID) + "&" + for(Long courseId : courseIdList){
ModelFieldConstants.COURSE_SIGN_STATUS + "=" + 0; String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
String url = UrlConstants.STUDENT_SIGN_LIST + "?" + urlParam; ModelFieldConstants.USER_ID + "=" + bundle.getLong(ModelFieldConstants.ID) + "&" +
new GetUrlParamHttpUtils() { ModelFieldConstants.COURSE_SIGN_STATUS + "=" + 0;
@Override String url = UrlConstants.STUDENT_SIGN_LIST + "?" + urlParam;
public void nextMethod(BaseResponse<Object> baseResponse) { new GetUrlParamHttpUtils() {
if(baseResponse.getData() != null){ @Override
System.out.println("StuClassListFragment:courseDataBaseResponse.getData() = " + baseResponse.getData() + "..............."); public void nextMethod(BaseResponse<Object> baseResponse) {
if(baseResponse.getData() != null){
//解析数据 System.out.println("StuClassListFragment:courseDataBaseResponse.getData() = " + baseResponse.getData() + "...............");
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
Object obj = baseResponse.getData(); //解析数据
LinkedTreeMap<String, String> courseDataMap = null; Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
if(obj instanceof LinkedTreeMap){ Object obj = baseResponse.getData();
courseDataMap = (LinkedTreeMap<String, String>) obj; LinkedTreeMap<String, String> courseDataMap = null;
} if(obj instanceof LinkedTreeMap){
//将LinkedTreeMap中字段映射到CourseData类中 courseDataMap = (LinkedTreeMap<String, String>) obj;
//array:学生获取所选课程签到列表返回实体 }
String jsonString = gson.toJson(courseDataMap); //将LinkedTreeMap中字段映射到CourseData类中
CourseData<CourseSign> courseData = gson.fromJson(jsonString, new TypeToken<CourseData<CourseSign>>() {}.getType()); //array:学生获取所选课程签到列表返回实体
for(CourseSign courseSign : courseData.getRecords()){ String jsonString = gson.toJson(courseDataMap);
courseSign.setCourseId(courseId); CourseData<CourseSign> courseData = gson.fromJson(jsonString, new TypeToken<CourseData<CourseSign>>() {}.getType());
} for(CourseSign courseSign : courseData.getRecords()){
int total = courseData.getTotal(); courseSign.setCourseId(courseId);
//设置角标 }
mBadge.setVisible(true);
mBadge.setNumber(total); if(courseData.getRecords().size() != 0){
System.out.println("StuClassListFragment:size = " + mBadge.getNumber() + "....................."); courseSigns.addAll(courseData.getRecords());
System.out.println(mBadge.isVisible()); System.out.println("Here......................");
if(courseData.getRecords().size() != 0){ Message message = new Message();
courseSigns.addAll(courseData.getRecords()); message.arg1 = 200;
Message message = new Message(); handler.sendMessage(message);
message.arg1 = 200; }
handler.sendMessage(message);
} }
} }
} @Override
@Override public void failedMethod(BaseResponse<Object> baseResponse) { }
public void failedMethod(BaseResponse<Object> baseResponse) { } }.getConnect(url);
}.getConnect(url); }
} }
}).start(); }).start();
} }

@ -10,6 +10,7 @@ import android.os.Message;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -94,10 +95,13 @@ public class StuHomeFragment extends Fragment {
FloatDragPopupWindow floatDragPopupWindow = new FloatDragPopupWindow.Builder(mAppCompatActivity) FloatDragPopupWindow floatDragPopupWindow = new FloatDragPopupWindow.Builder(mAppCompatActivity)
.setContentView(faButton) .setContentView(faButton)
.setPosition(0, 600) .setPosition(0, 600)
.setOnClickListener(v -> { .setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(mAppCompatActivity, AllCourses.class); @Override
intent.putExtras(mAppCompatActivity.getIntent().getExtras()); public void onClick(View v) {
mAppCompatActivity.startActivity(intent); Intent intent = new Intent(mAppCompatActivity, AllCourses.class);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
mAppCompatActivity.startActivity(intent);
}
}) })
.build(); .build();
// 显示 FloatDragPopupWindow // 显示 FloatDragPopupWindow
@ -114,19 +118,31 @@ public class StuHomeFragment extends Fragment {
*/ */
private static void setListener(View view){ private static void setListener(View view){
//口令输入 TODO //口令输入 TODO
codeButton.setOnClickListener(v -> { codeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}); });
//文本输入 TODO //文本输入 TODO
wordButton.setOnClickListener(v -> { wordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}); });
faButton.setOnClickListener(v -> { faButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}); });
srlMyRefresh.setOnRefreshListener(() -> { srlMyRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
refreshData(); @Override
srlMyRefresh.setRefreshing(false); public void onRefresh() {
refreshData();
srlMyRefresh.setRefreshing(false);
}
}); });
} }

@ -95,12 +95,15 @@ public class TeaCourseListFragment extends Fragment {
*/ */
private void setClickListener(){ private void setClickListener(){
//点击刷新页面 //点击刷新页面
ftBtRefresh.setOnClickListener(v -> { ftBtRefresh.setOnClickListener(new View.OnClickListener() {
int position = viewPager2.getCurrentItem(); @Override
if (position == 0){ public void onClick(View v) {
CrsUnfinishedListFragment.refreshData(); int position = viewPager2.getCurrentItem();
}else{ if (position == 0){
CrsFinishedListFragment.refreshData(); CrsUnfinishedListFragment.refreshData();
}else{
CrsFinishedListFragment.refreshData();
}
} }
}); });
} }

@ -1,5 +1,6 @@
package com.example.stlink.fragments; package com.example.stlink.fragments;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
@ -91,37 +92,52 @@ public class TeaHomeFragment extends Fragment{
*/ */
private void setClickListener(){ private void setClickListener(){
//查看签到 //查看签到
btCodeCheck.setOnClickListener(v -> { btCodeCheck.setOnClickListener(new View.OnClickListener() {
bundle = mAppCompatActivity.getIntent().getExtras(); @Override
String nowSignCourseName = bundle.getString(ModelFieldConstants.NOW_SIGN_COURSE_NAME); public void onClick(View v) {
if(nowSignCourseName != null){ bundle = mAppCompatActivity.getIntent().getExtras();
System.out.println("nowSignCourseName = " + nowSignCourseName + "......................"); String nowSignCourseName = bundle.getString(ModelFieldConstants.NOW_SIGN_COURSE_NAME);
Intent intent = new Intent(mAppCompatActivity, CheckCourseSign.class); if(nowSignCourseName != null){
intent.putExtras(mAppCompatActivity.getIntent().getExtras()); System.out.println("nowSignCourseName = " + nowSignCourseName + "......................");
startActivity(intent); Intent intent = new Intent(mAppCompatActivity, CheckCourseSign.class);
}else{ intent.putExtras(mAppCompatActivity.getIntent().getExtras());
Intent intent = new Intent(mAppCompatActivity, ChooseCourse.class); startActivity(intent);
bundle.putInt(ModelFieldConstants.COURSE_CHOOSE_SELECT, 1); }else{
intent.putExtras(bundle); Intent intent = new Intent(mAppCompatActivity, ChooseCourse.class);
startActivity(intent); bundle.putInt(ModelFieldConstants.COURSE_CHOOSE_SELECT, 1);
intent.putExtras(bundle);
startActivity(intent);
}
} }
}); });
//创建签到 //创建签到
btWordCheck.setOnClickListener(v -> { btWordCheck.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(mAppCompatActivity, CreateSign.class); @Override
bundle = mAppCompatActivity.getIntent().getExtras(); public void onClick(View v) {
bundle.putInt(ModelFieldConstants.COURSE_CHOOSE_SELECT, 0); Intent intent = new Intent(mAppCompatActivity, CreateSign.class);
intent.putExtras(bundle); bundle = mAppCompatActivity.getIntent().getExtras();
intentActivityResultLauncher.launch(intent); bundle.putInt(ModelFieldConstants.COURSE_CHOOSE_SELECT, 0);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
//创建班级 //创建班级
btCreateClass.setOnClickListener(v -> { btCreateClass.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(mAppCompatActivity, CreateCourse.class); @Override
intent.putExtras(mAppCompatActivity.getIntent().getExtras()); public void onClick(View v) {
intentActivityResultLauncher.launch(intent); Intent intent = new Intent(mAppCompatActivity, CreateCourse.class);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
//管理班级 //管理班级
btManageClass.setOnClickListener(v -> vp2.setCurrentItem(1)); btManageClass.setOnClickListener(new View.OnClickListener() {
@SuppressLint("ResourceType")
@Override
public void onClick(View v) {
vp2.setCurrentItem(1);
}
});
} }
} }

@ -70,7 +70,7 @@ public class UserInfoFragment extends Fragment {
/** /**
* UserInfoFragment * UserInfoFragment
* @param str * @param str
* @return UserInfoFragment * @return UserInfoFragment
*/ */
public static UserInfoFragment newInstance(String str, AppCompatActivity appCompatActivity){ public static UserInfoFragment newInstance(String str, AppCompatActivity appCompatActivity){
@ -122,7 +122,7 @@ public class UserInfoFragment extends Fragment {
Glide.with(mAppCompatActivity) Glide.with(mAppCompatActivity)
.load(avatar) .load(avatar)
//添加圆角 //添加圆角
.apply(RequestOptions.bitmapTransform(new RoundedCorners(10))) .apply(new RequestOptions().bitmapTransform(new RoundedCorners(10)))
.into(ivHeadImg); .into(ivHeadImg);
} }
if(userName != null){ if(userName != null){
@ -136,66 +136,94 @@ public class UserInfoFragment extends Fragment {
public static void initOnClickListener(){ public static void initOnClickListener(){
btSetting.setOnClickListener(v -> { btSetting.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(mAppCompatActivity, UserInfoSetting.class); @Override
intent.putExtras(mAppCompatActivity.getIntent().getExtras()); public void onClick(View v) {
intentActivityResultLauncher.launch(intent); Intent intent = new Intent(mAppCompatActivity, UserInfoSetting.class);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
//关于 //关于
btAbout.setOnClickListener(v -> { btAbout.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(mAppCompatActivity, UserInfoAbout.class); @Override
intent.putExtras(mAppCompatActivity.getIntent().getExtras()); public void onClick(View v) {
intentActivityResultLauncher.launch(intent); Intent intent = new Intent(mAppCompatActivity, UserInfoAbout.class);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
//分享 //分享
btShare.setOnClickListener(v -> { btShare.setOnClickListener(new View.OnClickListener() {
shareHandler = new Handler(msg -> { @Override
if(msg.arg1 == 1){ public void onClick(View v) {
Intent shareIntent = (Intent) msg.obj; shareHandler = new Handler(new Handler.Callback() {
intentActivityResultLauncher.launch(Intent.createChooser(shareIntent, "分享apk")); @Override
} public boolean handleMessage(@NonNull Message msg) {
return false; if(msg.arg1 == 1){
}); Intent shareIntent = (Intent) msg.obj;
shareApk(); intentActivityResultLauncher.launch(Intent.createChooser(shareIntent, "分享apk"));
}
return false;
}
});
shareApk();
}
}); });
btRecord.setOnClickListener(v -> { btRecord.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(mAppCompatActivity, UserInfoRecord.class); @Override
intent.putExtras(mAppCompatActivity.getIntent().getExtras()); public void onClick(View v) {
intentActivityResultLauncher.launch(intent); Intent intent = new Intent(mAppCompatActivity, UserInfoRecord.class);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
clBaseInfo.setOnClickListener(v -> { clBaseInfo.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(mAppCompatActivity, UserInfoDetail.class); @Override
intent.putExtras(mAppCompatActivity.getIntent().getExtras()); public void onClick(View v) {
intentActivityResultLauncher.launch(intent); Intent intent = new Intent(mAppCompatActivity, UserInfoDetail.class);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
} }
private static void shareApk(){ private static void shareApk(){
new Thread(() -> { new Thread(new Runnable() {
PackageManager mPackageManager = mAppCompatActivity.getPackageManager(); @Override
List<PackageInfo> packageInfoList = mPackageManager.getInstalledPackages(0); public void run() {
System.out.println("UserInfoFragment:PackageInfo : " + packageInfoList); PackageManager mPackageManager = mAppCompatActivity.getPackageManager();
try { List<PackageInfo> packageInfoList = mPackageManager.getInstalledPackages(0);
ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo("com.example.stlink", 0); System.out.println("UserInfoFragment:PackageInfo : " + packageInfoList);
File apkFile = new File(applicationInfo.sourceDir); try {
ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo("com.example.stlink", 0);
Intent shareIntent = new Intent(); File apkFile = new File(applicationInfo.sourceDir);
// 设置该意图对象作为活动发送
shareIntent.setAction(Intent.ACTION_SEND); Intent shareIntent = new Intent();
shareIntent.setType("*/*"); shareIntent.setAction(Intent.ACTION_SEND);
// 给目标应用一个临时的读授权如果要写权限则是FLAG_GRANT_WRITE_URI_PERMISSION // // 比如发送文本形式的数据内容
shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // // 指定发送的内容
// 第二个参数就是AndroidManifest中配置的authorities即包名.fileProvider // shareIntent.putExtra(Intent.EXTRA_TEXT, "S.T.Link......");
Uri contentUri = FileProvider.getUriForFile(mAppCompatActivity, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile); // // 指定发送内容的类型
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); // shareIntent.setType("text/plain");
//
Message message = new Message(); // intentActivityResultLauncher.launch(Intent.createChooser(shareIntent, "分享"));
message.arg1 = 1;
message.obj = shareIntent; shareIntent.setType("*/*");
shareHandler.sendMessage(message); // 给目标应用一个临时的读授权如果要写权限则是FLAG_GRANT_WRITE_URI_PERMISSION
shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} catch (PackageManager.NameNotFoundException e) { // 第二个参数就是AndroidManifest中配置的authorities即包名.fileProvider
e.printStackTrace(); Uri contentUri = FileProvider.getUriForFile(mAppCompatActivity, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
Message message = new Message();
message.arg1 = 1;
message.obj = shareIntent;
shareHandler.sendMessage(message);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
} }
}).start(); }).start();
} }

@ -76,8 +76,6 @@ public class ModelFieldConstants {
public static final String COURSE_SIGN = "courseSign"; public static final String COURSE_SIGN = "courseSign";
//地点 //地点
public static final String LOCATION = "location"; public static final String LOCATION = "location";
//签到请求封装类
public static final String COURSE_CREATE_SIGN_REQUEST = "courseCreateSignRequest";
/*==================================================================================================*/ /*==================================================================================================*/

@ -2,8 +2,6 @@ package com.example.stlink.model.domain;
import android.content.Intent; import android.content.Intent;
import androidx.annotation.NonNull;
import java.util.Date; import java.util.Date;
public class User { public class User {
@ -162,7 +160,6 @@ public class User {
this.userName = userName; this.userName = userName;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "User{" + return "User{" +

@ -1,7 +1,5 @@
package com.example.stlink.model.request; package com.example.stlink.model.request;
import androidx.annotation.NonNull;
import com.example.stlink.model.constants.UrlConstants; import com.example.stlink.model.constants.UrlConstants;
public class AllCourseRequest { public class AllCourseRequest {
@ -26,7 +24,6 @@ public class AllCourseRequest {
this.size = size; this.size = size;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
String retValue; String retValue;

@ -1,6 +1,6 @@
package com.example.stlink.model.request; package com.example.stlink.model.request;
import androidx.annotation.NonNull; import com.google.gson.internal.bind.util.ISO8601Utils;
public class CourseCreateRequest { public class CourseCreateRequest {
@ -124,7 +124,6 @@ public class CourseCreateRequest {
this.userName = userName; this.userName = userName;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "CourseCreateRequest{" + return "CourseCreateRequest{" +

@ -1,13 +1,9 @@
package com.example.stlink.model.request; package com.example.stlink.model.request;
import androidx.annotation.NonNull;
import java.io.Serializable;
/** /**
* *
*/ */
public class CourseCreateSignRequest implements Serializable { public class CourseCreateSignRequest {
/** /**
* () * ()
@ -113,7 +109,6 @@ public class CourseCreateSignRequest implements Serializable {
this.userId = userId; this.userId = userId;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "CourseCreateSignRequest{" + return "CourseCreateSignRequest{" +

@ -1,6 +1,6 @@
package com.example.stlink.model.request; package com.example.stlink.model.request;
import androidx.annotation.NonNull; import android.content.Intent;
public class StuSignRequest { public class StuSignRequest {
@ -43,7 +43,6 @@ public class StuSignRequest {
this.userSignId = userSignId; this.userSignId = userSignId;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "StuSignRequest{" + return "StuSignRequest{" +

@ -1,7 +1,5 @@
package com.example.stlink.model.request; package com.example.stlink.model.request;
import androidx.annotation.NonNull;
public class UserModifyRequest { public class UserModifyRequest {
/** /**
@ -135,7 +133,6 @@ public class UserModifyRequest {
this.userName = userName; this.userName = userName;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "UserModifyRequest{" + return "UserModifyRequest{" +

@ -1,7 +1,5 @@
package com.example.stlink.model.request; package com.example.stlink.model.request;
import androidx.annotation.NonNull;
public class UserRegisterRequest { public class UserRegisterRequest {
/** /**
@ -43,7 +41,6 @@ public class UserRegisterRequest {
this.userName = userName; this.userName = userName;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "UserRegisterRequest{" + return "UserRegisterRequest{" +

@ -1,7 +1,5 @@
package com.example.stlink.model.response; package com.example.stlink.model.response;
import androidx.annotation.NonNull;
public class BaseResponse <T> { public class BaseResponse <T> {
private int code; private int code;
@ -36,7 +34,6 @@ public class BaseResponse <T> {
this.data = data; this.data = data;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "BaseResponse{" + return "BaseResponse{" +

@ -1,7 +1,8 @@
package com.example.stlink.model.response.data; package com.example.stlink.model.response.data;
import androidx.annotation.NonNull; import com.example.stlink.model.domain.Course;
import java.util.Arrays;
import java.util.List; import java.util.List;
public class CourseData <T> { public class CourseData <T> {
@ -46,7 +47,6 @@ public class CourseData <T> {
this.total = total; this.total = total;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "CourseData{" + return "CourseData{" +

@ -1,6 +1,6 @@
package com.example.stlink.model.response.data; package com.example.stlink.model.response.data;
import androidx.annotation.NonNull; import com.google.gson.annotations.SerializedName;
import java.io.Serializable; import java.io.Serializable;
@ -151,7 +151,6 @@ public class CourseDetailData implements Serializable {
this.userName = userName; this.userName = userName;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "CourseDetailData{" + return "CourseDetailData{" +

@ -1,7 +1,5 @@
package com.example.stlink.model.response.data; package com.example.stlink.model.response.data;
import androidx.annotation.NonNull;
public class CourseSignMsg { public class CourseSignMsg {
/** /**
@ -43,7 +41,6 @@ public class CourseSignMsg {
this.courseNum = courseNum; this.courseNum = courseNum;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "CourseSignMsg{" + return "CourseSignMsg{" +

@ -16,6 +16,7 @@ import java.nio.charset.StandardCharsets;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.TimeZone; import java.util.TimeZone;
@ -240,7 +241,7 @@ public class CommonUtils {
//需要加八个格林威治时间 //需要加八个格林威治时间
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
//如果它本来就是long类型的,则不用写这一步 //如果它本来就是long类型的,则不用写这一步
long lt = Long.parseLong(s); long lt = new Long(s);
Date date = new Date(lt); Date date = new Date(lt);
res = simpleDateFormat.format(date); res = simpleDateFormat.format(date);
return res; return res;
@ -256,7 +257,7 @@ public class CommonUtils {
String res; String res;
@SuppressLint("SimpleDateFormat") @SuppressLint("SimpleDateFormat")
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(fprmat); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(fprmat);
// simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
//如果它本来就是long类型的,则不用写这一步 //如果它本来就是long类型的,则不用写这一步
long lt = Long.parseLong(s); long lt = Long.parseLong(s);
Date date = new Date(lt); Date date = new Date(lt);

@ -2,6 +2,7 @@ package com.example.stlink.utils;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.widget.TextView;
import com.baidu.location.BDAbstractLocationListener; import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation; import com.baidu.location.BDLocation;

@ -2,6 +2,7 @@ package com.example.stlink.utils;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.media.Image;
import com.google.zxing.BarcodeFormat; import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType; import com.google.zxing.EncodeHintType;

@ -48,10 +48,18 @@ public class CheckCourseSignUtil {
*/ */
public void initPage(List<Fragment> list){ public void initPage(List<Fragment> list){
// 设置点击触发 // 设置点击触发
tvSignList.setOnClickListener(v -> tvSignList.setOnClickListener(new View.OnClickListener() {
viewPager2.setCurrentItem(0)); @Override
tvCourseSignLeave.setOnClickListener(v -> public void onClick(View v) {
viewPager2.setCurrentItem(2)); viewPager2.setCurrentItem(0);
}
});
tvCourseSignLeave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager2.setCurrentItem(2);
}
});
// 注册页面改变的回调函数 // 注册页面改变的回调函数
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { // 声明页面切换后的回调函数 viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { // 声明页面切换后的回调函数
@Override @Override

@ -1,5 +1,6 @@
package com.example.stlink.utils.activityUtil; package com.example.stlink.utils.activityUtil;
import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
@ -44,12 +45,24 @@ public class CourseDetailUtil {
*/ */
public void initPage(List<Fragment> list){ public void initPage(List<Fragment> list){
// 设置点击触发 // 设置点击触发
tvCourseIntro.setOnClickListener(v -> tvCourseIntro.setOnClickListener(new View.OnClickListener() {
viewPager2.setCurrentItem(0)); @Override
tvCourseClassList.setOnClickListener(v -> public void onClick(View v) {
viewPager2.setCurrentItem(1)); viewPager2.setCurrentItem(0);
tvCourseSelectedStu.setOnClickListener(v -> }
viewPager2.setCurrentItem(2)); });
tvCourseClassList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager2.setCurrentItem(1);
}
});
tvCourseSelectedStu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager2.setCurrentItem(2);
}
});
// 注册页面改变的回调函数 // 注册页面改变的回调函数
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { // 声明页面切换后的回调函数 viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { // 声明页面切换后的回调函数
@Override @Override

@ -15,24 +15,27 @@ public class CreateCourseUtil {
public static void createCourse(AppCompatActivity appCompatActivity, CourseCreateRequest courseCreateRequest, Handler handler, @Nullable String url) { public static void createCourse(AppCompatActivity appCompatActivity, CourseCreateRequest courseCreateRequest, Handler handler, @Nullable String url) {
new Thread(() -> { new Thread(new Runnable() {
//fastJson将对象转换为JSON字符串 @Override
String json = JSON.toJSONString(courseCreateRequest); public void run() {
//fastJson将对象转换为JSON字符串
new PostBodyParamHttpUtils() { String json = JSON.toJSONString(courseCreateRequest);
@Override
public void nextMethod(BaseResponse<Object> baseResponse) { new PostBodyParamHttpUtils() {
Message message = new Message(); @Override
message.obj = "success"; public void nextMethod(BaseResponse<Object> baseResponse) {
handler.sendMessage(message); Message message = new Message();
} message.obj = "success";
@Override handler.sendMessage(message);
public void failedMethod(BaseResponse<Object> baseResponse) { }
Message message = new Message(); @Override
message.obj = baseResponse.getMsg(); public void failedMethod(BaseResponse<Object> baseResponse) {
handler .sendMessage(message); Message message = new Message();
} message.obj = baseResponse.getMsg();
}.postConnect(url, json); handler .sendMessage(message);
}
}.postConnect(url, json);
}
}).start(); }).start();
} }

@ -1,5 +1,6 @@
package com.example.stlink.utils.activityUtil; package com.example.stlink.utils.activityUtil;
import android.graphics.ColorSpace;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
@ -7,6 +8,7 @@ import android.text.TextUtils;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
//import com.example.stlink.config.adapter.ImageAdapter;
import com.example.stlink.model.constants.ModelFieldConstants; import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.model.constants.UrlConstants; import com.example.stlink.model.constants.UrlConstants;
import com.example.stlink.model.response.BaseResponse; import com.example.stlink.model.response.BaseResponse;
@ -32,32 +34,35 @@ public class ImgUploadUtil {
mBundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS, false); mBundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS, false);
new Thread(() -> { new Thread(new Runnable() {
File file = null; @Override
if (path != null && !TextUtils.isEmpty(path)) { public void run() {
file = new File(path); File file = null;
} if (!TextUtils.isEmpty(path)) {
new PostFileHttpUtils() { file = new File(path);
@Override
public void nextMethod(BaseResponse<Object> baseResponse) {
if(ModelFieldConstants.AVATAR.equals(mImgId)){
userImgUploadNext(baseResponse);
}else if (ModelFieldConstants.COURSE_PHOTO.equals(mImgId)){
Message message = new Message();
mBundle.putString(mImgId, (String) baseResponse.getData());
mBundle.putBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS, true);
message.obj = mBundle;
mHandler.sendMessage(message);
}
} }
new PostFileHttpUtils() {
@Override
public void nextMethod(BaseResponse<Object> baseResponse) {
if(ModelFieldConstants.AVATAR.equals(mImgId)){
userImgUploadNext(baseResponse);
}else if (ModelFieldConstants.COURSE_PHOTO.equals(mImgId)){
Message message = new Message();
mBundle.putString(mImgId, (String) baseResponse.getData());
mBundle.putBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS, true);
message.obj = mBundle;
mHandler.sendMessage(message);
}
}
@Override @Override
public void failedMethod(BaseResponse<Object> baseResponse) { public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message(); Message message = new Message();
System.out.println("上传失败......................."); System.out.println("上传失败.......................");
handler.sendMessage(message); handler.sendMessage(message);
} }
}.FileUpload(UrlConstants.FILE_UPLOAD, file); }.FileUpload(UrlConstants.FILE_UPLOAD, file);
}
}).start(); }).start();
} }

@ -117,46 +117,49 @@ public class LoginUtil {
* *
*/ */
private void loginRequest(){ private void loginRequest(){
new Thread(() -> { new Thread(new Runnable() {
// 密码要进行MD5加密 @Override
String url = UrlConstants.USER_LOGIN + "?password=" + CommonUtils.MD5(pwd) + "&username=" + userName; public void run() {
// 密码要进行MD5加密
String url = UrlConstants.USER_LOGIN + "?password=" + CommonUtils.MD5(pwd) + "&username=" + userName;
new PostBodyParamHttpUtils() { new PostBodyParamHttpUtils() {
@Override @Override
public void nextMethod(BaseResponse<Object> baseResponse) { public void nextMethod(BaseResponse<Object> baseResponse) {
//解析数据 //解析数据
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
Object obj = baseResponse.getData(); Object obj = baseResponse.getData();
LinkedTreeMap<String, String> userMap = null; LinkedTreeMap<String, String> userMap = null;
if(obj instanceof LinkedTreeMap){ if(obj instanceof LinkedTreeMap){
userMap = (LinkedTreeMap<String, String>) obj; userMap = (LinkedTreeMap<String, String>) obj;
}
//将LinkedTreeMap中字段映射到User类中
User user = new User();
String jsonString = gson.toJson(userMap);
user = gson.fromJson(jsonString, User.class);
System.out.println("user = " + user + "..................");
//身份校验
if(roleId.equals(user.getRoleId())){
Intent intent = new Intent(loginActivity, MainActivity.class);
bundle = loginActivity.getIntent().getExtras();
LOGIN_UTIL.saveUser(user);
intent.putExtras(bundle);
loginActivity.startActivity(intent);
}else{
Message message = new Message();
message.obj = "登录失败";
handler.sendMessage(message);
}
} }
//将LinkedTreeMap中字段映射到User类中 @Override
User user = new User(); public void failedMethod(BaseResponse<Object> baseResponse) {
String jsonString = gson.toJson(userMap);
user = gson.fromJson(jsonString, User.class);
System.out.println("user = " + user + "..................");
//身份校验
if(roleId.equals(user.getRoleId())){
Intent intent = new Intent(loginActivity, MainActivity.class);
bundle = loginActivity.getIntent().getExtras();
LOGIN_UTIL.saveUser(user);
intent.putExtras(bundle);
loginActivity.startActivity(intent);
}else{
Message message = new Message(); Message message = new Message();
message.obj = "登录失败"; message.obj = baseResponse.getMsg();
handler.sendMessage(message); handler .sendMessage(message);
} }
} }.postConnect(url, "");
@Override }
public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message();
message.obj = baseResponse.getMsg();
handler .sendMessage(message);
}
}.postConnect(url, "");
}).start(); }).start();
} }

@ -144,6 +144,9 @@ public class MainActivityUtil {
Intent intent = new Intent(Intent.ACTION_MAIN); Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME); intent.addCategory(Intent.CATEGORY_HOME);
appCompatActivity.startActivity(intent); appCompatActivity.startActivity(intent);
//退出程序代码
// finish(); //结束程序
// System.exit(0); //退出程序
} }
} }

@ -101,34 +101,37 @@ public class RegisterUtil {
*/ */
private void registerRequest(){ private void registerRequest(){
new Thread(() -> { new Thread(new Runnable() {
UserRegisterRequest requestObj = new UserRegisterRequest(); @Override
//fastJson将对象转换为JSON字符串 public void run() {
requestObj.setUserName(userName); UserRegisterRequest requestObj = new UserRegisterRequest();
//即将云端发送的密码要经过MD5加密也就是异或运算和MD5的双重加密 //fastJson将对象转换为JSON字符串
requestObj.setPassword(CommonUtils.MD5(pwd)); requestObj.setUserName(userName);
requestObj.setRoleId( (Integer) registerActivity.getIntent().getExtras().get(ModelFieldConstants.ROLE_ID)); //即将云端发送的密码要经过MD5加密也就是异或运算和MD5的双重加密
System.out.println( "requestObj : " + requestObj + ".............................."); requestObj.setPassword(CommonUtils.MD5(pwd));
String json = JSON.toJSONString(requestObj); requestObj.setRoleId( (Integer) registerActivity.getIntent().getExtras().get(ModelFieldConstants.ROLE_ID));
String url = UrlConstants.USER_REGISTER; System.out.println( "requestObj : " + requestObj.toString() + "..............................");
String json = JSON.toJSONString(requestObj);
String url = UrlConstants.USER_REGISTER;
new PostBodyParamHttpUtils() { new PostBodyParamHttpUtils() {
@Override @Override
public void nextMethod(BaseResponse<Object> baseResponse) { public void nextMethod(BaseResponse<Object> baseResponse) {
//保存在本地的密码只是进行了简单的异或运算 //保存在本地的密码只是进行了简单的异或运算
CommonUtils.localSave(registerActivity, userName, pwdFirst, true); CommonUtils.localSave(registerActivity, userName, pwdFirst, true);
Intent intent = new Intent(registerActivity, LoginActivity.class); Intent intent = new Intent(registerActivity, LoginActivity.class);
//将bundle中的数据再次传入新的intent中 //将bundle中的数据再次传入新的intent中
intent.putExtras(registerActivity.getIntent().getExtras()); intent.putExtras(registerActivity.getIntent().getExtras());
registerActivity.startActivity(intent); registerActivity.startActivity(intent);
} }
@Override @Override
public void failedMethod(BaseResponse<Object> baseResponse) { public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message(); Message message = new Message();
message.obj = baseResponse.getMsg(); message.obj = baseResponse.getMsg();
handler .sendMessage(message); handler .sendMessage(message);
} }
}.postConnect(url, json); }.postConnect(url, json);
}
}).start(); }).start();
} }
} }

@ -44,11 +44,19 @@ public class TeaClassListUtil {
*/ */
public void initPage(List<Fragment> list){ public void initPage(List<Fragment> list){
// 设置点击触发 // 设置点击触发
tvUnfinishedCourse.setOnClickListener(v -> tvUnfinishedCourse.setOnClickListener(new View.OnClickListener() {
viewPager2.setCurrentItem(0)); @Override
public void onClick(View v) {
viewPager2.setCurrentItem(0);
}
});
System.out.println(tvUnfinishedCourse.hasOnClickListeners()); System.out.println(tvUnfinishedCourse.hasOnClickListeners());
tvFinishedCourse.setOnClickListener(v -> tvFinishedCourse.setOnClickListener(new View.OnClickListener() {
viewPager2.setCurrentItem(1)); @Override
public void onClick(View v) {
viewPager2.setCurrentItem(1);
}
});
// 注册页面改变的回调函数 // 注册页面改变的回调函数
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { // 声明页面切换后的回调函数 viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { // 声明页面切换后的回调函数
@Override @Override

@ -59,21 +59,17 @@ public abstract class DeleteUrlParamHttpUtils {
* @param e * @param e
*/ */
@Override @Override
public void onFailure(@NonNull Call call, IOException e) { public void onFailure(Call call, IOException e) {
//Log.e(TAG, "Failed to connect server!!!"); //Log.e(TAG, "Failed to connect server!!!");
e.printStackTrace(); e.printStackTrace();
} }
@Override @Override
public void onResponse(@NonNull Call call, Response response) throws IOException { public void onResponse(@NonNull Call call, Response response) throws IOException {
String body = null; final String body = response.body().string();
if(response.body() != null){
body = response.body().string();
}
Gson gson = new Gson(); Gson gson = new Gson();
Type jsonType = new TypeToken<BaseResponse<Object>>() {}.getType(); Type jsonType = new TypeToken<BaseResponse<Object>>() {}.getType();
BaseResponse<Object> baseResponse = gson.fromJson(body, jsonType); BaseResponse<Object> baseResponse = gson.fromJson(body, jsonType);
assert baseResponse != null;
int code = baseResponse.getCode(); int code = baseResponse.getCode();
//页面请求成功 //页面请求成功
if(response.code() == 200){ if(response.code() == 200){

@ -14,6 +14,7 @@ import java.lang.reflect.Type;
import okhttp3.Call; import okhttp3.Call;
import okhttp3.Callback; import okhttp3.Callback;
import okhttp3.Credentials;
import okhttp3.Headers; import okhttp3.Headers;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
@ -59,14 +60,13 @@ public abstract class GetUrlParamHttpUtils {
* @param e * @param e
*/ */
@Override @Override
public void onFailure(@NonNull Call call, IOException e) { public void onFailure(Call call, IOException e) {
//Log.e(TAG, "Failed to connect server!!!"); //Log.e(TAG, "Failed to connect server!!!");
e.printStackTrace(); e.printStackTrace();
} }
@Override @Override
public void onResponse(@NonNull Call call, Response response) throws IOException { public void onResponse(@NonNull Call call, Response response) throws IOException {
assert response.body() != null;
final String body = response.body().string(); final String body = response.body().string();
Gson gson = new Gson(); Gson gson = new Gson();
Type jsonType = new TypeToken<BaseResponse<Object>>() {}.getType(); Type jsonType = new TypeToken<BaseResponse<Object>>() {}.getType();

@ -15,6 +15,7 @@ import java.lang.reflect.Type;
import okhttp3.Call; import okhttp3.Call;
import okhttp3.Callback; import okhttp3.Callback;
import okhttp3.Credentials;
import okhttp3.Headers; import okhttp3.Headers;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
@ -73,14 +74,13 @@ public abstract class PostBodyParamHttpUtils {
* @param e * @param e
*/ */
@Override @Override
public void onFailure(@NonNull Call call, IOException e) { public void onFailure(Call call, IOException e) {
//Log.e(TAG, "Failed to connect server!!!"); //Log.e(TAG, "Failed to connect server!!!");
e.printStackTrace(); e.printStackTrace();
} }
@Override @Override
public void onResponse(@NonNull Call call, Response response) throws IOException { public void onResponse(@NonNull Call call, Response response) throws IOException {
assert response.body() != null;
final String body = response.body().string(); final String body = response.body().string();
Gson gson = new Gson(); Gson gson = new Gson();
Type jsonType = new TypeToken<BaseResponse<Object>>() {}.getType(); Type jsonType = new TypeToken<BaseResponse<Object>>() {}.getType();
@ -115,7 +115,7 @@ public abstract class PostBodyParamHttpUtils {
System.out.println("response:connect...error..................."); System.out.println("response:connect...error...................");
System.out.println("response:code = " + response.code()); System.out.println("response:code = " + response.code());
System.out.println("response: " + response); System.out.println("response: " + response);
System.out.println("baseResponse: " + baseResponse); System.out.println("baseResponse: " + baseResponse.toString());
} }
} }

@ -70,14 +70,14 @@ public abstract class PostFileHttpUtils {
* @param e * @param e
*/ */
@Override @Override
public void onFailure(@NonNull Call call, IOException e) { public void onFailure(Call call, IOException e) {
Log.e("TAGTAG", "onFailure图片上传失败" + e.getMessage()); Log.e("TAGTAG", "onFailure图片上传失败" + e.getMessage());
e.printStackTrace(); e.printStackTrace();
} }
@Override @Override
public void onResponse(@NonNull Call call, Response response) throws IOException { public void onResponse(@NonNull Call call, Response response) throws IOException {
assert response.body() != null;
final String body = response.body().string(); final String body = response.body().string();
Log.e("TAGTAG", "onResponse图片上传成功" + body); Log.e("TAGTAG", "onResponse图片上传成功" + body);
Gson gson = new Gson(); Gson gson = new Gson();

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<size
android:width="100dp"
android:height="100dp" />
<solid android:color="@color/ps_color_light_grey" />
</shape>
</item>
<item>
<bitmap
android:gravity="center"
android:src="@drawable/ps_ic_placeholder" />
</item>
</layer-list>

@ -40,12 +40,10 @@
<LinearLayout <LinearLayout
android:id="@+id/ll_course_info_msg" android:id="@+id/ll_course_info_msg"
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/ab_course_sign" app:layout_constraintTop_toBottomOf="@id/ab_course_sign"
app:layout_constraintRight_toLeftOf="@id/iv_code"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginHorizontal="12dp" android:layout_marginHorizontal="12dp"
android:layout_marginTop="10dp"> android:layout_marginTop="10dp">
<LinearLayout <LinearLayout
@ -152,17 +150,6 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<ImageView
android:id="@+id/iv_code"
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="@id/ll_course_info_msg"
app:layout_constraintBottom_toBottomOf="@id/ll_course_info_msg"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginEnd="30dp"
/>
<TextView <TextView
android:id="@+id/tv_sign_list" android:id="@+id/tv_sign_list"
android:text="签到列表" android:text="签到列表"

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/iv_code_big"
android:layout_width="300dp"
android:layout_height="300dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save