Compare commits

...

9 Commits
dev2 ... master

@ -1,17 +0,0 @@
<?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,6 +18,7 @@
<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" />
@ -95,6 +96,7 @@
<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" />
@ -113,7 +115,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.536" /> <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_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" />

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

@ -74,7 +74,11 @@ dependencies {
implementation 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0' implementation 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0'
// //
implementation 'com.github.donkingliang:ImageSelector:2.2.1' implementation 'io.github.lucksiege:pictureselector:v3.10.2'
// 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'
@ -86,7 +90,4 @@ dependencies {
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
} }

@ -13,6 +13,9 @@
<!-- 手机照片访问权限,调用相机权限 --> <!-- 手机照片访问权限,调用相机权限 -->
<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定位-->
@ -39,7 +42,8 @@
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
@ -62,10 +66,12 @@
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="portrait" android:screenOrientation="fullSensor"
tools:replace="screenOrientation" /> tools:replace="screenOrientation" />
<!-- 开机加载动画 --> <!-- 开机加载动画 -->

@ -22,10 +22,6 @@ 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);
@ -37,13 +33,10 @@ public class LaunchActivity extends AppCompatActivity {
//延时加载 //延时加载
Handler handler = new Handler(); Handler handler = new Handler();
handler.postDelayed(new Runnable() { handler.postDelayed(() -> {
@Override Intent intent = new Intent(LaunchActivity.this, IdChooseActivity.class);
public void run() { intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
Intent intent = new Intent(LaunchActivity.this, IdChooseActivity.class); startActivity(intent);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}, 1000);//3秒后执行Runnable中的run方法 }, 1000);//3秒后执行Runnable中的run方法
} }

@ -7,7 +7,6 @@ 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;
@ -69,25 +68,19 @@ public class IdChooseActivity extends AppCompatActivity {
*/ */
public void setOnclickListener(){ public void setOnclickListener(){
// 选择学生端登录 // 选择学生端登录
stuLoginCho.setOnClickListener(new View.OnClickListener() { stuLoginCho.setOnClickListener(v -> {
@Override intentIdCho = new Intent(IdChooseActivity.this, LoginActivity.class);
public void onClick(View v) { bundle.putInt(ModelFieldConstants.ROLE_ID, 0);
intentIdCho = new Intent(IdChooseActivity.this, LoginActivity.class); intentIdCho.putExtras(bundle);
bundle.putInt(ModelFieldConstants.ROLE_ID, 0); startActivity(intentIdCho);
intentIdCho.putExtras(bundle);
startActivity(intentIdCho);
}
}); });
// 选择教师端登录 // 选择教师端登录
teaLoginCho.setOnClickListener(new View.OnClickListener() { teaLoginCho.setOnClickListener(v -> {
@Override intentIdCho = new Intent(IdChooseActivity.this, LoginActivity.class);
public void onClick(View v) { bundle.putInt(ModelFieldConstants.ROLE_ID, 1);
intentIdCho = new Intent(IdChooseActivity.this, LoginActivity.class); intentIdCho.putExtras(bundle);
bundle.putInt(ModelFieldConstants.ROLE_ID, 1); startActivity(intentIdCho);
intentIdCho.putExtras(bundle);
startActivity(intentIdCho);
}
}); });
} }
@ -126,9 +119,6 @@ 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,21 +80,18 @@ 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(new View.OnClickListener() { lgRegister.setOnClickListener(v -> {
@SuppressLint("ResourceAsColor") lgRegister.setTextColor(R.color.crimson);
@Override lgRegister.getPaint().setUnderlineText(true);
public void onClick(View v) { Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
lgRegister.setTextColor(R.color.crimson); intent.putExtras(bundle);
lgRegister.getPaint().setUnderlineText(true); startActivity(intent);
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
}); });
} }
@ -122,7 +119,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,6 +18,7 @@ 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;
@ -30,6 +31,8 @@ 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) {
@ -57,10 +60,18 @@ 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<>();
@ -71,7 +82,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); StuClassListFragment stuClassListFragment = StuClassListFragment.newInstance("班级消息", MainActivity.this, badge);
list.add(stuHomeFragment); list.add(stuHomeFragment);
list.add(stuClassListFragment); list.add(stuClassListFragment);
} }

@ -5,7 +5,6 @@ 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;
@ -27,7 +26,6 @@ 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;
@ -41,7 +39,6 @@ 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;
@ -106,6 +103,7 @@ 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);
@ -116,40 +114,33 @@ 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(new Handler.Callback() { locationPoiHandler = new Handler(msg -> {
@SuppressLint("NotifyDataSetChanged") if(msg.arg1 == 1){
@Override adapter=new LocationPoiAdapter(MapActivity.this,mList);
public boolean handleMessage(@NonNull Message msg) { mRecyclerView.setAdapter(adapter);
if(msg.arg1 == 1){ adapter.notifyDataSetChanged();
adapter=new LocationPoiAdapter(MapActivity.this,mList); adapter.setOnItemClickListener(recyclerViewItemClickListener);
mRecyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
adapter.setOnItemClickListener(recyclerViewItemClickListener);
}
return false;
} }
return false;
}); });
myLocationListenerHandler = new Handler(new Handler.Callback() { myLocationListenerHandler = new Handler(msg -> {
@Override nowLocation = myLocationListener.getLocation();
public boolean handleMessage(@NonNull Message msg) { if(msg.arg1 == 200 && nowLocation != null){
nowLocation = myLocationListener.getLocation(); LatLng point = new LatLng(nowLocation.getLatitude(), nowLocation.getLongitude());
if(msg.arg1 == 200 && nowLocation != null){ System.out.println("reverseGeocoding: start!!!!!!!!!!!!");
LatLng point = new LatLng(nowLocation.getLatitude(), nowLocation.getLongitude()); //单次定位结束,销毁定位
System.out.println("reverseGeocoding: start!!!!!!!!!!!!"); System.out.println("mBaiduMap:closing................");
//单次定位结束,销毁定位 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;
}); });
// 得到地图 // 得到地图
@ -248,19 +239,16 @@ public class MapActivity extends AppCompatActivity {
*/ */
private void setOtherListener(){ private void setOtherListener(){
//重定位 //重定位
ivRelocation.setOnClickListener(new View.OnClickListener() { ivRelocation.setOnClickListener(v -> {
@Override //点击重定位按钮,启动定位
public void onClick(View v) { System.out.println("mBaiduMap:starting................");
//点击重定位按钮,启动定位 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
@ -269,40 +257,33 @@ public class MapActivity extends AppCompatActivity {
} }
}); });
//保存 //保存
abBtSave.setOnClickListener(new View.OnClickListener() { abBtSave.setOnClickListener(v -> {
@Override nowLocation = myLocationListener.getLocation();
public void onClick(View v) { String ll = "(" + nowLocation.getLatitude() + "," + nowLocation.getLongitude() + ")";
nowLocation = myLocationListener.getLocation(); Intent intent = new Intent();
String ll = "(" + nowLocation.getLatitude() + "," + nowLocation.getLongitude() + ")"; Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(); bundle.putString(ModelFieldConstants.LOCATION, ll);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.LOCATION, ll); setResult(100,intent);
intent.putExtras(bundle); finish();
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("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮 .setPositiveButton("确定", (dialogInterface, i) -> {
@Override Intent intent = new Intent();
public void onClick(DialogInterface dialogInterface, int i) { Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(); bundle.putString(ModelFieldConstants.LOCATION, poiInfo.name);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.LOCATION, poiInfo.name); setResult(100,intent);
intent.putExtras(bundle); finish();
setResult(100,intent);
finish();
}
}) })
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消 .setNegativeButton("取消", (dialogInterface, i) -> {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}) })
.create(); .create();
alertDialog2.show(); alertDialog2.show();

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

@ -1,7 +1,6 @@
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;
@ -23,7 +22,6 @@ 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;
@ -58,6 +56,7 @@ 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;
@ -122,94 +121,69 @@ public class CourseSignIn extends AppCompatActivity {
} }
private void setClickListener(){ private void setClickListener(){
abIvTitle.setOnClickListener(new View.OnClickListener() { abIvTitle.setOnClickListener(v -> finish());
@Override
public void onClick(View v) {
finish();
}
});
//点击签到后的事件 //点击签到后的事件
btSign.setOnClickListener(new View.OnClickListener() { btSign.setOnClickListener(v -> {
@Override @SuppressLint("InflateParams")
public void onClick(View v) { View view = LayoutInflater.from(CourseSignIn.this).inflate(R.layout.dialog_input, null);
@SuppressLint("InflateParams") //添加取消
View view = LayoutInflater.from(CourseSignIn.this).inflate(R.layout.dialog_input, null); //添加"Yes"按钮
AlertDialog.Builder builder = new AlertDialog.Builder(CourseSignIn.this) @SuppressLint("NotifyDataSetChanged")
.setMessage("请输入签到口令") AlertDialog.Builder builder = new AlertDialog.Builder(CourseSignIn.this)
.setView(view) .setMessage("请输入签到口令")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮 .setView(view)
@Override .setPositiveButton("确定", (dialogInterface, i) -> {
public void onClick(DialogInterface dialogInterface, int i) { etCodeInput = view.findViewById(R.id.et_code_input);
etCodeInput = view.findViewById(R.id.et_code_input); Editable etSignCode = etCodeInput.getText();
Editable etSignCode = etCodeInput.getText(); if(etSignCode == null){
if(etSignCode == null){ Toast.makeText(CourseSignIn.this, "口令为空", Toast.LENGTH_SHORT).show();
Toast.makeText(CourseSignIn.this, "口令为空", Toast.LENGTH_SHORT).show(); }else{
}else{ signCodeStr = etSignCode.toString();
signCodeStr = etSignCode.toString(); int signCode;
int signCode; StuSignRequest stuSignRequest = new StuSignRequest();
StuSignRequest stuSignRequest = new StuSignRequest(); stuSignRequest.setUserSignId(courseSignId);
stuSignRequest.setUserSignId(courseSignId); stuSignRequest.setUserId(bundle.getLong(ModelFieldConstants.ID));
stuSignRequest.setUserId(bundle.getLong(ModelFieldConstants.ID)); 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")
@Override
public boolean handleMessage(@NonNull Message msg) {
if(msg.arg1 == 1){
adapter.notifyDataSetChanged();
}
return false;
}
});
getHasSignedList();
}
return false;
} }
return false;
}); });
signIn(stuSignRequest); getHasSignedList();
}catch ( NumberFormatException numberFormatException){
Toast.makeText(CourseSignIn.this, "口令输入错误", Toast.LENGTH_SHORT).show();
} }
} return false;
} });
}) signIn(stuSignRequest);
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消 }catch ( NumberFormatException numberFormatException){
@Override Toast.makeText(CourseSignIn.this, "口令输入错误", Toast.LENGTH_SHORT).show();
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setNeutralButton("扫码", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO 扫码签到
// Intent intent = new Intent(CourseSignIn.this, ScanQRCodeActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// startActivity(intent);
// 创建IntentIntegrator对象
IntentIntegrator intentIntegrator = new IntentIntegrator(CourseSignIn.this)
.setBeepEnabled(true) //扫描提示音
.setPrompt("这是个扫码签到界面")
//.setCaptureActivity(MyCaptureActivity.class) //修改扫码活动
.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)// 扫码的类型,可选:一维码,二维码,一/二维码
.setTimeout(10000);//15秒未扫描则将自动关闭扫码界面
// 开始扫描
intentIntegrator.initiateScan();
} }
}); }
AlertDialog alertDialog2 = builder.create(); })
alertDialog2.show(); .setNegativeButton("取消", (dialogInterface, i) -> {
} })
.setNeutralButton("扫码", (dialog, which) -> {
// 创建IntentIntegrator对象
IntentIntegrator intentIntegrator = new IntentIntegrator(CourseSignIn.this)
.setBeepEnabled(true) //扫描提示音
.setPrompt("这是个扫码签到界面")
//.setCaptureActivity(MyCaptureActivity.class) //修改扫码活动
.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)// 扫码的类型,可选:一维码,二维码,一/二维码
.setTimeout(10000);//15秒未扫描则将自动关闭扫码界面
// 开始扫描
intentIntegrator.initiateScan();
});
AlertDialog alertDialog2 = builder.create();
alertDialog2.show();
}); });
} }
@ -217,46 +191,43 @@ public class CourseSignIn extends AppCompatActivity {
* *
*/ */
private void getHasSignedList(){ private void getHasSignedList(){
new Thread(new Runnable() { new Thread(() -> {
@Override bundle = getIntent().getExtras();
public void run() { String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
bundle = getIntent().getExtras(); ModelFieldConstants.USER_ID + "=" + bundle.getLong(ModelFieldConstants.ID) + "&" +
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" + ModelFieldConstants.COURSE_SIGN_STATUS + "=" + 1 + "&" +
ModelFieldConstants.USER_ID + "=" + bundle.getLong(ModelFieldConstants.ID) + "&" + "current=1&size=10";
ModelFieldConstants.COURSE_SIGN_STATUS + "=" + 1 + "&" + String url = UrlConstants.STUDENT_SIGN_LIST + "?" + urlParam;
"current=1&size=10"; new GetUrlParamHttpUtils() {
String url = UrlConstants.STUDENT_SIGN_LIST + "?" + urlParam; @Override
new GetUrlParamHttpUtils() { public void nextMethod(BaseResponse<Object> baseResponse) {
@Override if(baseResponse.getData() != null){
public void nextMethod(BaseResponse<Object> baseResponse) { System.out.println("StuClassListFragment:courseDataBaseResponse.getData() = " + baseResponse.getData() + "...............");
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 }
public void failedMethod(BaseResponse<Object> baseResponse) { } @Override
}.getConnect(url); public void failedMethod(BaseResponse<Object> baseResponse) { }
} }.getConnect(url);
}).start(); }).start();
} }
@ -265,29 +236,26 @@ public class CourseSignIn extends AppCompatActivity {
* @param stuSignRequest * @param stuSignRequest
*/ */
private void signIn(StuSignRequest stuSignRequest){ private void signIn(StuSignRequest stuSignRequest){
new Thread(new Runnable() { new Thread(() -> {
@Override System.out.println( "CourseSignIn:stuSignRequest : " + stuSignRequest.toString());
public void run() { String json = JSON.toJSONString(stuSignRequest);
System.out.println( "CourseSignIn:stuSignRequest : " + stuSignRequest.toString()); String url = UrlConstants.STUDENT_SIGN;
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();
} }
@ -307,29 +275,22 @@ public class CourseSignIn extends AppCompatActivity {
try{ try{
signCode = Integer.parseInt(signCodeStr); signCode = Integer.parseInt(signCodeStr);
stuSignRequest.setSignCode(signCode); stuSignRequest.setSignCode(signCode);
signHandler = new Handler(new Handler.Callback() { signHandler = new Handler(msg -> {
@Override if(msg.arg1 == -1){
public boolean handleMessage(@NonNull Message msg) { String errorMsg = (String) msg.obj;
if(msg.arg1 == -1){ Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show();
String errorMsg = (String) msg.obj; }else if(msg.arg1 == 1){
Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show(); Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show();
}else if(msg.arg1 == 1){ tvSignRecord.setVisibility(View.VISIBLE);
Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show(); getSignedHandler = new Handler(msg1 -> {
tvSignRecord.setVisibility(View.VISIBLE); if(msg1.arg1 == 1){
getSignedHandler = new Handler(new Handler.Callback() { adapter.notifyDataSetChanged();
@SuppressLint("NotifyDataSetChanged") }
@Override return false;
public boolean handleMessage(@NonNull Message msg) { });
if(msg.arg1 == 1){ getHasSignedList();
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 static SwipeRefreshLayout srlMyRefresh; private SwipeRefreshLayout srlMyRefresh;
private static Bundle bundle; private static Bundle bundle;
private static Handler handler; private static Handler handler;

@ -13,7 +13,6 @@ 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;
@ -125,13 +124,7 @@ public class CourseDetail extends AppCompatActivity {
* *
*/ */
private void setListener(){ private void setListener(){
abIvTitle.setOnClickListener(new View.OnClickListener() { abIvTitle.setOnClickListener(v -> finish());
@Override
public void onClick(View v) {
finish();
}
});
} }
private void initPager(){ private void initPager(){
@ -146,46 +139,43 @@ public class CourseDetail extends AppCompatActivity {
} }
private void getCourseDetail(){ private void getCourseDetail(){
new Thread(new Runnable() { new Thread(() -> {
@Override
public void run() { long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID);
long userId = bundle.getLong(ModelFieldConstants.USER_ID);
long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID);
long userId = bundle.getLong(ModelFieldConstants.USER_ID); String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
ModelFieldConstants.USER_ID + "=" + userId;
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" + String url = UrlConstants.COURSE_DETAIL + "?" + urlParam;
ModelFieldConstants.USER_ID + "=" + userId;
String url = UrlConstants.COURSE_DETAIL + "?" + urlParam; new GetUrlParamHttpUtils() {
@Override
new GetUrlParamHttpUtils() { public void nextMethod(BaseResponse<Object> baseResponse) {
@Override
public void nextMethod(BaseResponse<Object> baseResponse) { //解析数据
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
//解析数据 Object obj = baseResponse.getData();
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); LinkedTreeMap<String, String> courseDetailMap = null;
Object obj = baseResponse.getData(); if(obj instanceof LinkedTreeMap){
LinkedTreeMap<String, String> courseDetailMap = null; courseDetailMap = (LinkedTreeMap<String, String>) obj;
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);
}
@Override
public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message();
message.obj = baseResponse.getMsg();
message.arg1 = baseResponse.getCode();
handler .sendMessage(message);
} }
}.getConnect(url); //将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);
}
@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,14 +1,25 @@
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.annotation.NonNull; import androidx.activity.result.ActivityResultLauncher;
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;
@ -19,9 +30,11 @@ 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;
@ -40,6 +53,7 @@ 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;
@ -49,6 +63,11 @@ 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);
@ -57,10 +76,11 @@ 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);
@ -71,22 +91,39 @@ 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(new Handler.Callback() { handler = new Handler(msg -> {
@Override if(msg.arg1 == 200){
public boolean handleMessage(@NonNull Message msg) { aTvCourseName.setText(courseSignMsg.getCourseName());
if(msg.arg1 == 200){ tvCourseStuAmountMsg.setText(String.valueOf(courseSignMsg.getCourseNum()));
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(){
@ -99,14 +136,37 @@ 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(new View.OnClickListener() { abIvTitle.setOnClickListener(v -> finish());
@Override ivCode.setOnClickListener(v -> {
public void onClick(View v) { ivCode.setVisibility(View.INVISIBLE);
finish(); View view = LayoutInflater.from(CheckCourseSign.this).inflate(R.layout.dialog_image, null);
} 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;
}); });
} }
@ -167,4 +227,39 @@ 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,8 +1,6 @@
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;
@ -19,8 +17,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;
@ -28,9 +26,13 @@ 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;
@ -58,6 +60,8 @@ 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")
@ -104,6 +108,8 @@ 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();
} }
} }
}; };
@ -137,42 +143,6 @@ 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);
}
}
/** /**
* *
*/ */
@ -209,14 +179,33 @@ 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);
@ -233,109 +222,86 @@ public class CreateCourse extends AppCompatActivity {
* *
*/ */
private void setClickListener(){ private void setClickListener(){
startDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() { startDatePicker.addOnPositiveButtonClickListener(selection -> {
@Override String startFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日");
public void onPositiveButtonClick(Long selection) { etStartTime.setText(startFormDate);
String startFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日"); isSuccessCourseStartTime = true;
etStartTime.setText(startFormDate); Bundle bundle1 = getIntent().getExtras();
isSuccessCourseStartTime = true; bundle1.putLong(ModelFieldConstants.START_TIME, selection);
Bundle bundle1 = getIntent().getExtras(); getIntent().putExtras(bundle1);
bundle1.putLong(ModelFieldConstants.START_TIME, selection);
getIntent().putExtras(bundle1);
}
}); });
endDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() { endDatePicker.addOnPositiveButtonClickListener(selection -> {
@Override String endFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日");
public void onPositiveButtonClick(Long selection) { etEndTime.setText(endFormDate);
String endFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日"); isSuccessCourseEndTime = true;
etEndTime.setText(endFormDate); Bundle bundle1 = getIntent().getExtras();
isSuccessCourseEndTime = true; bundle1.putLong(ModelFieldConstants.END_TIME, selection);
Bundle bundle1 = getIntent().getExtras(); getIntent().putExtras(bundle1);
bundle1.putLong(ModelFieldConstants.END_TIME, selection);
getIntent().putExtras(bundle1);
}
}); });
//点击添加图片 //点击添加图片
ivAddImg.setOnClickListener(new View.OnClickListener() { ivAddImg.setOnClickListener(v -> {
@Override // 调用第三方开源图片库
public void onClick(View v) { PictureSelector.create(this)
//调用第三方开源库,单选并剪裁 .openGallery(SelectMimeType.ofImage())
ImageSelector.builder() .setImageEngine(GlideEngine.createGlideEngine()) // 图片加载引擎
.useCamera(false) // 设置是否使用拍照 .setMaxSelectNum(1)// 最大图片选择数量 int
.setCrop(true) // 设置是否使用图片剪切功能。 .setImageSpanCount(4)// 每行显示个数 int
.setCropRatio(1.0f) // 图片剪切的宽高比,默认1.0f。宽固定为手机屏幕的宽。 .setSelectionMode(SelectModeConfig.SINGLE)// 多选 or 单选
.setSingle(true) //设置是否单选 .isPreviewImage(true)// 是否可预览图片 true or false
.canPreview(true) //是否可以预览图片默认为true .isSelectZoomAnim(true)// 图片列表点击 缩放效果 默认true
.start(CreateCourse.this, 100); // 打开相册 .isGif(false) //是否显示gif文件
} .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(new View.OnClickListener() { etStartTime.setOnClickListener(v -> {
@Override if(!startDatePicker.isAdded()){
public void onClick(View v) { startDatePicker.show(getSupportFragmentManager(), "Hello");
if(!startDatePicker.isAdded()){
startDatePicker.show(getSupportFragmentManager(), "Hello");
}
} }
}); });
//课程结束时间 //课程结束时间
etEndTime.setOnClickListener(new View.OnClickListener() { etEndTime.setOnClickListener(v -> {
@Override if(!endDatePicker.isAdded()){
public void onClick(View v) { endDatePicker.show(getSupportFragmentManager(), "Hello");
if(!endDatePicker.isAdded()){
endDatePicker.show(getSupportFragmentManager(), "Hello");
}
} }
}); });
//刷新当前时间 //刷新当前时间
etCreateTime.setOnClickListener(new View.OnClickListener() { etCreateTime.setOnClickListener(v -> {
@Override long currentDate = System.currentTimeMillis();
public void onClick(View v) { String curFormDate = CommonUtils.stampToDate(String.valueOf(currentDate), "yyyy年MM月dd日");
long currentDate = System.currentTimeMillis(); etCreateTime.setText(curFormDate);
String curFormDate = CommonUtils.stampToDate(String.valueOf(currentDate), "yyyy年MM月dd日"); isSuccessCourseCreateTime = true;
etCreateTime.setText(curFormDate);
isSuccessCourseCreateTime = true;
}
}); });
//课程状态选择 //课程状态选择
etStatus.setOnClickListener(new View.OnClickListener() { etStatus.setOnClickListener(v -> {
@Override String[] singleItems = {"未结课", "已结课"};
public void onClick(View v) { int checkedItem = "未结课".equals(Objects.requireNonNull(etStatus.getText()).toString()) ? 0 : 1;
String[] singleItems = {"未结课", "已结课"};
int checkedItem = "未结课".equals(etStatus.getText().toString()) ? 0 : 1; MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(CreateCourse.this)
.setTitle("请选择课程授课状态")
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(CreateCourse.this) .setNeutralButton(getString(R.string.cancel), (dialog, which) -> {
.setTitle("请选择课程授课状态")
.setNeutralButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { })
@Override .setPositiveButton(getString(R.string.ok), (dialog, which) ->
public void onClick(DialogInterface dialog, int which) { etStatus.setText(singleItems[bundle.getInt("checkedItem")]))
.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(new View.OnClickListener() { abIvTitle.setOnClickListener(v -> finish());
@Override
public void onClick(View v) {
finish();
}
});
} }
/** /**

@ -1,10 +1,15 @@
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;
@ -13,10 +18,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;
@ -109,7 +114,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]);
@ -119,7 +124,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_12H) .setTimeFormat(TimeFormat.CLOCK_24H)
.setHour(currHour) .setHour(currHour)
.setMinute(currMin) .setMinute(currMin)
.setTitleText("开始时间选择") .setTitleText("开始时间选择")
@ -127,7 +132,7 @@ public class CreateSign extends AppCompatActivity {
.setNegativeButtonText("取消") .setNegativeButtonText("取消")
.build(); .build();
endTimePicker = new MaterialTimePicker.Builder() endTimePicker = new MaterialTimePicker.Builder()
.setTimeFormat(TimeFormat.CLOCK_12H) .setTimeFormat(TimeFormat.CLOCK_24H)
.setHour(currHour) .setHour(currHour)
.setMinute(currMin) .setMinute(currMin)
.setTitleText("结束时间选择") .setTitleText("结束时间选择")
@ -164,205 +169,192 @@ public class CreateSign extends AppCompatActivity {
* *
*/ */
private void setClickListener(){ private void setClickListener(){
tvCourseName.setOnClickListener(new View.OnClickListener() { tvCourseName.setOnClickListener(v -> {
@Override Intent intent = new Intent(CreateSign.this, ChooseCourse.class);
public void onClick(View v) { intent.putExtras(getIntent().getExtras());
Intent intent = new Intent(CreateSign.this, ChooseCourse.class); intentActivityResultLauncher.launch(intent);
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(new View.OnClickListener() { ivAddImg.setOnClickListener(v -> {
@Override String signCode = Objects.requireNonNull(etCode.getText()).toString();
public void onClick(View v) { if (TextUtils.isEmpty(signCode)){
String signCode = Objects.requireNonNull(etCode.getText()).toString(); Toast.makeText(CreateSign.this, "请先输入签到码", Toast.LENGTH_SHORT).show();
if (TextUtils.isEmpty(signCode)){ }else{
Toast.makeText(CreateSign.this, "请先输入签到码", Toast.LENGTH_SHORT).show(); Bitmap codeBitmap = QRCodeUtil.createQRCode(signCode,500,500,null);
}else{ ivAddImg.setImageBitmap(codeBitmap);
Bitmap codeBitmap = QRCodeUtil.createQRCode(signCode,500,500,null);
ivAddImg.setImageBitmap(codeBitmap);
}
} }
}); });
//设置回调方法,进行获取选择的时间,并将其刷新到界面 //设置回调方法,进行获取选择的时间,并将其刷新到界面
startTimePicker.addOnPositiveButtonClickListener(new View.OnClickListener() { startTimePicker.addOnPositiveButtonClickListener(v -> {
@Override int startHour = startTimePicker.getHour();
public void onClick(View v) { int startMin = startTimePicker.getMinute();
int startHour = startTimePicker.getHour(); String startTime = currYear + "-" +
int startMin = startTimePicker.getMinute(); currMonth + "-" +
String startTime = String.valueOf(currYear) + "-" + currDay + " " +
String.valueOf(currMonth) + "-" + startHour + ":" +
String.valueOf(currDay) + " " + startMin + ":" + "00";
String.valueOf(startHour) + ":" + try {
String.valueOf(startMin) + ":" + "00"; startTimeStamp = Long.parseLong(CommonUtils.dateToStamp(startTime, "yyyy-MM-dd HH:mm:ss"));
try { } catch (ParseException e) {
startTimeStamp = Long.parseLong(CommonUtils.dateToStamp(startTime, "yyyy-MM-dd hh:mm:ss")); e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
etStartTime.setText(startTime);
hasChooseStartTime = true;
} }
etStartTime.setText(startTime);
hasChooseStartTime = true;
}); });
endTimePicker.addOnPositiveButtonClickListener(new View.OnClickListener() { endTimePicker.addOnPositiveButtonClickListener(v -> {
@Override int endHour = endTimePicker.getHour();
public void onClick(View v) { int endMin = endTimePicker.getMinute();
int endHour = endTimePicker.getHour(); String endTime = currYear + "-" +
int endMin = endTimePicker.getMinute(); currMonth + "-" +
String endTime = String.valueOf(currYear) + "-" + currDay + " " +
String.valueOf(currMonth) + "-" + endHour + ":" +
String.valueOf(currDay) + " " + endMin + ":" + "00";
String.valueOf(endHour) + ":" + try {
String.valueOf(endMin) + ":" + "00"; endTimeStamp = Long.parseLong(CommonUtils.dateToStamp(endTime, "yyyy-MM-dd HH:mm:ss"));
try { } catch (ParseException e) {
endTimeStamp = Long.parseLong(CommonUtils.dateToStamp(endTime, "yyyy-MM-dd hh:mm:ss")); e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
etEndTime.setText(endTime);
hasChooseEndTime = true;
} }
etEndTime.setText(endTime);
hasChooseEndTime = true;
}); });
//课程开始时间 //课程开始时间
etStartTime.setOnClickListener(new View.OnClickListener() { etStartTime.setOnClickListener(v -> {
@Override if(!startTimePicker.isAdded()){
public void onClick(View v) { startTimePicker.show(getSupportFragmentManager(), "Hello");
if(!startTimePicker.isAdded()){
startTimePicker.show(getSupportFragmentManager(), "Hello");
}
} }
}); });
//课程结束时间 //课程结束时间
etEndTime.setOnClickListener(new View.OnClickListener() { etEndTime.setOnClickListener(v -> {
@Override if(!endTimePicker.isAdded()){
public void onClick(View v) { endTimePicker.show(getSupportFragmentManager(), "Hello");
if(!endTimePicker.isAdded()){
endTimePicker.show(getSupportFragmentManager(), "Hello");
}
} }
}); });
//定位 //定位
etLocation.setOnClickListener(new View.OnClickListener() { etLocation.setOnClickListener(v -> {
@Override
public void onClick(View v) {
Intent intent = new Intent(CreateSign.this, MapActivity.class);
intent.putExtras(getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
// etLocation.setText("定位"); LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
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(new View.OnClickListener() { abBtSave.setOnClickListener(v -> {
@Override bundle = getIntent().getExtras();
public void onClick(View v) { String courseName = bundle.getString(ModelFieldConstants.COURSE_NAME);
bundle = getIntent().getExtras(); String stuAmountStr = Objects.requireNonNull(etStuAmount.getText()).toString();
String courseName = bundle.getString(ModelFieldConstants.COURSE_NAME); String location = Objects.requireNonNull(etLocation.getText()).toString();
String stuAmountStr = Objects.requireNonNull(etStuAmount.getText()).toString(); String signCodeStr = Objects.requireNonNull(etCode.getText()).toString();
String location = Objects.requireNonNull(etLocation.getText()).toString(); long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID);
String signCodeStr = Objects.requireNonNull(etCode.getText()).toString(); Long userId = bundle.getLong(ModelFieldConstants.ID);
Long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID); if(!TextUtils.isEmpty(courseName)){
Long userId = bundle.getLong(ModelFieldConstants.ID); if(!TextUtils.isEmpty(stuAmountStr)){
if(!TextUtils.isEmpty(courseName)){ if(hasChooseStartTime && hasChooseEndTime){
if(!TextUtils.isEmpty(stuAmountStr)){ if(startTimeStamp <= endTimeStamp){
if(hasChooseStartTime && hasChooseEndTime){ if(!TextUtils.isEmpty(location)){
if(startTimeStamp <= endTimeStamp){ if(!TextUtils.isEmpty(signCodeStr)){
if(!TextUtils.isEmpty(location)){ try{
if(!TextUtils.isEmpty(signCodeStr)){ Long stuAmount = Long.parseLong(stuAmountStr);
try{ try{
Long stuAmount = Long.parseLong(stuAmountStr); Long signCode = Long.parseLong(signCodeStr);
try{ CourseCreateSignRequest courseCreateSignRequest = new CourseCreateSignRequest();
Long signCode = Long.parseLong(signCodeStr); courseCreateSignRequest.setCourseName(courseName);
CourseCreateSignRequest courseCreateSignRequest = new CourseCreateSignRequest(); courseCreateSignRequest.setTotal(stuAmount);
courseCreateSignRequest.setCourseName(courseName); courseCreateSignRequest.setBeginTime(startTimeStamp);
courseCreateSignRequest.setTotal(stuAmount); courseCreateSignRequest.setEndTime(endTimeStamp);
courseCreateSignRequest.setBeginTime(startTimeStamp); courseCreateSignRequest.setCourseAddr(location);
courseCreateSignRequest.setEndTime(endTimeStamp); courseCreateSignRequest.setCourseId(courseId);
courseCreateSignRequest.setCourseAddr(location); courseCreateSignRequest.setUserId(userId);
courseCreateSignRequest.setCourseId(courseId); courseCreateSignRequest.setSignCode(signCode);
courseCreateSignRequest.setUserId(userId); handler = new Handler(msg -> {
courseCreateSignRequest.setSignCode(signCode); if(msg.arg1 == 200){
handler = new Handler(new Handler.Callback() { String error = (String) msg.obj;
@Override Toast.makeText(CreateSign.this, error, Toast.LENGTH_SHORT).show();
public boolean handleMessage(@NonNull Message msg) { }else if(msg.arg1 == 100){
if(msg.arg1 == 200){ Toast.makeText(CreateSign.this, "创建签到成功", Toast.LENGTH_SHORT).show();
String error = (String) msg.obj; //创建成功后直接结束当前活动,并且跳到查看签到状态
Toast.makeText(CreateSign.this, error, Toast.LENGTH_SHORT).show(); Intent intent = new Intent();
}else if(msg.arg1 == 100){ bundle = getIntent().getExtras();
Toast.makeText(CreateSign.this, "创建签到成功", Toast.LENGTH_SHORT).show(); bundle.putLong(ModelFieldConstants.NOW_SIGN_COURSE_ID, courseId);
//创建成功后直接结束当前活动,并且跳到查看签到状态 bundle.putString(ModelFieldConstants.NOW_SIGN_COURSE_NAME, courseName);
Intent intent = new Intent(); bundle.putSerializable(ModelFieldConstants.COURSE_CREATE_SIGN_REQUEST , courseCreateSignRequest);
bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putLong(ModelFieldConstants.NOW_SIGN_COURSE_ID, courseId); setResult(100,intent);
bundle.putString(ModelFieldConstants.NOW_SIGN_COURSE_NAME, courseName); finish();
intent.putExtras(bundle); }
setResult(100,intent); return false;
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();
} }
}else{ }catch (NumberFormatException numberFormatException){
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 Runnable() { new Thread(() -> {
@Override System.out.println( "courseCreateSignRequest : " + courseCreateSignRequest.toString() + "..............................");
public void run() { String json = JSON.toJSONString(courseCreateSignRequest);
System.out.println( "courseCreateSignRequest : " + courseCreateSignRequest.toString() + ".............................."); String url = UrlConstants.TEACHER_INITIATE;
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,7 +9,6 @@ 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;
@ -81,7 +80,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
tiNewMsg.setSelection(tiNewMsg.getText().length()); if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.COLLEGE_NAME : { case ModelFieldConstants.COLLEGE_NAME : {
@ -92,7 +93,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
tiNewMsg.setSelection(tiNewMsg.getText().length()); if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.REAL_NAME : { case ModelFieldConstants.REAL_NAME : {
@ -103,7 +106,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
tiNewMsg.setSelection(tiNewMsg.getText().length()); if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.ID_NUMBER : { case ModelFieldConstants.ID_NUMBER : {
@ -118,7 +123,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
tiNewMsg.setSelection(tiNewMsg.getText().length()); if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.GENDER : { case ModelFieldConstants.GENDER : {
@ -138,36 +145,24 @@ public class ModifyUserInfo extends AppCompatActivity {
tiNewMsg.setKeyListener(null); tiNewMsg.setKeyListener(null);
tiNewMsg.setOnClickListener(new View.OnClickListener() { tiNewMsg.setOnClickListener(v -> {
@Override System.out.println("choose gender............");
public void onClick(View v) { String[] singleItems = {"男", "女"};
System.out.println("choose gender............"); int checkedItem = 0;
String[] singleItems = {"男", "女"}; if(tiNewMsg.getText() != null){
int checkedItem = "男".equals(tiNewMsg.getText().toString()) ? 0 : 1; 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) {
}
})
.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();
} }
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(ModifyUserInfo.this)
.setTitle("请选择性别")
.setNeutralButton(getString(R.string.cancel), (dialog, which) -> {
})
.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;
} }
@ -179,7 +174,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
tiNewMsg.setSelection(tiNewMsg.getText().length()); if (tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
case ModelFieldConstants.PHONE : { case ModelFieldConstants.PHONE : {
@ -190,11 +187,14 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{ }else{
tiNewMsg.setText(""); tiNewMsg.setText("");
} }
tiNewMsg.setSelection(tiNewMsg.getText().length()); if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break; break;
} }
default:{ default:{
tiNewMsg.setText("error....."); String errorText = "error.....";
tiNewMsg.setText(errorText);
} }
} }
} }
@ -204,12 +204,7 @@ public class ModifyUserInfo extends AppCompatActivity {
*/ */
private void setListener(){ private void setListener(){
//返回上一个活动,也就是个人信息部分 //返回上一个活动,也就是个人信息部分
abIvTitle.setOnClickListener(new View.OnClickListener() { abIvTitle.setOnClickListener(v -> finish());
@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) {
@ -224,12 +219,7 @@ 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(new View.OnClickListener() { abBtSave.setOnClickListener(v -> dialog());
@Override
public void onClick(View v) {
dialog();
}
});
} }
@Override @Override
@ -244,6 +234,7 @@ 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"按钮
@ -259,10 +250,7 @@ public class ModifyUserInfo extends AppCompatActivity {
}; };
} }
}) })
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消 .setNegativeButton("取消", (dialogInterface, i) -> {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}) })
.create(); .create();
alertDialog2.show(); alertDialog2.show();
@ -272,57 +260,23 @@ public class ModifyUserInfo extends AppCompatActivity {
* *
*/ */
private void modifyInfo(){ private void modifyInfo(){
new Thread(new Runnable() { new Thread(() -> {
@Override JSONObject jsonObject = new JSONObject();
public void run() { boolean isLegalInput = false;
JSONObject jsonObject = new JSONObject(); try {
Boolean isLegalInput = false; jsonObject.put(ModelFieldConstants.ID, (Long) bundle.get(ModelFieldConstants.ID));
try { } catch (JSONException e) {
jsonObject.put(ModelFieldConstants.ID, (Long) bundle.get(ModelFieldConstants.ID)); e.printStackTrace();
} catch (JSONException e) { }
e.printStackTrace(); //根据上一个活动传递过来的选择字段,来选择对应的传输方法
} String modifyField = (String) bundle.get(ModelFieldConstants.TO_BE_MODIFY);
//根据上一个活动传递过来的选择字段,来选择对应的传输方法 switch (modifyField){
String modifyField = (String) bundle.get(ModelFieldConstants.TO_BE_MODIFY); case ModelFieldConstants.ID_NUMBER:
switch (modifyField){ case ModelFieldConstants.IN_SCHOOL_TIME:{
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 {
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString(); Long msg = Long.parseLong(Objects.requireNonNull(tiNewMsg.getText()).toString());
//判断输入电话号码是否能解析为long型能解析的话说明输入没有非法字符
Long msgLong = Long.parseLong(msg);
jsonObject.put(modifyField, msg); jsonObject.put(modifyField, msg);
bundle.putString(modifyField, msg); bundle.putLong(modifyField, msg);
isLegalInput = true; isLegalInput = true;
}catch (NumberFormatException e){ }catch (NumberFormatException e){
e.printStackTrace(); e.printStackTrace();
@ -330,72 +284,103 @@ 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;
} }
break; } catch (JSONException e) {
e.printStackTrace();
} }
case ModelFieldConstants.EMAIL:{ break;
Message message = new Message(); }
try { case ModelFieldConstants.PHONE: {
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString(); try {
String[] msgStr = msg.split("@"); String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
//必须得包含@符号 //判断输入电话号码是否能解析为long型能解析的话说明输入没有非法字符
if(msgStr.length == 2){ // Long msgLong = Long.parseLong(msg);
//邮箱的两部分必定是长度大于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); }catch (NumberFormatException e){
isLegalInput = true; e.printStackTrace();
}else{ Message msg = new Message();
message.obj = "输入非法."; msg.obj = "输入非法.";
handler.sendMessage(message); handler.sendMessage(msg);
} }catch (JSONException e) {
e.printStackTrace();
}
break;
}
case ModelFieldConstants.EMAIL:{
Message message = new Message();
try {
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
String[] msgStr = msg.split("@");
//必须得包含@符号
if(msgStr.length == 2){
//邮箱的两部分必定是长度大于0的
if(msgStr[0].length() > 0 && msgStr[1].length() > 0){
jsonObject.put(modifyField, msg);
bundle.putString(modifyField, msg);
isLegalInput = true;
}else{ }else{
message.obj = "输入非法."; message.obj = "输入非法.";
handler.sendMessage(message); handler.sendMessage(message);
} }
} catch (NumberFormatException e){ }else{
e.printStackTrace();
message.obj = "输入非法."; message.obj = "输入非法.";
handler.sendMessage(message); handler.sendMessage(message);
}catch (JSONException e) {
e.printStackTrace();
} }
} catch (NumberFormatException e){
break; e.printStackTrace();
message.obj = "输入非法.";
handler.sendMessage(message);
}catch (JSONException e) {
e.printStackTrace();
} }
default:{
try { break;
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString(); }
jsonObject.put(modifyField, msg); default:{
bundle.putString(modifyField, msg); try {
isLegalInput = true; String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
} catch (JSONException e) { jsonObject.put(modifyField, msg);
e.printStackTrace(); bundle.putString(modifyField, msg);
} isLegalInput = true;
} catch (JSONException e) {
e.printStackTrace();
} }
} }
System.out.println( "jsonObject : " + jsonObject.toString() + ".............................."); }
String json = jsonObject.toString(); System.out.println( "jsonObject : " + jsonObject + "..............................");
String url = UrlConstants.USER_UPDATE; String json = jsonObject.toString();
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,7 +6,6 @@ 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;
@ -21,12 +20,17 @@ 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;
@ -58,9 +62,11 @@ 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) {
@ -106,50 +112,27 @@ 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();
initOnClickListener(); imgUploadHandler = new Handler(Looper.getMainLooper()){
} @Override
public void handleMessage(@NonNull Message msg) {
//用于图片选择器选择图片之后的回调,来完成图片上传和刷新本地 super.handleMessage(msg);
@Override bundle = (Bundle) msg.obj;
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(bundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS)){
super.onActivityResult(requestCode, resultCode, data); System.out.println("refreshData..................");
if (requestCode == 100 && data != null) { getIntent().putExtras(bundle);
//获取选择器返回的数据 refreshData();
ArrayList<String> images = data.getStringArrayListExtra( }else{
ImageSelector.SELECT_RESULT); Toast.makeText(UserInfoDetail.this, "修改失败", Toast.LENGTH_SHORT).show();
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); };
/**
* initOnClickListener();
* true
* true
*/
boolean isCameraImage = data.getBooleanExtra(ImageSelector.IS_CAMERA_IMAGE, false);
}
} }
private void refreshData(){ private void refreshData(){
@ -160,7 +143,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);
@ -173,7 +156,7 @@ public class UserInfoDetail extends AppCompatActivity {
Glide.with(getApplicationContext()) Glide.with(getApplicationContext())
.load(avatar) .load(avatar)
//添加圆角 //添加圆角
.apply(new RequestOptions().bitmapTransform(new RoundedCorners(30))) .apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))
.into(ivHeadImg); .into(ivHeadImg);
} }
if(schoolName != null){ if(schoolName != null){
@ -188,12 +171,10 @@ public class UserInfoDetail extends AppCompatActivity {
if(idNumberMsg != null){ if(idNumberMsg != null){
tvIdNumberMsg.setText(String.valueOf(idNumberMsg)); tvIdNumberMsg.setText(String.valueOf(idNumberMsg));
} }
if(sexMsg != null){ if(sexMsg){
if(sexMsg){ tvSexMsg.setText("男");
tvSexMsg.setText("男"); }else{
}else{ tvSexMsg.setText("女");
tvSexMsg.setText("女");
}
} }
if(createTimeMsg != null){ if(createTimeMsg != null){
Date date = new Date(createTimeMsg); Date date = new Date(createTimeMsg);
@ -210,110 +191,97 @@ public class UserInfoDetail extends AppCompatActivity {
} }
/** /**
* *
*/ */
public void initOnClickListener(){ public void initOnClickListener(){
//头像 //头像
clHeadImg.setOnClickListener(new View.OnClickListener() { clHeadImg.setOnClickListener(v -> {
@Override // 调用第三方开源图片库
public void onClick(View v) { PictureSelector.create(this)
//调用第三方开源库,单选并剪裁 .openGallery(SelectMimeType.ofImage())
ImageSelector.builder() .setImageEngine(GlideEngine.createGlideEngine()) // 图片加载引擎
.useCamera(true) // 设置是否使用拍照 .setMaxSelectNum(1)// 最大图片选择数量 int
.setCrop(true) // 设置是否使用图片剪切功能。 .setImageSpanCount(4)// 每行显示个数 int
.setCropRatio(1.0f) // 图片剪切的宽高比,默认1.0f。宽固定为手机屏幕的宽。 .setSelectionMode(SelectModeConfig.SINGLE)// 多选 or 单选
.setSingle(true) //设置是否单选 .isPreviewImage(true)// 是否可预览图片 true or false
.canPreview(true) //是否可以预览图片默认为true .isSelectZoomAnim(true)// 图片列表点击 缩放效果 默认true
.start(UserInfoDetail.this, 100); // 打开相册 .isGif(false) //是否显示gif文件
} .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(new View.OnClickListener() { clUserName.setOnClickListener(v -> {
@Override Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
public void onClick(View v) { Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.USER_NAME);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.USER_NAME);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent); intentActivityResultLauncher.launch(intent);
}
}); });
clSchoolName.setOnClickListener(new View.OnClickListener() { clSchoolName.setOnClickListener(v -> {
@Override Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
public void onClick(View v) { Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.COLLEGE_NAME);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.COLLEGE_NAME); intentActivityResultLauncher.launch(intent);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clRealName.setOnClickListener(new View.OnClickListener() { clRealName.setOnClickListener(v -> {
@Override Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
public void onClick(View v) { Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.REAL_NAME);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.REAL_NAME); intentActivityResultLauncher.launch(intent);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clIdNumber.setOnClickListener(new View.OnClickListener() { clIdNumber.setOnClickListener(v -> {
@Override Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
public void onClick(View v) { Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.ID_NUMBER);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.ID_NUMBER); intentActivityResultLauncher.launch(intent);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clSex.setOnClickListener(new View.OnClickListener() { clSex.setOnClickListener(v -> {
@Override Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
public void onClick(View v) { Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.GENDER);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.GENDER); intentActivityResultLauncher.launch(intent);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clCreateTime.setOnClickListener(new View.OnClickListener() { clCreateTime.setOnClickListener(v -> {
@Override
public void onClick(View v) {
}
}); });
clEmail.setOnClickListener(new View.OnClickListener() { clEmail.setOnClickListener(v -> {
@Override Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
public void onClick(View v) { Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.EMAIL);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.EMAIL); intentActivityResultLauncher.launch(intent);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
clPhone.setOnClickListener(new View.OnClickListener() { clPhone.setOnClickListener(v -> {
@Override Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class);
public void onClick(View v) { Bundle bundle = getIntent().getExtras();
Intent intent = new Intent(UserInfoDetail.this, ModifyUserInfo.class); bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.PHONE);
Bundle bundle = getIntent().getExtras(); intent.putExtras(bundle);
bundle.putString(ModelFieldConstants.TO_BE_MODIFY, ModelFieldConstants.PHONE); intentActivityResultLauncher.launch(intent);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
//返回上一个活动,也就是个人信息部分 //返回上一个活动,也就是个人信息部分
abIvTitle.setOnClickListener(new View.OnClickListener() { abIvTitle.setOnClickListener(v -> {
@Override Intent intent = new Intent();
public void onClick(View v) { intent.putExtras(bundle);
Intent intent = new Intent(); setResult(RESULT_OK,intent);
intent.putExtras(bundle); finish();
setResult(RESULT_OK,intent);
finish();
}
}); });
} }

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

@ -2,7 +2,6 @@ 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;
@ -38,30 +37,16 @@ public class UserInfoSetting extends AppCompatActivity {
} }
private void setClickListener(){ private void setClickListener(){
btExit.setOnClickListener(new View.OnClickListener() { btExit.setOnClickListener(v ->
@Override CommonUtils.exitApp(UserInfoSetting.this));
public void onClick(View v) {
// finish();//这个只是从方法栈中移除了当前活动 btLoginOut.setOnClickListener(v -> {
// System.exit(0); //同上 Intent intent = new Intent(UserInfoSetting.this, IdChooseActivity.class);
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(new View.OnClickListener() { abIvTitle.setOnClickListener(v -> finish());
@Override
public void onClick(View v) {
finish();
}
});
} }
} }

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

@ -46,9 +46,8 @@ 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 holder; return new ViewHolder(view);
} }
@Override @Override

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

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

@ -45,11 +45,11 @@ public class NestedScrollableHost extends FrameLayout {
return (ViewPager2) var2; return (ViewPager2) var2;
} }
private final View getChild() { private View getChild() {
return this.getChildCount() > 0 ? this.getChildAt(0) : null; return this.getChildCount() > 0 ? this.getChildAt(0) : null;
} }
private final boolean canChildScroll(int orientation, float delta) { private 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) : false; var6 = var10000 != null && var10000.canScrollHorizontally(direction);
break; break;
case 1: case 1:
var10000 = this.getChild(); var10000 = this.getChild();
var6 = var10000 != null ? var10000.canScrollVertically(direction) : false; var6 = var10000 != null && var10000.canScrollVertically(direction);
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 final void handleInterceptTouchEvent(MotionEvent e) { private 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,11 +96,7 @@ 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 if (this.canChildScroll(orientation, isVpHorizontal ? dx : dy)) { } else this.getParent().requestDisallowInterceptTouchEvent(this.canChildScroll(orientation, isVpHorizontal ? dx : dy));
this.getParent().requestDisallowInterceptTouchEvent(true);
} else {
this.getParent().requestDisallowInterceptTouchEvent(false);
}
} }
} }

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

@ -141,12 +141,9 @@ 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(new SwipeRefreshLayout.OnRefreshListener() { srlMyRefresh.setOnRefreshListener(() -> {
@Override refreshData();
public void onRefresh() { srlMyRefresh.setRefreshing(false);
refreshData();
srlMyRefresh.setRefreshing(false);
}
}); });
} }

@ -143,12 +143,9 @@ 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(new SwipeRefreshLayout.OnRefreshListener() { srlMyRefresh.setOnRefreshListener(() -> {
@Override refreshData();
public void onRefresh() { srlMyRefresh.setRefreshing(false);
refreshData();
srlMyRefresh.setRefreshing(false);
}
}); });
} }

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

@ -10,7 +10,6 @@ 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;
@ -95,13 +94,10 @@ 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(new View.OnClickListener() { .setOnClickListener(v -> {
@Override Intent intent = new Intent(mAppCompatActivity, AllCourses.class);
public void onClick(View v) { intent.putExtras(mAppCompatActivity.getIntent().getExtras());
Intent intent = new Intent(mAppCompatActivity, AllCourses.class); mAppCompatActivity.startActivity(intent);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
mAppCompatActivity.startActivity(intent);
}
}) })
.build(); .build();
// 显示 FloatDragPopupWindow // 显示 FloatDragPopupWindow
@ -118,31 +114,19 @@ public class StuHomeFragment extends Fragment {
*/ */
private static void setListener(View view){ private static void setListener(View view){
//口令输入 TODO //口令输入 TODO
codeButton.setOnClickListener(new View.OnClickListener() { codeButton.setOnClickListener(v -> {
@Override
public void onClick(View v) {
}
}); });
//文本输入 TODO //文本输入 TODO
wordButton.setOnClickListener(new View.OnClickListener() { wordButton.setOnClickListener(v -> {
@Override
public void onClick(View v) {
}
}); });
faButton.setOnClickListener(new View.OnClickListener() { faButton.setOnClickListener(v -> {
@Override
public void onClick(View v) {
}
}); });
srlMyRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { srlMyRefresh.setOnRefreshListener(() -> {
@Override refreshData();
public void onRefresh() { srlMyRefresh.setRefreshing(false);
refreshData();
srlMyRefresh.setRefreshing(false);
}
}); });
} }

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

@ -1,6 +1,5 @@
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;
@ -92,52 +91,37 @@ public class TeaHomeFragment extends Fragment{
*/ */
private void setClickListener(){ private void setClickListener(){
//查看签到 //查看签到
btCodeCheck.setOnClickListener(new View.OnClickListener() { btCodeCheck.setOnClickListener(v -> {
@Override bundle = mAppCompatActivity.getIntent().getExtras();
public void onClick(View v) { String nowSignCourseName = bundle.getString(ModelFieldConstants.NOW_SIGN_COURSE_NAME);
bundle = mAppCompatActivity.getIntent().getExtras(); if(nowSignCourseName != null){
String nowSignCourseName = bundle.getString(ModelFieldConstants.NOW_SIGN_COURSE_NAME); System.out.println("nowSignCourseName = " + nowSignCourseName + "......................");
if(nowSignCourseName != null){ Intent intent = new Intent(mAppCompatActivity, CheckCourseSign.class);
System.out.println("nowSignCourseName = " + nowSignCourseName + "......................"); intent.putExtras(mAppCompatActivity.getIntent().getExtras());
Intent intent = new Intent(mAppCompatActivity, CheckCourseSign.class); startActivity(intent);
intent.putExtras(mAppCompatActivity.getIntent().getExtras()); }else{
startActivity(intent); Intent intent = new Intent(mAppCompatActivity, ChooseCourse.class);
}else{ bundle.putInt(ModelFieldConstants.COURSE_CHOOSE_SELECT, 1);
Intent intent = new Intent(mAppCompatActivity, ChooseCourse.class); intent.putExtras(bundle);
bundle.putInt(ModelFieldConstants.COURSE_CHOOSE_SELECT, 1); startActivity(intent);
intent.putExtras(bundle);
startActivity(intent);
}
} }
}); });
//创建签到 //创建签到
btWordCheck.setOnClickListener(new View.OnClickListener() { btWordCheck.setOnClickListener(v -> {
@Override Intent intent = new Intent(mAppCompatActivity, CreateSign.class);
public void onClick(View v) { bundle = mAppCompatActivity.getIntent().getExtras();
Intent intent = new Intent(mAppCompatActivity, CreateSign.class); bundle.putInt(ModelFieldConstants.COURSE_CHOOSE_SELECT, 0);
bundle = mAppCompatActivity.getIntent().getExtras(); intent.putExtras(bundle);
bundle.putInt(ModelFieldConstants.COURSE_CHOOSE_SELECT, 0); intentActivityResultLauncher.launch(intent);
intent.putExtras(bundle);
intentActivityResultLauncher.launch(intent);
}
}); });
//创建班级 //创建班级
btCreateClass.setOnClickListener(new View.OnClickListener() { btCreateClass.setOnClickListener(v -> {
@Override Intent intent = new Intent(mAppCompatActivity, CreateCourse.class);
public void onClick(View v) { intent.putExtras(mAppCompatActivity.getIntent().getExtras());
Intent intent = new Intent(mAppCompatActivity, CreateCourse.class); intentActivityResultLauncher.launch(intent);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
//管理班级 //管理班级
btManageClass.setOnClickListener(new View.OnClickListener() { btManageClass.setOnClickListener(v -> vp2.setCurrentItem(1));
@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(new RequestOptions().bitmapTransform(new RoundedCorners(10))) .apply(RequestOptions.bitmapTransform(new RoundedCorners(10)))
.into(ivHeadImg); .into(ivHeadImg);
} }
if(userName != null){ if(userName != null){
@ -136,94 +136,66 @@ public class UserInfoFragment extends Fragment {
public static void initOnClickListener(){ public static void initOnClickListener(){
btSetting.setOnClickListener(new View.OnClickListener() { btSetting.setOnClickListener(v -> {
@Override Intent intent = new Intent(mAppCompatActivity, UserInfoSetting.class);
public void onClick(View v) { intent.putExtras(mAppCompatActivity.getIntent().getExtras());
Intent intent = new Intent(mAppCompatActivity, UserInfoSetting.class); intentActivityResultLauncher.launch(intent);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
//关于 //关于
btAbout.setOnClickListener(new View.OnClickListener() { btAbout.setOnClickListener(v -> {
@Override Intent intent = new Intent(mAppCompatActivity, UserInfoAbout.class);
public void onClick(View v) { intent.putExtras(mAppCompatActivity.getIntent().getExtras());
Intent intent = new Intent(mAppCompatActivity, UserInfoAbout.class); intentActivityResultLauncher.launch(intent);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
//分享 //分享
btShare.setOnClickListener(new View.OnClickListener() { btShare.setOnClickListener(v -> {
@Override shareHandler = new Handler(msg -> {
public void onClick(View v) { if(msg.arg1 == 1){
shareHandler = new Handler(new Handler.Callback() { Intent shareIntent = (Intent) msg.obj;
@Override intentActivityResultLauncher.launch(Intent.createChooser(shareIntent, "分享apk"));
public boolean handleMessage(@NonNull Message msg) { }
if(msg.arg1 == 1){ return false;
Intent shareIntent = (Intent) msg.obj; });
intentActivityResultLauncher.launch(Intent.createChooser(shareIntent, "分享apk")); shareApk();
}
return false;
}
});
shareApk();
}
}); });
btRecord.setOnClickListener(new View.OnClickListener() { btRecord.setOnClickListener(v -> {
@Override Intent intent = new Intent(mAppCompatActivity, UserInfoRecord.class);
public void onClick(View v) { intent.putExtras(mAppCompatActivity.getIntent().getExtras());
Intent intent = new Intent(mAppCompatActivity, UserInfoRecord.class); intentActivityResultLauncher.launch(intent);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
clBaseInfo.setOnClickListener(new View.OnClickListener() { clBaseInfo.setOnClickListener(v -> {
@Override Intent intent = new Intent(mAppCompatActivity, UserInfoDetail.class);
public void onClick(View v) { intent.putExtras(mAppCompatActivity.getIntent().getExtras());
Intent intent = new Intent(mAppCompatActivity, UserInfoDetail.class); intentActivityResultLauncher.launch(intent);
intent.putExtras(mAppCompatActivity.getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
}); });
} }
private static void shareApk(){ private static void shareApk(){
new Thread(new Runnable() { new Thread(() -> {
@Override PackageManager mPackageManager = mAppCompatActivity.getPackageManager();
public void run() { List<PackageInfo> packageInfoList = mPackageManager.getInstalledPackages(0);
PackageManager mPackageManager = mAppCompatActivity.getPackageManager(); System.out.println("UserInfoFragment:PackageInfo : " + packageInfoList);
List<PackageInfo> packageInfoList = mPackageManager.getInstalledPackages(0); try {
System.out.println("UserInfoFragment:PackageInfo : " + packageInfoList); ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo("com.example.stlink", 0);
try { File apkFile = new File(applicationInfo.sourceDir);
ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo("com.example.stlink", 0);
File apkFile = new File(applicationInfo.sourceDir); Intent shareIntent = new Intent();
// 设置该意图对象作为活动发送
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("*/*");
// // 比如发送文本形式的数据内容 // 给目标应用一个临时的读授权如果要写权限则是FLAG_GRANT_WRITE_URI_PERMISSION
// // 指定发送的内容 shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// shareIntent.putExtra(Intent.EXTRA_TEXT, "S.T.Link......"); // 第二个参数就是AndroidManifest中配置的authorities即包名.fileProvider
// // 指定发送内容的类型 Uri contentUri = FileProvider.getUriForFile(mAppCompatActivity, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);
// shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
//
// intentActivityResultLauncher.launch(Intent.createChooser(shareIntent, "分享")); Message message = new Message();
message.arg1 = 1;
shareIntent.setType("*/*"); message.obj = shareIntent;
// 给目标应用一个临时的读授权如果要写权限则是FLAG_GRANT_WRITE_URI_PERMISSION shareHandler.sendMessage(message);
shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// 第二个参数就是AndroidManifest中配置的authorities即包名.fileProvider } catch (PackageManager.NameNotFoundException e) {
Uri contentUri = FileProvider.getUriForFile(mAppCompatActivity, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile); e.printStackTrace();
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,6 +76,8 @@ 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,6 +2,8 @@ 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 {
@ -160,6 +162,7 @@ public class User {
this.userName = userName; this.userName = userName;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "User{" + return "User{" +

@ -1,5 +1,7 @@
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 {
@ -24,6 +26,7 @@ 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 com.google.gson.internal.bind.util.ISO8601Utils; import androidx.annotation.NonNull;
public class CourseCreateRequest { public class CourseCreateRequest {
@ -124,6 +124,7 @@ public class CourseCreateRequest {
this.userName = userName; this.userName = userName;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "CourseCreateRequest{" + return "CourseCreateRequest{" +

@ -1,9 +1,13 @@
package com.example.stlink.model.request; package com.example.stlink.model.request;
import androidx.annotation.NonNull;
import java.io.Serializable;
/** /**
* *
*/ */
public class CourseCreateSignRequest { public class CourseCreateSignRequest implements Serializable {
/** /**
* () * ()
@ -109,6 +113,7 @@ public class CourseCreateSignRequest {
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 android.content.Intent; import androidx.annotation.NonNull;
public class StuSignRequest { public class StuSignRequest {
@ -43,6 +43,7 @@ public class StuSignRequest {
this.userSignId = userSignId; this.userSignId = userSignId;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "StuSignRequest{" + return "StuSignRequest{" +

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

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

@ -1,5 +1,7 @@
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;
@ -34,6 +36,7 @@ public class BaseResponse <T> {
this.data = data; this.data = data;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "BaseResponse{" + return "BaseResponse{" +

@ -1,8 +1,7 @@
package com.example.stlink.model.response.data; package com.example.stlink.model.response.data;
import com.example.stlink.model.domain.Course; import androidx.annotation.NonNull;
import java.util.Arrays;
import java.util.List; import java.util.List;
public class CourseData <T> { public class CourseData <T> {
@ -47,6 +46,7 @@ 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 com.google.gson.annotations.SerializedName; import androidx.annotation.NonNull;
import java.io.Serializable; import java.io.Serializable;
@ -151,6 +151,7 @@ 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,5 +1,7 @@
package com.example.stlink.model.response.data; package com.example.stlink.model.response.data;
import androidx.annotation.NonNull;
public class CourseSignMsg { public class CourseSignMsg {
/** /**
@ -41,6 +43,7 @@ public class CourseSignMsg {
this.courseNum = courseNum; this.courseNum = courseNum;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return "CourseSignMsg{" + return "CourseSignMsg{" +

@ -16,7 +16,6 @@ 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;
@ -241,7 +240,7 @@ public class CommonUtils {
//需要加八个格林威治时间 //需要加八个格林威治时间
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
//如果它本来就是long类型的,则不用写这一步 //如果它本来就是long类型的,则不用写这一步
long lt = new Long(s); long lt = Long.parseLong(s);
Date date = new Date(lt); Date date = new Date(lt);
res = simpleDateFormat.format(date); res = simpleDateFormat.format(date);
return res; return res;
@ -257,7 +256,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,7 +2,6 @@ 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,7 +2,6 @@ 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,18 +48,10 @@ public class CheckCourseSignUtil {
*/ */
public void initPage(List<Fragment> list){ public void initPage(List<Fragment> list){
// 设置点击触发 // 设置点击触发
tvSignList.setOnClickListener(new View.OnClickListener() { tvSignList.setOnClickListener(v ->
@Override viewPager2.setCurrentItem(0));
public void onClick(View v) { tvCourseSignLeave.setOnClickListener(v ->
viewPager2.setCurrentItem(0); viewPager2.setCurrentItem(2));
}
});
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,6 +1,5 @@
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;
@ -45,24 +44,12 @@ public class CourseDetailUtil {
*/ */
public void initPage(List<Fragment> list){ public void initPage(List<Fragment> list){
// 设置点击触发 // 设置点击触发
tvCourseIntro.setOnClickListener(new View.OnClickListener() { tvCourseIntro.setOnClickListener(v ->
@Override viewPager2.setCurrentItem(0));
public void onClick(View v) { tvCourseClassList.setOnClickListener(v ->
viewPager2.setCurrentItem(0); viewPager2.setCurrentItem(1));
} 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,27 +15,24 @@ 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 Runnable() { new Thread(() -> {
@Override //fastJson将对象转换为JSON字符串
public void run() { String json = JSON.toJSONString(courseCreateRequest);
//fastJson将对象转换为JSON字符串
String json = JSON.toJSONString(courseCreateRequest); new PostBodyParamHttpUtils() {
@Override
new PostBodyParamHttpUtils() { public void nextMethod(BaseResponse<Object> baseResponse) {
@Override Message message = new Message();
public void nextMethod(BaseResponse<Object> baseResponse) { message.obj = "success";
Message message = new Message(); handler.sendMessage(message);
message.obj = "success"; }
handler.sendMessage(message); @Override
} public void failedMethod(BaseResponse<Object> baseResponse) {
@Override Message message = new Message();
public void failedMethod(BaseResponse<Object> baseResponse) { message.obj = baseResponse.getMsg();
Message message = new Message(); handler .sendMessage(message);
message.obj = baseResponse.getMsg(); }
handler .sendMessage(message); }.postConnect(url, json);
}
}.postConnect(url, json);
}
}).start(); }).start();
} }

@ -1,6 +1,5 @@
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;
@ -8,7 +7,6 @@ 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;
@ -34,35 +32,32 @@ public class ImgUploadUtil {
mBundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS, false); mBundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS, false);
new Thread(new Runnable() { new Thread(() -> {
@Override File file = null;
public void run() { if (path != null && !TextUtils.isEmpty(path)) {
File file = null; file = new File(path);
if (!TextUtils.isEmpty(path)) { }
file = new File(path); new PostFileHttpUtils() {
} @Override
new PostFileHttpUtils() { public void nextMethod(BaseResponse<Object> baseResponse) {
@Override if(ModelFieldConstants.AVATAR.equals(mImgId)){
public void nextMethod(BaseResponse<Object> baseResponse) { userImgUploadNext(baseResponse);
if(ModelFieldConstants.AVATAR.equals(mImgId)){ }else if (ModelFieldConstants.COURSE_PHOTO.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
public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message(); Message message = new Message();
System.out.println("上传失败......................."); mBundle.putString(mImgId, (String) baseResponse.getData());
handler.sendMessage(message); mBundle.putBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS, true);
message.obj = mBundle;
mHandler.sendMessage(message);
} }
}.FileUpload(UrlConstants.FILE_UPLOAD, file); }
}
@Override
public void failedMethod(BaseResponse<Object> baseResponse) {
Message message = new Message();
System.out.println("上传失败.......................");
handler.sendMessage(message);
}
}.FileUpload(UrlConstants.FILE_UPLOAD, file);
}).start(); }).start();
} }

@ -117,49 +117,46 @@ public class LoginUtil {
* *
*/ */
private void loginRequest(){ private void loginRequest(){
new Thread(new Runnable() { new Thread(() -> {
@Override // 密码要进行MD5加密
public void run() { String url = UrlConstants.USER_LOGIN + "?password=" + CommonUtils.MD5(pwd) + "&username=" + userName;
// 密码要进行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);
}
} }
@Override //将LinkedTreeMap中字段映射到User类中
public void failedMethod(BaseResponse<Object> baseResponse) { 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 message = new Message();
message.obj = baseResponse.getMsg(); message.obj = "登录失败";
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,9 +144,6 @@ 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,37 +101,34 @@ public class RegisterUtil {
*/ */
private void registerRequest(){ private void registerRequest(){
new Thread(new Runnable() { new Thread(() -> {
@Override UserRegisterRequest requestObj = new UserRegisterRequest();
public void run() { //fastJson将对象转换为JSON字符串
UserRegisterRequest requestObj = new UserRegisterRequest(); requestObj.setUserName(userName);
//fastJson将对象转换为JSON字符串 //即将云端发送的密码要经过MD5加密也就是异或运算和MD5的双重加密
requestObj.setUserName(userName); requestObj.setPassword(CommonUtils.MD5(pwd));
//即将云端发送的密码要经过MD5加密也就是异或运算和MD5的双重加密 requestObj.setRoleId( (Integer) registerActivity.getIntent().getExtras().get(ModelFieldConstants.ROLE_ID));
requestObj.setPassword(CommonUtils.MD5(pwd)); System.out.println( "requestObj : " + requestObj + "..............................");
requestObj.setRoleId( (Integer) registerActivity.getIntent().getExtras().get(ModelFieldConstants.ROLE_ID)); String json = JSON.toJSONString(requestObj);
System.out.println( "requestObj : " + requestObj.toString() + ".............................."); String url = UrlConstants.USER_REGISTER;
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,19 +44,11 @@ public class TeaClassListUtil {
*/ */
public void initPage(List<Fragment> list){ public void initPage(List<Fragment> list){
// 设置点击触发 // 设置点击触发
tvUnfinishedCourse.setOnClickListener(new View.OnClickListener() { tvUnfinishedCourse.setOnClickListener(v ->
@Override viewPager2.setCurrentItem(0));
public void onClick(View v) {
viewPager2.setCurrentItem(0);
}
});
System.out.println(tvUnfinishedCourse.hasOnClickListeners()); System.out.println(tvUnfinishedCourse.hasOnClickListeners());
tvFinishedCourse.setOnClickListener(new View.OnClickListener() { tvFinishedCourse.setOnClickListener(v ->
@Override viewPager2.setCurrentItem(1));
public void onClick(View v) {
viewPager2.setCurrentItem(1);
}
});
// 注册页面改变的回调函数 // 注册页面改变的回调函数
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { // 声明页面切换后的回调函数 viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { // 声明页面切换后的回调函数
@Override @Override

@ -59,17 +59,21 @@ public abstract class DeleteUrlParamHttpUtils {
* @param e * @param e
*/ */
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(@NonNull 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 {
final String body = response.body().string(); String body = null;
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,7 +14,6 @@ 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;
@ -60,13 +59,14 @@ public abstract class GetUrlParamHttpUtils {
* @param e * @param e
*/ */
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(@NonNull 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,7 +15,6 @@ 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;
@ -74,13 +73,14 @@ public abstract class PostBodyParamHttpUtils {
* @param e * @param e
*/ */
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(@NonNull 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.toString()); System.out.println("baseResponse: " + baseResponse);
} }
} }

@ -70,14 +70,14 @@ public abstract class PostFileHttpUtils {
* @param e * @param e
*/ */
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(@NonNull 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();

@ -0,0 +1,16 @@
<?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,10 +40,12 @@
<LinearLayout <LinearLayout
android:id="@+id/ll_course_info_msg" android:id="@+id/ll_course_info_msg"
android:layout_width="match_parent" android:layout_width="0dp"
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
@ -150,6 +152,17 @@
</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="签到列表"

@ -0,0 +1,17 @@
<?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