Compare commits

...

9 Commits
dev1 ... 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/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/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_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" />
@ -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_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/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/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" />
@ -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_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_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_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 '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'
@ -86,7 +90,4 @@ dependencies {
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
}

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

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

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

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

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

@ -5,7 +5,6 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
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.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
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.configs.adapter.LocationPoiAdapter;
import com.example.stlink.configs.onRecyclerViewItemClickListener;
import com.example.stlink.fragments.StuHomeFragment;
import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.utils.MyLocationListener;
@ -106,6 +103,7 @@ public class MapActivity extends AppCompatActivity {
/**
*
*/
@SuppressLint("NotifyDataSetChanged")
private void initView(){
//获取布局相关控件
mMapView = findViewById(R.id.b_map_view);
@ -116,10 +114,7 @@ public class MapActivity extends AppCompatActivity {
mRecyclerView= findViewById(R.id.rv_msg);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
locationPoiHandler = new Handler(new Handler.Callback() {
@SuppressLint("NotifyDataSetChanged")
@Override
public boolean handleMessage(@NonNull Message msg) {
locationPoiHandler = new Handler(msg -> {
if(msg.arg1 == 1){
adapter=new LocationPoiAdapter(MapActivity.this,mList);
mRecyclerView.setAdapter(adapter);
@ -127,12 +122,9 @@ public class MapActivity extends AppCompatActivity {
adapter.setOnItemClickListener(recyclerViewItemClickListener);
}
return false;
}
});
myLocationListenerHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
myLocationListenerHandler = new Handler(msg -> {
nowLocation = myLocationListener.getLocation();
if(msg.arg1 == 200 && nowLocation != null){
LatLng point = new LatLng(nowLocation.getLatitude(), nowLocation.getLongitude());
@ -149,7 +141,6 @@ public class MapActivity extends AppCompatActivity {
System.out.println("nowLocation : " + nowLocation);
}
return false;
}
});
// 得到地图
@ -248,9 +239,7 @@ public class MapActivity extends AppCompatActivity {
*/
private void setOtherListener(){
//重定位
ivRelocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ivRelocation.setOnClickListener(v -> {
//点击重定位按钮,启动定位
System.out.println("mBaiduMap:starting................");
mLocationClient.start();
@ -260,7 +249,6 @@ public class MapActivity extends AppCompatActivity {
// LatLng ll = new LatLng(nowLocation.getLatitude(), nowLocation.getLongitude());
// MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
// mBaiduMap.animateMapStatus(msu);
}
});
abBtReturn.setOnClickListener(new View.OnClickListener() {
@Override
@ -269,9 +257,7 @@ public class MapActivity extends AppCompatActivity {
}
});
//保存
abBtSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
abBtSave.setOnClickListener(v -> {
nowLocation = myLocationListener.getLocation();
String ll = "(" + nowLocation.getLatitude() + "," + nowLocation.getLongitude() + ")";
Intent intent = new Intent();
@ -280,29 +266,24 @@ public class MapActivity extends AppCompatActivity {
intent.putExtras(bundle);
setResult(100,intent);
finish();
}
});
recyclerViewItemClickListener = new onRecyclerViewItemClickListener() {
@Override
public void onItemClick(RecyclerView parent, View view, int position) {
PoiInfo poiInfo = mList.get(position);
//添加"Yes"按钮
//添加取消
AlertDialog alertDialog2 = new AlertDialog.Builder(MapActivity.this)
.setMessage("签到地点【" + poiInfo.name + "】")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@Override
public void onClick(DialogInterface dialogInterface, int i) {
.setPositiveButton("确定", (dialogInterface, i) -> {
Intent intent = new Intent();
Bundle bundle = getIntent().getExtras();
bundle.putString(ModelFieldConstants.LOCATION, poiInfo.name);
intent.putExtras(bundle);
setResult(100,intent);
finish();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
.setNegativeButton("取消", (dialogInterface, i) -> {
})
.create();
alertDialog2.show();

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

@ -1,7 +1,6 @@
package com.example.stlink.activitys.fragmentChild.activityStuClassList;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
@ -23,7 +22,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSON;
import com.example.stlink.R;
import com.example.stlink.activitys.ScanQRCodeActivity;
import com.example.stlink.configs.adapter.StuCourseSignedAdapter;
import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.model.constants.UrlConstants;
@ -58,6 +56,7 @@ public class CourseSignIn extends AppCompatActivity {
private TextInputEditText etCodeInput;
private static List<CourseSign> courseHasSignedList;
@SuppressLint("StaticFieldLeak")
private static StuCourseSignedAdapter adapter;
private Handler signHandler;
@ -122,24 +121,18 @@ public class CourseSignIn extends AppCompatActivity {
}
private void setClickListener(){
abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
abIvTitle.setOnClickListener(v -> finish());
//点击签到后的事件
btSign.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btSign.setOnClickListener(v -> {
@SuppressLint("InflateParams")
View view = LayoutInflater.from(CourseSignIn.this).inflate(R.layout.dialog_input, null);
//添加取消
//添加"Yes"按钮
@SuppressLint("NotifyDataSetChanged")
AlertDialog.Builder builder = new AlertDialog.Builder(CourseSignIn.this)
.setMessage("请输入签到口令")
.setView(view)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@Override
public void onClick(DialogInterface dialogInterface, int i) {
.setPositiveButton("确定", (dialogInterface, i) -> {
etCodeInput = view.findViewById(R.id.et_code_input);
Editable etSignCode = etCodeInput.getText();
if(etSignCode == null){
@ -153,49 +146,32 @@ public class CourseSignIn extends AppCompatActivity {
try{
signCode = Integer.parseInt(signCodeStr);
stuSignRequest.setSignCode(signCode);
signHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
signHandler = new Handler(msg -> {
if(msg.arg1 == -1){
String errorMsg = (String) msg.obj;
Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show();
}else if(msg.arg1 == 1){
Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show();
tvSignRecord.setVisibility(View.VISIBLE);
getSignedHandler = new Handler(new Handler.Callback() {
@SuppressLint("NotifyDataSetChanged")
@Override
public boolean handleMessage(@NonNull Message msg) {
if(msg.arg1 == 1){
getSignedHandler = new Handler(msg1 -> {
if(msg1.arg1 == 1){
adapter.notifyDataSetChanged();
}
return false;
}
});
getHasSignedList();
}
return false;
}
});
signIn(stuSignRequest);
}catch ( NumberFormatException numberFormatException){
Toast.makeText(CourseSignIn.this, "口令输入错误", Toast.LENGTH_SHORT).show();
}
}
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
.setNegativeButton("取消", (dialogInterface, 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);
.setNeutralButton("扫码", (dialog, which) -> {
// 创建IntentIntegrator对象
IntentIntegrator intentIntegrator = new IntentIntegrator(CourseSignIn.this)
.setBeepEnabled(true) //扫描提示音
@ -205,11 +181,9 @@ public class CourseSignIn extends AppCompatActivity {
.setTimeout(10000);//15秒未扫描则将自动关闭扫码界面
// 开始扫描
intentIntegrator.initiateScan();
}
});
AlertDialog alertDialog2 = builder.create();
alertDialog2.show();
}
});
}
@ -217,9 +191,7 @@ public class CourseSignIn extends AppCompatActivity {
*
*/
private void getHasSignedList(){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
bundle = getIntent().getExtras();
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
ModelFieldConstants.USER_ID + "=" + bundle.getLong(ModelFieldConstants.ID) + "&" +
@ -256,7 +228,6 @@ public class CourseSignIn extends AppCompatActivity {
@Override
public void failedMethod(BaseResponse<Object> baseResponse) { }
}.getConnect(url);
}
}).start();
}
@ -265,9 +236,7 @@ public class CourseSignIn extends AppCompatActivity {
* @param stuSignRequest
*/
private void signIn(StuSignRequest stuSignRequest){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
System.out.println( "CourseSignIn:stuSignRequest : " + stuSignRequest.toString());
String json = JSON.toJSONString(stuSignRequest);
String url = UrlConstants.STUDENT_SIGN;
@ -287,7 +256,6 @@ public class CourseSignIn extends AppCompatActivity {
signHandler.sendMessage(message);
}
}.postConnect(url, json);
}
}).start();
}
@ -307,29 +275,22 @@ public class CourseSignIn extends AppCompatActivity {
try{
signCode = Integer.parseInt(signCodeStr);
stuSignRequest.setSignCode(signCode);
signHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
signHandler = new Handler(msg -> {
if(msg.arg1 == -1){
String errorMsg = (String) msg.obj;
Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show();
}else if(msg.arg1 == 1){
Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show();
tvSignRecord.setVisibility(View.VISIBLE);
getSignedHandler = new Handler(new Handler.Callback() {
@SuppressLint("NotifyDataSetChanged")
@Override
public boolean handleMessage(@NonNull Message msg) {
if(msg.arg1 == 1){
getSignedHandler = new Handler(msg1 -> {
if(msg1.arg1 == 1){
adapter.notifyDataSetChanged();
}
return false;
}
});
getHasSignedList();
}
return false;
}
});
signIn(stuSignRequest);
}catch ( NumberFormatException numberFormatException){

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

@ -13,7 +13,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.example.stlink.R;
import com.example.stlink.fragments.CourseClassListFragment;
@ -125,13 +124,7 @@ public class CourseDetail extends AppCompatActivity {
*
*/
private void setListener(){
abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
abIvTitle.setOnClickListener(v -> finish());
}
private void initPager(){
@ -146,9 +139,7 @@ public class CourseDetail extends AppCompatActivity {
}
private void getCourseDetail(){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID);
long userId = bundle.getLong(ModelFieldConstants.USER_ID);
@ -185,7 +176,6 @@ public class CourseDetail extends AppCompatActivity {
handler .sendMessage(message);
}
}.getConnect(url);
}
}).start();
}
}

@ -1,14 +1,25 @@
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.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
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.appcompat.app.AppCompatActivity;
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.model.constants.ModelFieldConstants;
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.data.CourseSignMsg;
import com.example.stlink.utils.CommonUtils;
import com.example.stlink.utils.QRCodeUtil;
import com.example.stlink.utils.activityUtil.CheckCourseSignUtil;
import com.example.stlink.utils.httpUtils.GetUrlParamHttpUtils;
import com.google.gson.Gson;
@ -40,6 +53,7 @@ public class CheckCourseSign extends AppCompatActivity {
private TextView tvCourseStuAmountMsg;
private TextView tvCourseStuArriveAmountMsg;
private TextView tvCourseStuLeaveAmountMsg;
private ImageView ivCode;
private CheckCourseSignUtil checkCourseSignUtil;
@ -49,6 +63,11 @@ public class CheckCourseSign extends AppCompatActivity {
private Bundle bundle;
private Handler handler;
private Handler shareImageHandler;
private static ActivityResultLauncher<Intent> intentActivityResultLauncher;
Dialog dialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -57,10 +76,11 @@ public class CheckCourseSign extends AppCompatActivity {
initPage();
}
private void initView(){
CommonUtils.changeStatusBar(CheckCourseSign.this);
ivCode = findViewById(R.id.iv_code);
abIvTitle = findViewById(R.id.ab_iv_title);
aTvCourseName = findViewById(R.id.ab_tv_course_name);
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);
dialog = new Dialog(this, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
setClickListener();
refreshData();
handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
handler = new Handler(msg -> {
if(msg.arg1 == 200){
aTvCourseName.setText(courseSignMsg.getCourseName());
tvCourseStuAmountMsg.setText(String.valueOf(courseSignMsg.getCourseNum()));
}
return false;
}
});
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(){
@ -99,14 +136,37 @@ public class CheckCourseSign extends AppCompatActivity {
if(!TextUtils.isEmpty(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(){
abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
private void setClickListener(){
abIvTitle.setOnClickListener(v -> finish());
ivCode.setOnClickListener(v -> {
ivCode.setVisibility(View.INVISIBLE);
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();
}
/**
*
*/
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;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
@ -19,8 +17,8 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.bumptech.glide.Glide;
import com.donkingliang.imageselector.utils.ImageSelector;
import com.example.stlink.R;
import com.example.stlink.configs.GlideEngine;
import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.model.constants.UrlConstants;
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.ImgUploadUtil;
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.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.Objects;
@ -58,6 +60,8 @@ public class CreateCourse extends AppCompatActivity {
private Handler btAddHandler;
private Handler imgUploadHandler;
//每两秒进行一个检测
private final Runnable btRunnable = new Runnable() {
@SuppressLint("ResourceAsColor")
@ -104,6 +108,8 @@ public class CreateCourse extends AppCompatActivity {
Toast.makeText(CreateCourse.this, "创建成功", Toast.LENGTH_SHORT).show();
btAddHandler.removeCallbacks(btRunnable);
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);
}
//用于图片选择器选择图片之后的回调,来完成图片上传和刷新本地
@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();
// 用于图片上传成功之后刷新界面
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();
}
private void refreshData(){
bundle = getIntent().getExtras();
String courseImg = bundle.getString(ModelFieldConstants.COURSE_PHOTO);
if(courseImg != null){
if(courseImg != null){ // 将图片加载出来
Glide.with(getApplicationContext())
.load(courseImg)
.into(ivAddImg);
@ -233,109 +222,86 @@ public class CreateCourse extends AppCompatActivity {
*
*/
private void setClickListener(){
startDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
@Override
public void onPositiveButtonClick(Long selection) {
startDatePicker.addOnPositiveButtonClickListener(selection -> {
String startFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日");
etStartTime.setText(startFormDate);
isSuccessCourseStartTime = true;
Bundle bundle1 = getIntent().getExtras();
bundle1.putLong(ModelFieldConstants.START_TIME, selection);
getIntent().putExtras(bundle1);
}
});
endDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
@Override
public void onPositiveButtonClick(Long selection) {
endDatePicker.addOnPositiveButtonClickListener(selection -> {
String endFormDate = CommonUtils.stampToDate(String.valueOf(selection), "yyyy年MM月dd日");
etEndTime.setText(endFormDate);
isSuccessCourseEndTime = true;
Bundle bundle1 = getIntent().getExtras();
bundle1.putLong(ModelFieldConstants.END_TIME, selection);
getIntent().putExtras(bundle1);
}
});
//点击添加图片
ivAddImg.setOnClickListener(new View.OnClickListener() {
ivAddImg.setOnClickListener(v -> {
// 调用第三方开源图片库
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
.setImageEngine(GlideEngine.createGlideEngine()) // 图片加载引擎
.setMaxSelectNum(1)// 最大图片选择数量 int
.setImageSpanCount(4)// 每行显示个数 int
.setSelectionMode(SelectModeConfig.SINGLE)// 多选 or 单选
.isPreviewImage(true)// 是否可预览图片 true or false
.isSelectZoomAnim(true)// 图片列表点击 缩放效果 默认true
.isGif(false) //是否显示gif文件
.isWebp(false) //是否显示webp文件
.isBmp(false) //是否显示bmp文件
.isMaxSelectEnabledMask(true) //达到最大选择数是否开启禁选蒙层
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onClick(View v) {
//调用第三方开源库,单选并剪裁
ImageSelector.builder()
.useCamera(false) // 设置是否使用拍照
.setCrop(true) // 设置是否使用图片剪切功能。
.setCropRatio(1.0f) // 图片剪切的宽高比,默认1.0f。宽固定为手机屏幕的宽。
.setSingle(true) //设置是否单选
.canPreview(true) //是否可以预览图片默认为true
.start(CreateCourse.this, 100); // 打开相册
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() {
@Override
public void onClick(View v) {
etStartTime.setOnClickListener(v -> {
if(!startDatePicker.isAdded()){
startDatePicker.show(getSupportFragmentManager(), "Hello");
}
}
});
//课程结束时间
etEndTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etEndTime.setOnClickListener(v -> {
if(!endDatePicker.isAdded()){
endDatePicker.show(getSupportFragmentManager(), "Hello");
}
}
});
//刷新当前时间
etCreateTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etCreateTime.setOnClickListener(v -> {
long currentDate = System.currentTimeMillis();
String curFormDate = CommonUtils.stampToDate(String.valueOf(currentDate), "yyyy年MM月dd日");
etCreateTime.setText(curFormDate);
isSuccessCourseCreateTime = true;
}
});
//课程状态选择
etStatus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etStatus.setOnClickListener(v -> {
String[] singleItems = {"未结课", "已结课"};
int checkedItem = "未结课".equals(etStatus.getText().toString()) ? 0 : 1;
int checkedItem = "未结课".equals(Objects.requireNonNull(etStatus.getText()).toString()) ? 0 : 1;
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(CreateCourse.this)
.setTitle("请选择课程授课状态")
.setNeutralButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
.setNeutralButton(getString(R.string.cancel), (dialog, which) -> {
}
})
.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);
}
});
.setPositiveButton(getString(R.string.ok), (dialog, which) ->
etStatus.setText(singleItems[bundle.getInt("checkedItem")]))
.setSingleChoiceItems(singleItems, checkedItem, (dialog, which) ->
bundle.putInt("checkedItem", which));
materialAlertDialogBuilder.show();
}
});
//返回上一个活动
abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
abIvTitle.setOnClickListener(v -> finish());
}
/**

@ -1,10 +1,15 @@
package com.example.stlink.activitys.fragmentChild.activityTeaHome;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
@ -13,10 +18,10 @@ import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.core.content.ContextCompat;
import com.alibaba.fastjson.JSON;
import com.example.stlink.R;
@ -109,7 +114,7 @@ public class CreateSign extends AppCompatActivity {
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("-");
currYear = Integer.parseInt(timeStrs[0]);
currMonth = Integer.parseInt(timeStrs[1]);
@ -119,7 +124,7 @@ public class CreateSign extends AppCompatActivity {
currSecond = Integer.parseInt(timeStrs[5]);
startTimePicker = new MaterialTimePicker.Builder()
.setTimeFormat(TimeFormat.CLOCK_12H)
.setTimeFormat(TimeFormat.CLOCK_24H)
.setHour(currHour)
.setMinute(currMin)
.setTitleText("开始时间选择")
@ -127,7 +132,7 @@ public class CreateSign extends AppCompatActivity {
.setNegativeButtonText("取消")
.build();
endTimePicker = new MaterialTimePicker.Builder()
.setTimeFormat(TimeFormat.CLOCK_12H)
.setTimeFormat(TimeFormat.CLOCK_24H)
.setHour(currHour)
.setMinute(currMin)
.setTitleText("结束时间选择")
@ -164,24 +169,14 @@ public class CreateSign extends AppCompatActivity {
*
*/
private void setClickListener(){
tvCourseName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvCourseName.setOnClickListener(v -> {
Intent intent = new Intent(CreateSign.this, ChooseCourse.class);
intent.putExtras(getIntent().getExtras());
intentActivityResultLauncher.launch(intent);
}
});
abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
abIvTitle.setOnClickListener(v -> finish());
//点击添加图片
ivAddImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ivAddImg.setOnClickListener(v -> {
String signCode = Objects.requireNonNull(etCode.getText()).toString();
if (TextUtils.isEmpty(signCode)){
Toast.makeText(CreateSign.this, "请先输入签到码", Toast.LENGTH_SHORT).show();
@ -189,86 +184,85 @@ public class CreateSign extends AppCompatActivity {
Bitmap codeBitmap = QRCodeUtil.createQRCode(signCode,500,500,null);
ivAddImg.setImageBitmap(codeBitmap);
}
}
});
//设置回调方法,进行获取选择的时间,并将其刷新到界面
startTimePicker.addOnPositiveButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startTimePicker.addOnPositiveButtonClickListener(v -> {
int startHour = startTimePicker.getHour();
int startMin = startTimePicker.getMinute();
String startTime = String.valueOf(currYear) + "-" +
String.valueOf(currMonth) + "-" +
String.valueOf(currDay) + " " +
String.valueOf(startHour) + ":" +
String.valueOf(startMin) + ":" + "00";
String startTime = currYear + "-" +
currMonth + "-" +
currDay + " " +
startHour + ":" +
startMin + ":" + "00";
try {
startTimeStamp = Long.parseLong(CommonUtils.dateToStamp(startTime, "yyyy-MM-dd hh:mm:ss"));
startTimeStamp = Long.parseLong(CommonUtils.dateToStamp(startTime, "yyyy-MM-dd HH:mm:ss"));
} catch (ParseException e) {
e.printStackTrace();
}
etStartTime.setText(startTime);
hasChooseStartTime = true;
}
});
endTimePicker.addOnPositiveButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
endTimePicker.addOnPositiveButtonClickListener(v -> {
int endHour = endTimePicker.getHour();
int endMin = endTimePicker.getMinute();
String endTime = String.valueOf(currYear) + "-" +
String.valueOf(currMonth) + "-" +
String.valueOf(currDay) + " " +
String.valueOf(endHour) + ":" +
String.valueOf(endMin) + ":" + "00";
String endTime = currYear + "-" +
currMonth + "-" +
currDay + " " +
endHour + ":" +
endMin + ":" + "00";
try {
endTimeStamp = Long.parseLong(CommonUtils.dateToStamp(endTime, "yyyy-MM-dd hh:mm:ss"));
endTimeStamp = Long.parseLong(CommonUtils.dateToStamp(endTime, "yyyy-MM-dd HH:mm:ss"));
} catch (ParseException e) {
e.printStackTrace();
}
etEndTime.setText(endTime);
hasChooseEndTime = true;
}
});
//课程开始时间
etStartTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etStartTime.setOnClickListener(v -> {
if(!startTimePicker.isAdded()){
startTimePicker.show(getSupportFragmentManager(), "Hello");
}
}
});
//课程结束时间
etEndTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etEndTime.setOnClickListener(v -> {
if(!endTimePicker.isAdded()){
endTimePicker.show(getSupportFragmentManager(), "Hello");
}
}
});
//定位
etLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etLocation.setOnClickListener(v -> {
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);
// etLocation.setText("定位");
} 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() {
@Override
public void onClick(View v) {
abBtSave.setOnClickListener(v -> {
bundle = getIntent().getExtras();
String courseName = bundle.getString(ModelFieldConstants.COURSE_NAME);
String stuAmountStr = Objects.requireNonNull(etStuAmount.getText()).toString();
String location = Objects.requireNonNull(etLocation.getText()).toString();
String signCodeStr = Objects.requireNonNull(etCode.getText()).toString();
Long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID);
long courseId = bundle.getLong(ModelFieldConstants.COURSE_ID);
Long userId = bundle.getLong(ModelFieldConstants.ID);
if(!TextUtils.isEmpty(courseName)){
if(!TextUtils.isEmpty(stuAmountStr)){
@ -289,9 +283,7 @@ public class CreateSign extends AppCompatActivity {
courseCreateSignRequest.setCourseId(courseId);
courseCreateSignRequest.setUserId(userId);
courseCreateSignRequest.setSignCode(signCode);
handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
handler = new Handler(msg -> {
if(msg.arg1 == 200){
String error = (String) msg.obj;
Toast.makeText(CreateSign.this, error, Toast.LENGTH_SHORT).show();
@ -302,12 +294,12 @@ public class CreateSign extends AppCompatActivity {
bundle = getIntent().getExtras();
bundle.putLong(ModelFieldConstants.NOW_SIGN_COURSE_ID, courseId);
bundle.putString(ModelFieldConstants.NOW_SIGN_COURSE_NAME, courseName);
bundle.putSerializable(ModelFieldConstants.COURSE_CREATE_SIGN_REQUEST , courseCreateSignRequest);
intent.putExtras(bundle);
setResult(100,intent);
finish();
}
return false;
}
});
createSign(courseCreateSignRequest);
}catch (NumberFormatException numberFormatException){
@ -334,15 +326,16 @@ public class CreateSign extends AppCompatActivity {
}else{
Toast.makeText(CreateSign.this, "请先选择课程", Toast.LENGTH_SHORT).show();
}
}
});
}
/**
*
* @param courseCreateSignRequest
*/
private void createSign(CourseCreateSignRequest courseCreateSignRequest){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
System.out.println( "courseCreateSignRequest : " + courseCreateSignRequest.toString() + "..............................");
String json = JSON.toJSONString(courseCreateSignRequest);
String url = UrlConstants.TEACHER_INITIATE;
@ -362,7 +355,6 @@ public class CreateSign extends AppCompatActivity {
handler.sendMessage(message);
}
}.postConnect(url, json);
}
}).start();
}
}

@ -9,7 +9,6 @@ import android.os.Looper;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
@ -81,7 +80,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{
tiNewMsg.setText("");
}
if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break;
}
case ModelFieldConstants.COLLEGE_NAME : {
@ -92,7 +93,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{
tiNewMsg.setText("");
}
if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break;
}
case ModelFieldConstants.REAL_NAME : {
@ -103,7 +106,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{
tiNewMsg.setText("");
}
if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break;
}
case ModelFieldConstants.ID_NUMBER : {
@ -118,7 +123,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{
tiNewMsg.setText("");
}
if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break;
}
case ModelFieldConstants.GENDER : {
@ -138,36 +145,24 @@ public class ModifyUserInfo extends AppCompatActivity {
tiNewMsg.setKeyListener(null);
tiNewMsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tiNewMsg.setOnClickListener(v -> {
System.out.println("choose gender............");
String[] singleItems = {"男", "女"};
int checkedItem = "男".equals(tiNewMsg.getText().toString()) ? 0 : 1;
int checkedItem = 0;
if(tiNewMsg.getText() != null){
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) {
.setNeutralButton(getString(R.string.cancel), (dialog, which) -> {
}
})
.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tiNewMsg.setText(singleItems[bundle.getInt("checkedItem")]);
}
})
.setSingleChoiceItems(singleItems, checkedItem, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
bundle.putInt("checkedItem", which);
}
});
.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;
}
@ -179,7 +174,9 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{
tiNewMsg.setText("");
}
if (tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break;
}
case ModelFieldConstants.PHONE : {
@ -190,11 +187,14 @@ public class ModifyUserInfo extends AppCompatActivity {
}else{
tiNewMsg.setText("");
}
if(tiNewMsg.getText() != null){
tiNewMsg.setSelection(tiNewMsg.getText().length());
}
break;
}
default:{
tiNewMsg.setText("error.....");
String errorText = "error.....";
tiNewMsg.setText(errorText);
}
}
}
@ -204,12 +204,7 @@ public class ModifyUserInfo extends AppCompatActivity {
*/
private void setListener(){
//返回上一个活动,也就是个人信息部分
abIvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
abIvTitle.setOnClickListener(v -> finish());
tiNewMsg.addTextChangedListener(new TextWatcher() {
@Override
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.setTextColor(Color.WHITE);
//为按钮添加点击事件
abBtSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog();
}
});
abBtSave.setOnClickListener(v -> dialog());
}
@Override
@ -244,6 +234,7 @@ public class ModifyUserInfo extends AppCompatActivity {
*/
private void dialog(){
//添加取消
AlertDialog alertDialog2 = new AlertDialog.Builder(this)
.setMessage("请确认是否进行" + abTvTitle.getText())
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@ -259,10 +250,7 @@ public class ModifyUserInfo extends AppCompatActivity {
};
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
.setNegativeButton("取消", (dialogInterface, i) -> {
})
.create();
alertDialog2.show();
@ -272,11 +260,9 @@ public class ModifyUserInfo extends AppCompatActivity {
*
*/
private void modifyInfo(){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
JSONObject jsonObject = new JSONObject();
Boolean isLegalInput = false;
boolean isLegalInput = false;
try {
jsonObject.put(ModelFieldConstants.ID, (Long) bundle.get(ModelFieldConstants.ID));
} catch (JSONException e) {
@ -320,7 +306,7 @@ public class ModifyUserInfo extends AppCompatActivity {
try {
String msg = Objects.requireNonNull(tiNewMsg.getText()).toString();
//判断输入电话号码是否能解析为long型能解析的话说明输入没有非法字符
Long msgLong = Long.parseLong(msg);
// Long msgLong = Long.parseLong(msg);
jsonObject.put(modifyField, msg);
bundle.putString(modifyField, msg);
isLegalInput = true;
@ -375,7 +361,7 @@ public class ModifyUserInfo extends AppCompatActivity {
}
}
}
System.out.println( "jsonObject : " + jsonObject.toString() + "..............................");
System.out.println( "jsonObject : " + jsonObject + "..............................");
String json = jsonObject.toString();
String url = UrlConstants.USER_UPDATE;
@ -396,7 +382,6 @@ public class ModifyUserInfo extends AppCompatActivity {
}
}.postConnect(url, json);
}
}
}).start();
}
}

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

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

@ -2,7 +2,6 @@ package com.example.stlink.activitys.fragmentChild.activityUserInfo;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
@ -38,30 +37,16 @@ public class UserInfoSetting extends AppCompatActivity {
}
private void setClickListener(){
btExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// finish();//这个只是从方法栈中移除了当前活动
// System.exit(0); //同上
CommonUtils.exitApp(UserInfoSetting.this);
}
});
btExit.setOnClickListener(v ->
CommonUtils.exitApp(UserInfoSetting.this));
btLoginOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btLoginOut.setOnClickListener(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() {
@Override
public void onClick(View v) {
finish();
}
});
abIvTitle.setOnClickListener(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);
}
@NonNull
@Override
public String toString() {
return "ViewHolder{" +

@ -119,6 +119,7 @@ public class StuAddCourseAdapter extends RecyclerView.Adapter<StuAddCourseAdapte
holder.ivRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//添加取消
AlertDialog alertDialog2 = new AlertDialog.Builder(mContext)
.setMessage("确认加入课程")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@ -141,10 +142,7 @@ public class StuAddCourseAdapter extends RecyclerView.Adapter<StuAddCourseAdapte
};
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) { }
})
.setNegativeButton("取消", (dialogInterface, i) -> { })
.create();
alertDialog2.show();
}
@ -155,9 +153,7 @@ public class StuAddCourseAdapter extends RecyclerView.Adapter<StuAddCourseAdapte
*
*/
private void deleteCourse(int position){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
AppCompatActivity appCompatActivity = (AppCompatActivity) mContext;
Bundle bundle = appCompatActivity.getIntent().getExtras();
Long courseId = mCourseData.get(position).getmCourseId();
@ -183,7 +179,6 @@ public class StuAddCourseAdapter extends RecyclerView.Adapter<StuAddCourseAdapte
handler.sendMessage(message);
}
}.postConnect(url, "");
}
}).start();
}
}

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

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

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

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

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

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

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

@ -9,7 +9,6 @@ import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
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.data.CourseData;
import com.example.stlink.utils.httpUtils.GetUrlParamHttpUtils;
import com.google.android.material.badge.BadgeDrawable;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.internal.LinkedTreeMap;
@ -47,6 +47,8 @@ public class StuClassListFragment extends Fragment {
private static AppCompatActivity mAppCompatActivity;
private static SwipeRefreshLayout srlMyRefresh;
private static BadgeDrawable mBadge;
private int currentPage = 1;
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;
mBadge = orCreateBadge;
StuClassListFragment frag = new StuClassListFragment();
return frag;
}
@ -82,6 +85,7 @@ public class StuClassListFragment extends Fragment {
@SuppressLint("NotifyDataSetChanged")
public static void refreshData(){
courseIdList = new ArrayList<>();
courseSigns = new ArrayList<>();
@ -99,10 +103,7 @@ public class StuClassListFragment extends Fragment {
getStuSelectedCourseList();
//只有在获取当前学生所选课程的所有id之后才能遍历
handler = new Handler(new Handler.Callback() {
@SuppressLint("NotifyDataSetChanged")
@Override
public boolean handleMessage(@NonNull Message msg) {
handler = new Handler(msg -> {
if(msg.arg1 == 100){
getToBeSignList();
setListener();
@ -111,7 +112,6 @@ public class StuClassListFragment extends Fragment {
System.out.println("StuClassListFragment:courseSigns = " + courseSigns.toString());
}
return false;
}
});
}
@ -136,12 +136,9 @@ public class StuClassListFragment extends Fragment {
}
});
srlMyRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
srlMyRefresh.setOnRefreshListener(() -> {
refreshData();
srlMyRefresh.setRefreshing(false);
}
});
}
@ -191,9 +188,7 @@ public class StuClassListFragment extends Fragment {
*
*/
private static void getToBeSignList(){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
for(Long courseId : courseIdList){
String urlParam = ModelFieldConstants.COURSE_ID + "=" + courseId + "&" +
ModelFieldConstants.USER_ID + "=" + bundle.getLong(ModelFieldConstants.ID) + "&" +
@ -219,10 +214,14 @@ public class StuClassListFragment extends Fragment {
for(CourseSign courseSign : courseData.getRecords()){
courseSign.setCourseId(courseId);
}
int total = courseData.getTotal();
//设置角标
mBadge.setVisible(true);
mBadge.setNumber(total);
System.out.println("StuClassListFragment:size = " + mBadge.getNumber() + ".....................");
System.out.println(mBadge.isVisible());
if(courseData.getRecords().size() != 0){
courseSigns.addAll(courseData.getRecords());
System.out.println("Here......................");
Message message = new Message();
message.arg1 = 200;
handler.sendMessage(message);
@ -233,7 +232,6 @@ public class StuClassListFragment extends Fragment {
public void failedMethod(BaseResponse<Object> baseResponse) { }
}.getConnect(url);
}
}
}).start();
}
}

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

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

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

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

@ -76,6 +76,8 @@ public class ModelFieldConstants {
public static final String COURSE_SIGN = "courseSign";
//地点
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 androidx.annotation.NonNull;
import java.util.Date;
public class User {
@ -160,6 +162,7 @@ public class User {
this.userName = userName;
}
@NonNull
@Override
public String toString() {
return "User{" +

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

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

@ -1,9 +1,13 @@
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;
}
@NonNull
@Override
public String toString() {
return "CourseCreateSignRequest{" +

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

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

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

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

@ -1,8 +1,7 @@
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;
public class CourseData <T> {
@ -47,6 +46,7 @@ public class CourseData <T> {
this.total = total;
}
@NonNull
@Override
public String toString() {
return "CourseData{" +

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

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

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

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

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

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

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

@ -15,9 +15,7 @@ public class CreateCourseUtil {
public static void createCourse(AppCompatActivity appCompatActivity, CourseCreateRequest courseCreateRequest, Handler handler, @Nullable String url) {
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
//fastJson将对象转换为JSON字符串
String json = JSON.toJSONString(courseCreateRequest);
@ -35,7 +33,6 @@ public class CreateCourseUtil {
handler .sendMessage(message);
}
}.postConnect(url, json);
}
}).start();
}

@ -1,6 +1,5 @@
package com.example.stlink.utils.activityUtil;
import android.graphics.ColorSpace;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@ -8,7 +7,6 @@ import android.text.TextUtils;
import androidx.annotation.Nullable;
//import com.example.stlink.config.adapter.ImageAdapter;
import com.example.stlink.model.constants.ModelFieldConstants;
import com.example.stlink.model.constants.UrlConstants;
import com.example.stlink.model.response.BaseResponse;
@ -34,11 +32,9 @@ public class ImgUploadUtil {
mBundle.getBoolean(UrlConstants.IS_IMG_UPLOAD_SUCCESS, false);
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
File file = null;
if (!TextUtils.isEmpty(path)) {
if (path != null && !TextUtils.isEmpty(path)) {
file = new File(path);
}
new PostFileHttpUtils() {
@ -62,7 +58,6 @@ public class ImgUploadUtil {
handler.sendMessage(message);
}
}.FileUpload(UrlConstants.FILE_UPLOAD, file);
}
}).start();
}

@ -117,9 +117,7 @@ public class LoginUtil {
*
*/
private void loginRequest(){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
// 密码要进行MD5加密
String url = UrlConstants.USER_LOGIN + "?password=" + CommonUtils.MD5(pwd) + "&username=" + userName;
@ -159,7 +157,6 @@ public class LoginUtil {
handler .sendMessage(message);
}
}.postConnect(url, "");
}
}).start();
}

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

@ -101,16 +101,14 @@ public class RegisterUtil {
*/
private void registerRequest(){
new Thread(new Runnable() {
@Override
public void run() {
new Thread(() -> {
UserRegisterRequest requestObj = new UserRegisterRequest();
//fastJson将对象转换为JSON字符串
requestObj.setUserName(userName);
//即将云端发送的密码要经过MD5加密也就是异或运算和MD5的双重加密
requestObj.setPassword(CommonUtils.MD5(pwd));
requestObj.setRoleId( (Integer) registerActivity.getIntent().getExtras().get(ModelFieldConstants.ROLE_ID));
System.out.println( "requestObj : " + requestObj.toString() + "..............................");
System.out.println( "requestObj : " + requestObj + "..............................");
String json = JSON.toJSONString(requestObj);
String url = UrlConstants.USER_REGISTER;
@ -131,7 +129,6 @@ public class RegisterUtil {
handler .sendMessage(message);
}
}.postConnect(url, json);
}
}).start();
}
}

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

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

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

@ -15,7 +15,6 @@ import java.lang.reflect.Type;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Credentials;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
@ -74,13 +73,14 @@ public abstract class PostBodyParamHttpUtils {
* @param e
*/
@Override
public void onFailure(Call call, IOException e) {
public void onFailure(@NonNull Call call, IOException e) {
//Log.e(TAG, "Failed to connect server!!!");
e.printStackTrace();
}
@Override
public void onResponse(@NonNull Call call, Response response) throws IOException {
assert response.body() != null;
final String body = response.body().string();
Gson gson = new Gson();
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:code = " + response.code());
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
*/
@Override
public void onFailure(Call call, IOException e) {
public void onFailure(@NonNull Call call, IOException e) {
Log.e("TAGTAG", "onFailure图片上传失败" + e.getMessage());
e.printStackTrace();
}
@Override
public void onResponse(@NonNull Call call, Response response) throws IOException {
assert response.body() != null;
final String body = response.body().string();
Log.e("TAGTAG", "onResponse图片上传成功" + body);
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
android:id="@+id/ll_course_info_msg"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
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_marginTop="10dp">
<LinearLayout
@ -150,6 +152,17 @@
</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
android:id="@+id/tv_sign_list"
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