Commit 19e49b3575d0c3e05d70ba23bbcf01a300be995a

Authored by shixianjie
1 parent dbb1f52deb
Exists in master

录入作业成功页面

app/src/main/java/com/hjx/parent/AddSuccessActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import android.content.Intent; 3 import android.content.Intent;
4 import android.graphics.Bitmap; 4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory; 5 import android.graphics.BitmapFactory;
6 import android.net.Uri; 6 import android.net.Uri;
7 import android.os.Bundle; 7 import android.os.Bundle;
8 import android.provider.MediaStore; 8 import android.provider.MediaStore;
9 import android.text.TextUtils; 9 import android.text.TextUtils;
10 import android.util.Log; 10 import android.util.Log;
11 import android.view.LayoutInflater; 11 import android.view.LayoutInflater;
12 import android.view.View; 12 import android.view.View;
13 13
14 import androidx.annotation.Nullable; 14 import androidx.annotation.Nullable;
15 import androidx.core.content.FileProvider; 15 import androidx.core.content.FileProvider;
16 16
17 import com.hjx.parent.databinding.ActivityAddSuccessBinding; 17 import com.hjx.parent.databinding.ActivityAddSuccessBinding;
18 import com.prws.common.utils.BitmapUtils; 18 import com.prws.common.utils.BitmapUtils;
19 import com.prws.common.utils.CommonUtil; 19 import com.prws.common.utils.CommonUtil;
20 import com.prws.common.utils.dialog.MyButtomDialog; 20 import com.prws.common.utils.dialog.MyButtomDialog;
21 import com.zhangteng.imagepicker.bean.ImageInfo; 21 import com.zhangteng.imagepicker.bean.ImageInfo;
22 import com.zhangteng.imagepicker.config.ImagePickerConfig; 22 import com.zhangteng.imagepicker.config.ImagePickerConfig;
23 import com.zhangteng.imagepicker.config.ImagePickerEnum; 23 import com.zhangteng.imagepicker.config.ImagePickerEnum;
24 import com.zhangteng.imagepicker.config.ImagePickerOpen; 24 import com.zhangteng.imagepicker.config.ImagePickerOpen;
25 import com.zhangteng.imagepicker.imageloader.GlideImageLoader; 25 import com.zhangteng.imagepicker.imageloader.GlideImageLoader;
26 import com.zhangteng.utils.IHandlerCallBack; 26 import com.zhangteng.utils.IHandlerCallBack;
27 27
28 import java.io.File; 28 import java.io.File;
29 import java.util.ArrayList; 29 import java.util.ArrayList;
30 import java.util.List; 30 import java.util.List;
31 31
32 public class AddSuccessActivity extends BaseActivity<ActivityAddSuccessBinding> { 32 public class AddSuccessActivity extends BaseActivity<ActivityAddSuccessBinding> {
33 private int REQUEST_CODE_IMAGE = 123; 33 private int REQUEST_CODE_IMAGE = 123;
34 private String filePath; 34 private String filePath;
35 35
36 private int type;
37 private String stuId;
38
36 @Override 39 @Override
37 public void initView(Bundle savedInstanceState) { 40 public void initView(Bundle savedInstanceState) {
41 type = getIntent().getIntExtra("type", 0);
42 stuId = getIntent().getStringExtra("stuId");
43 if (type == 1) {
44 binding.tvMsg.setText("作业录入成功!");
45 binding.tvAdd.setText("继续录入作业");
46 binding.tvBook.setText("查看作业详情");
47 }
48
38 binding.ivBack.setOnClickListener(new View.OnClickListener() { 49 binding.ivBack.setOnClickListener(new View.OnClickListener() {
39 @Override 50 @Override
40 public void onClick(View v) { 51 public void onClick(View v) {
41 finish(); 52 finish();
42 } 53 }
43 }); 54 });
44 binding.tvAdd.setOnClickListener(new View.OnClickListener() { 55 binding.tvAdd.setOnClickListener(new View.OnClickListener() {
45 @Override 56 @Override
46 public void onClick(View v) { 57 public void onClick(View v) {
47 MyButtomDialog dialog = new MyButtomDialog(context, R.style.BottomSheetDialog); 58 MyButtomDialog dialog = new MyButtomDialog(context, R.style.BottomSheetDialog);
48 View bottomView = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_layout, null); 59 View bottomView = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_layout, null);
49 dialog.setContentView(bottomView); 60 dialog.setContentView(bottomView);
50 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() { 61 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
51 @Override 62 @Override
52 public void onClick(View view) { 63 public void onClick(View view) {
53 dialog.dismiss(); 64 dialog.dismiss();
54 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 65 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
55 //确保有相机来处理Intent 66 //确保有相机来处理Intent
56 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 67 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
57 File photoFile = new File(filePath); 68 File photoFile = new File(filePath);
58 if (photoFile != null) { 69 if (photoFile != null) {
59 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri 70 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
60 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile); 71 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
61 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 72 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
62 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 73 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
63 activity.startActivityForResult(takePictureIntent, REQUEST_CODE_IMAGE); 74 activity.startActivityForResult(takePictureIntent, REQUEST_CODE_IMAGE);
64 } 75 }
65 } 76 }
66 }); 77 });
67 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() { 78 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
68 @Override 79 @Override
69 public void onClick(View view) { 80 public void onClick(View view) {
70 dialog.dismiss(); 81 dialog.dismiss();
71 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器 82 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器
72 .iHandlerCallBack(new HandlerCallBack()) //图片选择器生命周期监听(直接打开摄像头时无效) 83 .iHandlerCallBack(new HandlerCallBack()) //图片选择器生命周期监听(直接打开摄像头时无效)
73 .multiSelect(true) //是否多选 84 .multiSelect(true) //是否多选
74 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false 85 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false
75 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型 86 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型
76 .maxImageSelectable(5) //图片可选择数 87 .maxImageSelectable(5) //图片可选择数
77 .maxHeight(1920) //图片最大高度 88 .maxHeight(1920) //图片最大高度
78 .maxWidth(1920) //图片最大宽度 89 .maxWidth(1920) //图片最大宽度
79 .maxImageSize(3) //图片最大大小Mb 90 .maxImageSize(3) //图片最大大小Mb
80 .isCrop(false).pathList(new ArrayList<>()).pickerThemeColorRes(R.color.image_picker_white).pickerTitleColorRes(R.color.image_picker_text_black).cropThemeColorRes(R.color.image_picker_white).cropTitleColorRes(R.color.image_picker_text_black).pickerBackRes(R.mipmap.image_picker_back_black).pickerFolderRes(R.mipmap.image_picker_folder_black).build(); 91 .isCrop(false).pathList(new ArrayList<>()).pickerThemeColorRes(R.color.image_picker_white).pickerTitleColorRes(R.color.image_picker_text_black).cropThemeColorRes(R.color.image_picker_white).cropTitleColorRes(R.color.image_picker_text_black).pickerBackRes(R.mipmap.image_picker_back_black).pickerFolderRes(R.mipmap.image_picker_folder_black).build();
81 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(AddSuccessActivity.this); 92 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(AddSuccessActivity.this);
82 93
83 } 94 }
84 }); 95 });
85 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { 96 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
86 @Override 97 @Override
87 public void onClick(View view) { 98 public void onClick(View view) {
88 dialog.dismiss(); 99 dialog.dismiss();
89 } 100 }
90 }); 101 });
91 dialog.show(); 102 dialog.show();
92 } 103 }
93 }); 104 });
94 binding.tvBook.setOnClickListener(new View.OnClickListener() { 105 binding.tvBook.setOnClickListener(new View.OnClickListener() {
95 @Override 106 @Override
96 public void onClick(View v) { 107 public void onClick(View v) {
97 startActivity(new Intent(context, ErrorListActivity.class)); 108 if (type == 0) {
109 startActivity(new Intent(context, ErrorListActivity.class));
110 } else {
111 // TODO
112 }
98 } 113 }
99 }); 114 });
100 } 115 }
101 116
102 @Override 117 @Override
103 protected ActivityAddSuccessBinding getViewBinding() { 118 protected ActivityAddSuccessBinding getViewBinding() {
104 return ActivityAddSuccessBinding.inflate(getLayoutInflater()); 119 return ActivityAddSuccessBinding.inflate(getLayoutInflater());
105 } 120 }
106 121
107 @Override 122 @Override
108 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 123 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
109 super.onActivityResult(requestCode, resultCode, data); 124 super.onActivityResult(requestCode, resultCode, data);
110 if (requestCode == REQUEST_CODE_IMAGE && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) { 125 if (requestCode == REQUEST_CODE_IMAGE && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
111 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); 126 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
112 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 127 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
113 CommonUtil.saveBitmapToUri(b, path); 128 CommonUtil.saveBitmapToUri(b, path);
114 List<String> strings = new ArrayList<>(); 129 List<String> strings = new ArrayList<>();
115 Intent intent = new Intent(context, ImageActivity.class); 130 Intent intent = new Intent(context, ImageActivity.class);
131 intent.putExtra("type", type);
116 strings.add(path); 132 strings.add(path);
117 intent.putStringArrayListExtra("images", (ArrayList<String>) strings); 133 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
118 startActivity(intent); 134 startActivity(intent);
119 finish(); 135 finish();
120 } 136 }
121 } 137 }
122 138
123 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> { 139 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> {
124 private String TAG = "---ImagePicker---"; 140 private String TAG = "---ImagePicker---";
125 List<ImageInfo> photoList = new ArrayList<>(); 141 List<ImageInfo> photoList = new ArrayList<>();
126 142
127 @Override 143 @Override
128 public void onStart() { 144 public void onStart() {
129 Log.i(TAG, "onStart: 开启"); 145 Log.i(TAG, "onStart: 开启");
130 } 146 }
131 147
132 @Override 148 @Override
133 public void onSuccess(List<ImageInfo> photoList) { 149 public void onSuccess(List<ImageInfo> photoList) {
134 this.photoList = photoList; 150 this.photoList = photoList;
135 Log.i(TAG, "onSuccess: 返回数据"); 151 Log.i(TAG, "onSuccess: 返回数据");
136 } 152 }
137 153
138 @Override 154 @Override
139 public void onCancel() { 155 public void onCancel() {
140 Log.i(TAG, "onCancel: 取消"); 156 Log.i(TAG, "onCancel: 取消");
141 } 157 }
142 158
143 @Override 159 @Override
144 public void onFinish(List<ImageInfo> selectImage) { 160 public void onFinish(List<ImageInfo> selectImage) {
145 if (selectImage.size() == photoList.size()) { 161 if (selectImage.size() == photoList.size()) {
146 List<String> strings = new ArrayList<>(); 162 List<String> strings = new ArrayList<>();
147 Intent intent = new Intent(context, ImageActivity.class); 163 Intent intent = new Intent(context, ImageActivity.class);
164 intent.putExtra("type", type);
148 for (ImageInfo imageInfo : selectImage) { 165 for (ImageInfo imageInfo : selectImage) {
149 strings.add(imageInfo.getPath()); 166 strings.add(imageInfo.getPath());
150 } 167 }
151 intent.putStringArrayListExtra("images", (ArrayList<String>) strings); 168 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
152 startActivity(intent); 169 startActivity(intent);
153 finish(); 170 finish();
154 } 171 }
155 } 172 }
156 173
157 @Override 174 @Override
158 public void onError() { 175 public void onError() {
159 Log.i(TAG, "onError: 出错"); 176 Log.i(TAG, "onError: 出错");
160 } 177 }
161 } 178 }
162 } 179 }
163 180
app/src/main/java/com/hjx/parent/ImageActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import android.annotation.SuppressLint; 3 import android.annotation.SuppressLint;
4 import android.app.Dialog; 4 import android.app.Dialog;
5 import android.content.Intent; 5 import android.content.Intent;
6 import android.graphics.Bitmap; 6 import android.graphics.Bitmap;
7 import android.graphics.BitmapFactory; 7 import android.graphics.BitmapFactory;
8 import android.graphics.Rect; 8 import android.graphics.Rect;
9 import android.net.Uri; 9 import android.net.Uri;
10 import android.os.Bundle; 10 import android.os.Bundle;
11 import android.os.Handler; 11 import android.os.Handler;
12 import android.provider.MediaStore; 12 import android.provider.MediaStore;
13 import android.text.TextUtils; 13 import android.text.TextUtils;
14 import android.util.Log; 14 import android.util.Log;
15 import android.view.KeyEvent; 15 import android.view.KeyEvent;
16 import android.view.View; 16 import android.view.View;
17 17
18 18
19 import androidx.annotation.Nullable; 19 import androidx.annotation.Nullable;
20 import androidx.core.content.FileProvider; 20 import androidx.core.content.FileProvider;
21 import androidx.viewpager2.widget.ViewPager2; 21 import androidx.viewpager2.widget.ViewPager2;
22 22
23 import com.google.gson.Gson; 23 import com.google.gson.Gson;
24 import com.google.gson.JsonObject; 24 import com.google.gson.JsonObject;
25 import com.hjx.parent.adapter.ImageAdapter; 25 import com.hjx.parent.adapter.ImageAdapter;
26 import com.hjx.parent.databinding.ActivityImageBinding; 26 import com.hjx.parent.databinding.ActivityImageBinding;
27 import com.hjx.parent.dialog.AddHomeworkDialog; 27 import com.hjx.parent.dialog.AddHomeworkDialog;
28 import com.hjx.parent.dialog.ErrorInputDialog; 28 import com.hjx.parent.dialog.ErrorInputDialog;
29 import com.hjx.parent.dialog.TipDialog; 29 import com.hjx.parent.dialog.TipDialog;
30 import com.hjx.parent.rx.BaseRxActivity; 30 import com.hjx.parent.rx.BaseRxActivity;
31 import com.prws.common.bean.CutPicBean; 31 import com.prws.common.bean.CutPicBean;
32 import com.prws.common.bean.ImageBean; 32 import com.prws.common.bean.ImageBean;
33 import com.prws.common.bean.TopicBean; 33 import com.prws.common.bean.TopicBean;
34 import com.prws.common.net.NetWorks; 34 import com.prws.common.net.NetWorks;
35 import com.prws.common.utils.BitmapUtils; 35 import com.prws.common.utils.BitmapUtils;
36 import com.prws.common.utils.CommonUtil; 36 import com.prws.common.utils.CommonUtil;
37 import com.xiasuhuei321.loadingdialog.view.LoadingDialog; 37 import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
38 38
39 import java.io.File; 39 import java.io.File;
40 import java.util.ArrayList; 40 import java.util.ArrayList;
41 import java.util.List; 41 import java.util.List;
42 42
43 import io.reactivex.Observer; 43 import io.reactivex.Observer;
44 import io.reactivex.disposables.Disposable; 44 import io.reactivex.disposables.Disposable;
45 import retrofit2.Call; 45 import retrofit2.Call;
46 import retrofit2.Callback; 46 import retrofit2.Callback;
47 import retrofit2.Response; 47 import retrofit2.Response;
48 48
49 public class ImageActivity extends BaseRxActivity<ActivityImageBinding> implements View.OnClickListener { 49 public class ImageActivity extends BaseRxActivity<ActivityImageBinding> implements View.OnClickListener {
50 50
51 private List<String> images = new ArrayList<>(); 51 private List<String> images = new ArrayList<>();
52 private ImageAdapter imageAdapter; 52 private ImageAdapter imageAdapter;
53 private List<ImageBean> list = new ArrayList<>(); 53 private List<ImageBean> list = new ArrayList<>();
54 private String filePath; 54 private String filePath;
55 55
56 private int type = 0; 56 private int type = 0;
57 private AddHomeworkDialog addHomeworkDialog; 57 private AddHomeworkDialog addHomeworkDialog;
58 58
59 @Override 59 @Override
60 public void initView(Bundle savedInstanceState) { 60 public void initView(Bundle savedInstanceState) {
61 type = getIntent().getIntExtra("type", 0); 61 type = getIntent().getIntExtra("type", 0);
62 binding.tvSave.setText(type == 0 ? "保存错题" : "录入题目"); 62 binding.tvSave.setText(type == 0 ? "保存错题" : "录入题目");
63 63
64 images = getIntent().getStringArrayListExtra("images"); 64 images = getIntent().getStringArrayListExtra("images");
65 for (String s : images) { 65 for (String s : images) {
66 String filepath = context.getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg"; 66 String filepath = context.getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg";
67 ImageBean imageBean = new ImageBean(); 67 ImageBean imageBean = new ImageBean();
68 Bitmap bitmap = BitmapUtils.getimage(s); 68 Bitmap bitmap = BitmapUtils.getimage(s);
69 CommonUtil.saveBitmapToUri(bitmap, filepath); 69 CommonUtil.saveBitmapToUri(bitmap, filepath);
70 imageBean.setPath(filepath); 70 imageBean.setPath(filepath);
71 list.add(imageBean); 71 list.add(imageBean);
72 } 72 }
73 imageAdapter = new ImageAdapter(this, list); 73 imageAdapter = new ImageAdapter(this, list);
74 binding.viewPager.setAdapter(imageAdapter); 74 binding.viewPager.setAdapter(imageAdapter);
75 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { 75 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
76 @Override 76 @Override
77 public void onPageSelected(int position) { 77 public void onPageSelected(int position) {
78 if (list.get(position).getCuts() == null) { 78 if (list.get(position).getCuts() == null) {
79 // binding.ivPrevious.setEnabled(false); 79 // binding.ivPrevious.setEnabled(false);
80 // binding.ivNext.setEnabled(false); 80 // binding.ivNext.setEnabled(false);
81 clearText(); 81 clearText();
82 } 82 }
83 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 83 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
84 if (position == 0) { 84 if (position == 0) {
85 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray); 85 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray);
86 // binding.ivPrevious.setEnabled(true); 86 // binding.ivPrevious.setEnabled(true);
87 } else { 87 } else {
88 binding.ivPrevious.setImageResource(R.mipmap.ic_previous); 88 binding.ivPrevious.setImageResource(R.mipmap.ic_previous);
89 // binding.ivPrevious.setEnabled(false); 89 // binding.ivPrevious.setEnabled(false);
90 } 90 }
91 if (position == list.size() - 1) { 91 if (position == list.size() - 1) {
92 binding.ivNext.setImageResource(R.mipmap.ic_next_gray); 92 binding.ivNext.setImageResource(R.mipmap.ic_next_gray);
93 // binding.ivNext.setEnabled(true); 93 // binding.ivNext.setEnabled(true);
94 } else { 94 } else {
95 binding.ivNext.setImageResource(R.mipmap.ic_next); 95 binding.ivNext.setImageResource(R.mipmap.ic_next);
96 // binding.ivNext.setEnabled(false); 96 // binding.ivNext.setEnabled(false);
97 } 97 }
98 super.onPageSelected(position); 98 super.onPageSelected(position);
99 } 99 }
100 }); 100 });
101 binding.ivNext.setOnClickListener(this); 101 binding.ivNext.setOnClickListener(this);
102 binding.ivPrevious.setOnClickListener(this); 102 binding.ivPrevious.setOnClickListener(this);
103 binding.ivBack.setOnClickListener(this); 103 binding.ivBack.setOnClickListener(this);
104 binding.tvPhoto.setOnClickListener(this); 104 binding.tvPhoto.setOnClickListener(this);
105 binding.tvAdd.setOnClickListener(this); 105 binding.tvAdd.setOnClickListener(this);
106 binding.llEdit.setOnClickListener(this); 106 binding.llEdit.setOnClickListener(this);
107 binding.tvSave.setOnClickListener(this); 107 binding.tvSave.setOnClickListener(this);
108 } 108 }
109 109
110 public void clearText() { 110 public void clearText() {
111 int index = binding.viewPager.getCurrentItem(); 111 int index = binding.viewPager.getCurrentItem();
112 showLoadingDialog(getString(R.string.loading_text), new LoadingDialog.DismissListener() { 112 showLoadingDialog(getString(R.string.loading_text), new LoadingDialog.DismissListener() {
113 @Override 113 @Override
114 public void dimiss() { 114 public void dimiss() {
115 // binding.ivPrevious.setEnabled(index != 0); 115 // binding.ivPrevious.setEnabled(index != 0);
116 // binding.ivNext.setEnabled(index != list.size() - 1); 116 // binding.ivNext.setEnabled(index != list.size() - 1);
117 } 117 }
118 }); 118 });
119 Log.i("clearText", list.get(index).getPath()); 119 Log.i("clearText", list.get(index).getPath());
120 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath()); 120 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath());
121 NetWorks.removeWriting(base64, new Observer<JsonObject>() { 121 NetWorks.removeWriting(base64, new Observer<JsonObject>() {
122 @Override 122 @Override
123 public void onSubscribe(Disposable d) { 123 public void onSubscribe(Disposable d) {
124 124
125 } 125 }
126 126
127 @Override 127 @Override
128 public void onNext(JsonObject jsonObject) { 128 public void onNext(JsonObject jsonObject) {
129 if (jsonObject != null && jsonObject.get("image_processed") != null) { 129 if (jsonObject != null && jsonObject.get("image_processed") != null) {
130 String image = jsonObject.get("image_processed").getAsString(); 130 String image = jsonObject.get("image_processed").getAsString();
131 if (image != null) { 131 if (image != null) {
132 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 132 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
133 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath); 133 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath);
134 list.get(index).setPath(filepath); 134 list.get(index).setPath(filepath);
135 imageAdapter.notifyItemChanged(index); 135 imageAdapter.notifyItemChanged(index);
136 cut(filepath); 136 cut(filepath);
137 } else { 137 } else {
138 loadFail("去除字迹失败"); 138 loadFail("去除字迹失败");
139 } 139 }
140 } else { 140 } else {
141 loadFail("去除字迹失败"); 141 loadFail("去除字迹失败");
142 } 142 }
143 } 143 }
144 144
145 @Override 145 @Override
146 public void onError(Throwable e) { 146 public void onError(Throwable e) {
147 loadFail("去除字迹失败"); 147 loadFail("去除字迹失败");
148 } 148 }
149 149
150 @Override 150 @Override
151 public void onComplete() { 151 public void onComplete() {
152 152
153 } 153 }
154 }); 154 });
155 } 155 }
156 156
157 public void cut(String path) { 157 public void cut(String path) {
158 String base64 = BitmapUtils.imageToBase64(path); 158 String base64 = BitmapUtils.imageToBase64(path);
159 Log.i("figLoaction", path); 159 Log.i("figLoaction", path);
160 NetWorks.cut(base64, new Observer<CutPicBean>() { 160 NetWorks.cut(base64, new Observer<CutPicBean>() {
161 @Override 161 @Override
162 public void onSubscribe(Disposable d) { 162 public void onSubscribe(Disposable d) {
163 163
164 } 164 }
165 165
166 @Override 166 @Override
167 public void onNext(CutPicBean cutPicBean) { 167 public void onNext(CutPicBean cutPicBean) {
168 if (cutPicBean != null) { 168 if (cutPicBean != null) {
169 if (cutPicBean.getDirection() != 0) { 169 if (cutPicBean.getDirection() != 0) {
170 rotatingImage(cutPicBean); 170 rotatingImage(cutPicBean);
171 } else { 171 } else {
172 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 172 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
173 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 173 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
174 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 174 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
175 figLoactions.add(cutLocation.getFig_location()); 175 figLoactions.add(cutLocation.getFig_location());
176 } 176 }
177 new Handler().postDelayed(new Runnable() { 177 new Handler().postDelayed(new Runnable() {
178 @Override 178 @Override
179 public void run() { 179 public void run() {
180 getRects(figLoactions); 180 getRects(figLoactions);
181 } 181 }
182 }, 1000); 182 }, 1000);
183 } else { 183 } else {
184 cancelLoadingDialog(); 184 cancelLoadingDialog();
185 } 185 }
186 } 186 }
187 } else { 187 } else {
188 loadFail("自动切题失败"); 188 loadFail("自动切题失败");
189 } 189 }
190 } 190 }
191 191
192 @Override 192 @Override
193 public void onError(Throwable e) { 193 public void onError(Throwable e) {
194 loadFail("自动切题失败"); 194 loadFail("自动切题失败");
195 } 195 }
196 196
197 @Override 197 @Override
198 public void onComplete() { 198 public void onComplete() {
199 199
200 } 200 }
201 }); 201 });
202 } 202 }
203 203
204 private void getRects(List<CutPicBean.FigLoaction> figLoactions) { 204 private void getRects(List<CutPicBean.FigLoaction> figLoactions) {
205 Log.i("figLoaction", new Gson().toJson(figLoactions)); 205 Log.i("figLoaction", new Gson().toJson(figLoactions));
206 int index = binding.viewPager.getCurrentItem(); 206 int index = binding.viewPager.getCurrentItem();
207 List<ImageBean.Cut> cuts = new ArrayList<>(); 207 List<ImageBean.Cut> cuts = new ArrayList<>();
208 for (CutPicBean.FigLoaction figLoaction : figLoactions) { 208 for (CutPicBean.FigLoaction figLoaction : figLoactions) {
209 ImageBean.Cut cut = new ImageBean.Cut(); 209 ImageBean.Cut cut = new ImageBean.Cut();
210 cut.setRect(figLoaction); 210 cut.setRect(figLoaction);
211 cut.setSelect(false); 211 cut.setSelect(false);
212 cuts.add(cut); 212 cuts.add(cut);
213 } 213 }
214 list.get(index).setCuts(cuts); 214 list.get(index).setCuts(cuts);
215 imageAdapter.notifyItemChanged(index); 215 imageAdapter.notifyItemChanged(index);
216 cancelLoadingDialog(); 216 cancelLoadingDialog();
217 } 217 }
218 218
219 private void rotatingImage(CutPicBean cutPicBean) { 219 private void rotatingImage(CutPicBean cutPicBean) {
220 int index = binding.viewPager.getCurrentItem(); 220 int index = binding.viewPager.getCurrentItem();
221 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath()); 221 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath());
222 int angle = 0; 222 int angle = 0;
223 switch (cutPicBean.getDirection()) { 223 switch (cutPicBean.getDirection()) {
224 case 1: 224 case 1:
225 angle = 90; 225 angle = 90;
226 break; 226 break;
227 case 2: 227 case 2:
228 angle = 180; 228 angle = 180;
229 break; 229 break;
230 case 3: 230 case 3:
231 angle = 270; 231 angle = 270;
232 break; 232 break;
233 } 233 }
234 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 234 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
235 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 235 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
236 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 236 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
237 figLoactions.add(cutLocation.getFig_location()); 237 figLoactions.add(cutLocation.getFig_location());
238 } 238 }
239 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight()); 239 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight());
240 bitmap = CommonUtil.rotaingImageView(angle, bitmap); 240 bitmap = CommonUtil.rotaingImageView(angle, bitmap);
241 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 241 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
242 CommonUtil.saveBitmapToUri(bitmap, filepath); 242 CommonUtil.saveBitmapToUri(bitmap, filepath);
243 list.get(index).setPath(filepath); 243 list.get(index).setPath(filepath);
244 imageAdapter.notifyItemChanged(index); 244 imageAdapter.notifyItemChanged(index);
245 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions; 245 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions;
246 new Handler().postDelayed(new Runnable() { 246 new Handler().postDelayed(new Runnable() {
247 @Override 247 @Override
248 public void run() { 248 public void run() {
249 getRects(finalFigLoactions); 249 getRects(finalFigLoactions);
250 } 250 }
251 }, 500); 251 }, 500);
252 } else { 252 } else {
253 cancelLoadingDialog(); 253 cancelLoadingDialog();
254 } 254 }
255 } 255 }
256 256
257 @Override 257 @Override
258 protected ActivityImageBinding getViewBinding() { 258 protected ActivityImageBinding getViewBinding() {
259 return ActivityImageBinding.inflate(getLayoutInflater()); 259 return ActivityImageBinding.inflate(getLayoutInflater());
260 } 260 }
261 261
262 @SuppressLint("SetTextI18n") 262 @SuppressLint("SetTextI18n")
263 public void refreshNum() { 263 public void refreshNum() {
264 int num = 0; 264 int num = 0;
265 for (ImageBean imageBean : list) { 265 for (ImageBean imageBean : list) {
266 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 266 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
267 for (ImageBean.Cut cut : imageBean.getCuts()) { 267 for (ImageBean.Cut cut : imageBean.getCuts()) {
268 if (cut.isSelect()) { 268 if (cut.isSelect()) {
269 num++; 269 num++;
270 } 270 }
271 } 271 }
272 } 272 }
273 } 273 }
274 String btnText = type == 0 ? "保存错题" : "录入题目"; 274 String btnText = type == 0 ? "保存错题" : "录入题目";
275 if (num > 0) { 275 if (num > 0) {
276 binding.tvSave.setEnabled(true); 276 binding.tvSave.setEnabled(true);
277 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5); 277 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5);
278 binding.tvSave.setText(btnText + "(" + num + ")"); 278 binding.tvSave.setText(btnText + "(" + num + ")");
279 } else { 279 } else {
280 binding.tvSave.setEnabled(false); 280 binding.tvSave.setEnabled(false);
281 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5); 281 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5);
282 binding.tvSave.setText(btnText); 282 binding.tvSave.setText(btnText);
283 } 283 }
284 } 284 }
285 285
286 @Override 286 @Override
287 public void onClick(View v) { 287 public void onClick(View v) {
288 switch (v.getId()) { 288 switch (v.getId()) {
289 case R.id.iv_back: 289 case R.id.iv_back:
290 back(); 290 back();
291 break; 291 break;
292 case R.id.iv_next: 292 case R.id.iv_next:
293 if (binding.viewPager.getCurrentItem() + 1 < list.size()) { 293 if (binding.viewPager.getCurrentItem() + 1 < list.size()) {
294 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1); 294 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1);
295 } 295 }
296 break; 296 break;
297 case R.id.iv_previous: 297 case R.id.iv_previous:
298 if (binding.viewPager.getCurrentItem() != 0) { 298 if (binding.viewPager.getCurrentItem() != 0) {
299 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1); 299 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1);
300 } 300 }
301 break; 301 break;
302 case R.id.ll_edit: 302 case R.id.ll_edit:
303 Intent intent = new Intent(context, ImageEditActivity.class); 303 Intent intent = new Intent(context, ImageEditActivity.class);
304 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 304 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
305 startActivityForResult(intent, 1001); 305 startActivityForResult(intent, 1001);
306 break; 306 break;
307 case R.id.tv_photo: 307 case R.id.tv_photo:
308 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 308 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
309 //确保有相机来处理Intent 309 //确保有相机来处理Intent
310 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 310 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
311 File photoFile = new File(filePath); 311 File photoFile = new File(filePath);
312 if (photoFile != null) { 312 if (photoFile != null) {
313 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri 313 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
314 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile); 314 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
315 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 315 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
316 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 316 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
317 activity.startActivityForResult(takePictureIntent, 1002); 317 activity.startActivityForResult(takePictureIntent, 1002);
318 } 318 }
319 break; 319 break;
320 case R.id.tv_add: 320 case R.id.tv_add:
321 Intent intent1 = new Intent(context, ImageSelectActivity.class); 321 Intent intent1 = new Intent(context, ImageSelectActivity.class);
322 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 322 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
323 startActivityForResult(intent1, 1001); 323 startActivityForResult(intent1, 1001);
324 break; 324 break;
325 case R.id.tv_save: 325 case R.id.tv_save:
326 List<TopicBean> topicBeans = new ArrayList<>(); 326 List<TopicBean> topicBeans = new ArrayList<>();
327 for (ImageBean imageBean : list) { 327 for (ImageBean imageBean : list) {
328 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 328 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
329 for (ImageBean.Cut cut : imageBean.getCuts()) { 329 for (ImageBean.Cut cut : imageBean.getCuts()) {
330 if (cut.isSelect()) { 330 if (cut.isSelect()) {
331 TopicBean bean = new TopicBean(); 331 TopicBean bean = new TopicBean();
332 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 332 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
333 BitmapUtils.saveBitmap(cut.getBitmap(), path); 333 BitmapUtils.saveBitmap(cut.getBitmap(), path);
334 bean.setPath(path); 334 bean.setPath(path);
335 topicBeans.add(bean); 335 topicBeans.add(bean);
336 } 336 }
337 } 337 }
338 } 338 }
339 } 339 }
340 save(topicBeans); 340 save(topicBeans);
341 break; 341 break;
342 } 342 }
343 } 343 }
344 344
345 private void save(List<TopicBean> topicBeans) { 345 private void save(List<TopicBean> topicBeans) {
346 if (type == 0) { 346 if (type == 0) {
347 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans); 347 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans);
348 dialog.show(); 348 dialog.show();
349 } else { 349 } else {
350 List<String> paths = new ArrayList<>(); 350 List<String> paths = new ArrayList<>();
351 for (TopicBean it: topicBeans) { 351 for (TopicBean it: topicBeans) {
352 paths.add(it.getPath()); 352 paths.add(it.getPath());
353 } 353 }
354 if (addHomeworkDialog == null) { 354 if (addHomeworkDialog == null) {
355 addHomeworkDialog = new AddHomeworkDialog(this); 355 addHomeworkDialog = new AddHomeworkDialog(this);
356 } 356 }
357 addHomeworkDialog.show(paths, () -> { 357 addHomeworkDialog.show(paths, student -> {
358 // TODO 358 Intent intent = new Intent(context, AddSuccessActivity.class);
359 intent.putExtra("type", type);
360 intent.putExtra("stuId", student.stuId);
361 startActivity(intent);
362 finish();
359 }); 363 });
360 } 364 }
361 } 365 }
362 366
363 @Override 367 @Override
364 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 368 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
365 super.onActivityResult(requestCode, resultCode, data); 369 super.onActivityResult(requestCode, resultCode, data);
366 if (requestCode == 1001) { 370 if (requestCode == 1001) {
367 if (resultCode == 1002) { 371 if (resultCode == 1002) {
368 if (list.size() > 1) { 372 if (list.size() > 1) {
369 list.remove(binding.viewPager.getCurrentItem()); 373 list.remove(binding.viewPager.getCurrentItem());
370 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem()); 374 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem());
371 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 375 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
372 refreshNum(); 376 refreshNum();
373 } else { 377 } else {
374 finish(); 378 finish();
375 } 379 }
376 } else if (resultCode == 1003) { 380 } else if (resultCode == 1003) {
377 int position = binding.viewPager.getCurrentItem(); 381 int position = binding.viewPager.getCurrentItem();
378 list.remove(position); 382 list.remove(position);
379 String path = data.getStringExtra("path"); 383 String path = data.getStringExtra("path");
380 ImageBean imageBean = new ImageBean(); 384 ImageBean imageBean = new ImageBean();
381 imageBean.setPath(path); 385 imageBean.setPath(path);
382 list.add(position, imageBean); 386 list.add(position, imageBean);
383 imageAdapter.notifyItemChanged(position); 387 imageAdapter.notifyItemChanged(position);
384 clearText(); 388 clearText();
385 refreshNum(); 389 refreshNum();
386 } else if (resultCode == 1004) { 390 } else if (resultCode == 1004) {
387 Rect rect = data.getParcelableExtra("cut"); 391 Rect rect = data.getParcelableExtra("cut");
388 if (rect != null) { 392 if (rect != null) {
389 int position = binding.viewPager.getCurrentItem(); 393 int position = binding.viewPager.getCurrentItem();
390 ImageBean.Cut cut = new ImageBean.Cut(); 394 ImageBean.Cut cut = new ImageBean.Cut();
391 cut.setRect1(rect); 395 cut.setRect1(rect);
392 cut.setSelect(false); 396 cut.setSelect(false);
393 if (list.get(position).getCuts() != null) { 397 if (list.get(position).getCuts() != null) {
394 list.get(position).getCuts().add(cut); 398 list.get(position).getCuts().add(cut);
395 } else { 399 } else {
396 List<ImageBean.Cut> cuts =new ArrayList<>(); 400 List<ImageBean.Cut> cuts =new ArrayList<>();
397 cuts.add(cut); 401 cuts.add(cut);
398 list.get(position).setCuts(cuts); 402 list.get(position).setCuts(cuts);
399 } 403 }
400 imageAdapter.notifyItemChanged(position); 404 imageAdapter.notifyItemChanged(position);
401 refreshNum(); 405 refreshNum();
402 } 406 }
403 } else if (resultCode == 1005) { 407 } else if (resultCode == 1005) {
404 int i = data.getIntExtra("position", 0); 408 int i = data.getIntExtra("position", 0);
405 int position = binding.viewPager.getCurrentItem(); 409 int position = binding.viewPager.getCurrentItem();
406 Rect rect = data.getParcelableExtra("cut"); 410 Rect rect = data.getParcelableExtra("cut");
407 if (rect != null) { 411 if (rect != null) {
408 ImageBean.Cut cut = new ImageBean.Cut(); 412 ImageBean.Cut cut = new ImageBean.Cut();
409 cut.setRect1(rect); 413 cut.setRect1(rect);
410 cut.setSelect(false); 414 cut.setSelect(false);
411 list.get(position).getCuts().remove(i); 415 list.get(position).getCuts().remove(i);
412 list.get(position).getCuts().add(i, cut); 416 list.get(position).getCuts().add(i, cut);
413 imageAdapter.notifyItemChanged(position); 417 imageAdapter.notifyItemChanged(position);
414 refreshNum(); 418 refreshNum();
415 } else { 419 } else {
416 list.get(position).getCuts().remove(i); 420 list.get(position).getCuts().remove(i);
417 imageAdapter.notifyItemChanged(position); 421 imageAdapter.notifyItemChanged(position);
418 refreshNum(); 422 refreshNum();
419 } 423 }
420 } 424 }
421 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) { 425 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
422 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); 426 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
423 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 427 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
424 CommonUtil.saveBitmapToUri(b, path); 428 CommonUtil.saveBitmapToUri(b, path);
425 int position = binding.viewPager.getCurrentItem(); 429 int position = binding.viewPager.getCurrentItem();
426 list.remove(position); 430 list.remove(position);
427 ImageBean imageBean = new ImageBean(); 431 ImageBean imageBean = new ImageBean();
428 imageBean.setPath(path); 432 imageBean.setPath(path);
429 list.add(position, imageBean); 433 list.add(position, imageBean);
430 imageAdapter.notifyItemChanged(position); 434 imageAdapter.notifyItemChanged(position);
431 clearText(); 435 clearText();
432 refreshNum(); 436 refreshNum();
433 } 437 }
434 } 438 }
435 439
436 private void back() { 440 private void back() {
437 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() { 441 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() {
438 @Override 442 @Override
439 public void onConfirm(Dialog dialog) { 443 public void onConfirm(Dialog dialog) {
440 dialog.dismiss(); 444 dialog.dismiss();
441 finish(); 445 finish();
442 } 446 }
443 447
444 @Override 448 @Override
445 public void onCancel(Dialog dialog) { 449 public void onCancel(Dialog dialog) {
446 dialog.dismiss(); 450 dialog.dismiss();
447 } 451 }
448 }); 452 });
449 } 453 }
450 454
451 @Override 455 @Override
452 public boolean onKeyDown(int keyCode, KeyEvent event) { 456 public boolean onKeyDown(int keyCode, KeyEvent event) {
453 if (keyCode == KeyEvent.KEYCODE_BACK) { 457 if (keyCode == KeyEvent.KEYCODE_BACK) {
454 back(); 458 back();
455 return true; 459 return true;
456 } 460 }
457 return super.onKeyDown(keyCode, event); 461 return super.onKeyDown(keyCode, event);
458 } 462 }
459 } 463 }
460 464
app/src/main/java/com/hjx/parent/dialog/AddHomeworkDialog.java
1 package com.hjx.parent.dialog; 1 package com.hjx.parent.dialog;
2 2
3 import android.annotation.SuppressLint; 3 import android.annotation.SuppressLint;
4 import android.content.Context; 4 import android.content.Context;
5 import android.util.Pair; 5 import android.util.Pair;
6 import android.view.View; 6 import android.view.View;
7 import android.widget.AdapterView; 7 import android.widget.AdapterView;
8 import android.widget.ArrayAdapter; 8 import android.widget.ArrayAdapter;
9 import android.widget.Toast; 9 import android.widget.Toast;
10 10
11 import androidx.annotation.NonNull; 11 import androidx.annotation.NonNull;
12 12
13 import com.bigkoo.pickerview.builder.TimePickerBuilder; 13 import com.bigkoo.pickerview.builder.TimePickerBuilder;
14 import com.google.gson.Gson; 14 import com.google.gson.Gson;
15 import com.hjx.parent.R; 15 import com.hjx.parent.R;
16 import com.hjx.parent.bean.StudentBean; 16 import com.hjx.parent.bean.StudentBean;
17 import com.hjx.parent.databinding.DialogAddHomeworkBinding; 17 import com.hjx.parent.databinding.DialogAddHomeworkBinding;
18 import com.hjx.parent.function.Function0; 18 import com.hjx.parent.function.Function0;
19 import com.hjx.parent.function.Function1;
19 import com.hjx.parent.rx.BaseRxActivity; 20 import com.hjx.parent.rx.BaseRxActivity;
20 import com.prws.common.bean.GradeAndSubject; 21 import com.prws.common.bean.GradeAndSubject;
21 import com.prws.common.bean.ResponseResult; 22 import com.prws.common.bean.ResponseResult;
22 import com.prws.common.bean.Student; 23 import com.prws.common.bean.Student;
23 import com.prws.common.bean.Subject; 24 import com.prws.common.bean.Subject;
24 import com.prws.common.bean.baidu.BaiduInput; 25 import com.prws.common.bean.baidu.BaiduInput;
25 import com.prws.common.net.NetWorks; 26 import com.prws.common.net.NetWorks;
26 import com.prws.common.utils.SharedPreferencesUtil; 27 import com.prws.common.utils.SharedPreferencesUtil;
27 import com.trello.rxlifecycle2.android.RxLifecycleAndroid; 28 import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
28 29
29 import java.io.File; 30 import java.io.File;
30 import java.text.SimpleDateFormat; 31 import java.text.SimpleDateFormat;
31 import java.util.ArrayList; 32 import java.util.ArrayList;
32 import java.util.Date; 33 import java.util.Date;
33 import java.util.HashMap; 34 import java.util.HashMap;
34 import java.util.List; 35 import java.util.List;
35 import java.util.Locale; 36 import java.util.Locale;
36 import java.util.Map; 37 import java.util.Map;
37 38
38 import io.reactivex.Observable; 39 import io.reactivex.Observable;
39 import io.reactivex.android.schedulers.AndroidSchedulers; 40 import io.reactivex.android.schedulers.AndroidSchedulers;
40 import io.reactivex.schedulers.Schedulers; 41 import io.reactivex.schedulers.Schedulers;
41 42
42 public class AddHomeworkDialog extends BaseDialog<DialogAddHomeworkBinding>{ 43 public class AddHomeworkDialog extends BaseDialog<DialogAddHomeworkBinding>{
43 private final BaseRxActivity<?> activity; 44 private final BaseRxActivity<?> activity;
44 45
45 private Function0 callback; 46 private Function1<Student> callback;
46
47 String stuId;
48 47
49 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA); 48 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA);
50 List<Student> studentList; 49 List<Student> studentList;
51 List<GradeAndSubject> gradeAndSubjectList; 50 List<GradeAndSubject> gradeAndSubjectList;
52 51
53 List<String> images; 52 List<String> images;
54 53
55 Student student; 54 Student student;
56 String grade; 55 String grade;
57 String term; 56 String term;
58 String subject; 57 String subject;
59 Date uploadTime = new Date(); 58 Date uploadTime = new Date();
60 59
61 public AddHomeworkDialog(BaseRxActivity<?> context) { 60 public AddHomeworkDialog(BaseRxActivity<?> context) {
62 super((Context) context); 61 super((Context) context);
63 activity = context; 62 activity = context;
64 } 63 }
65 64
66 public void show(List<String> paths, Function0 callback) { 65 public void show(List<String> paths, Function1<Student> callback) {
67 images = paths; 66 images = paths;
68 this.callback = callback; 67 this.callback = callback;
69 super.show(); 68 super.show();
70 } 69 }
71 70
72 @SuppressLint("SetTextI18n") 71 @SuppressLint("SetTextI18n")
73 @Override 72 @Override
74 public void initView() { 73 public void initView() {
75 binding.btnClose.setOnClickListener(v -> dismiss()); 74 binding.btnClose.setOnClickListener(v -> dismiss());
76 stuId = getCurrentStuId();
77 binding.spStudent.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 75 binding.spStudent.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
78 @Override 76 @Override
79 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 77 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
80 student = studentList.get(position); 78 student = studentList.get(position);
81 if (gradeAndSubjectList == null) return; 79 if (gradeAndSubjectList == null) return;
82 int p = 0; 80 int p = 0;
83 for (GradeAndSubject it: gradeAndSubjectList) { 81 for (GradeAndSubject it: gradeAndSubjectList) {
84 if (it.getGrade().getGrade().equals(student.grade)) { 82 if (it.getGrade().getGrade().equals(student.grade)) {
85 p = gradeAndSubjectList.indexOf(it); 83 p = gradeAndSubjectList.indexOf(it);
86 break; 84 break;
87 } 85 }
88 } 86 }
89 binding.spGrade.setSelection(p); 87 binding.spGrade.setSelection(p);
90 } 88 }
91 89
92 @Override 90 @Override
93 public void onNothingSelected(AdapterView<?> parent) { 91 public void onNothingSelected(AdapterView<?> parent) {
94 } 92 }
95 }); 93 });
96 binding.spTerm.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 94 binding.spTerm.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
97 @Override 95 @Override
98 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 96 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
99 term = getContext().getResources().getStringArray(R.array.grade_array)[position]; 97 term = getContext().getResources().getStringArray(R.array.grade_array)[position];
100 } 98 }
101 @Override 99 @Override
102 public void onNothingSelected(AdapterView<?> parent) { 100 public void onNothingSelected(AdapterView<?> parent) {
103 } 101 }
104 }); 102 });
105 binding.spGrade.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 103 binding.spGrade.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
106 @Override 104 @Override
107 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 105 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
108 grade = gradeAndSubjectList.get(position).getGrade().getGrade(); 106 grade = gradeAndSubjectList.get(position).getGrade().getGrade();
109 refreshSubjects(position); 107 refreshSubjects(position);
110 } 108 }
111 109
112 @Override 110 @Override
113 public void onNothingSelected(AdapterView<?> parent) { 111 public void onNothingSelected(AdapterView<?> parent) {
114 } 112 }
115 }); 113 });
116 114
117 binding.tvDate.setText(dateFormat.format(uploadTime)); 115 binding.tvDate.setText(dateFormat.format(uploadTime));
118 binding.tvDate.setOnClickListener(v -> { 116 binding.tvDate.setOnClickListener(v -> {
119 new TimePickerBuilder(getContext(), (date, v1) -> { 117 new TimePickerBuilder(getContext(), (date, v1) -> {
120 uploadTime = date; 118 uploadTime = date;
121 binding.tvDate.setText(dateFormat.format(uploadTime)); 119 binding.tvDate.setText(dateFormat.format(uploadTime));
122 binding.etName.setText(dateFormat.format(uploadTime) + subject + "作业"); 120 binding.etName.setText(dateFormat.format(uploadTime) + subject + "作业");
123 }).setType(new boolean[]{true, true, true, false, false, false}).isDialog(true).build().show(); 121 }).setType(new boolean[]{true, true, true, false, false, false}).isDialog(true).build().show();
124 }); 122 });
125 123
126 binding.btnConfirm.setOnClickListener(v -> { 124 binding.btnConfirm.setOnClickListener(v -> {
127 String name = binding.etName.getText().toString().trim(); 125 String name = binding.etName.getText().toString().trim();
128 if (name.isEmpty()) { 126 if (name.isEmpty()) {
129 Toast.makeText(getContext(), "请输入作业名称", Toast.LENGTH_SHORT).show(); 127 Toast.makeText(getContext(), "请输入作业名称", Toast.LENGTH_SHORT).show();
130 return; 128 return;
131 } 129 }
132 uploadImage(name); 130 uploadImage(name);
133 }); 131 });
134 132
135 getGrade(); 133 getGrade();
136 } 134 }
137 135
138 private String getCurrentStuId() { 136 private String getCurrentStuId() {
139 String student = (String) SharedPreferencesUtil.getData("student", ""); 137 String student = (String) SharedPreferencesUtil.getData("student", "");
140 StudentBean studentBean = new Gson().fromJson(student, StudentBean.class); 138 StudentBean studentBean = new Gson().fromJson(student, StudentBean.class);
141 return studentBean.getStuId(); 139 return studentBean.getStuId();
142 } 140 }
143 141
144 @SuppressLint("CheckResult") 142 @SuppressLint("CheckResult")
145 private void getStudents() { 143 private void getStudents() {
146 NetWorks.listStudent() 144 NetWorks.listStudent()
147 .subscribeOn(Schedulers.io()) 145 .subscribeOn(Schedulers.io())
148 .observeOn(AndroidSchedulers.mainThread()) 146 .observeOn(AndroidSchedulers.mainThread())
149 .compose(RxLifecycleAndroid.bindActivity(activity.getRxLifecycle())) 147 .compose(RxLifecycleAndroid.bindActivity(activity.getRxLifecycle()))
150 .map(ResponseResult::getData) 148 .map(ResponseResult::getData)
151 .subscribe((data, th) -> { 149 .subscribe((data, th) -> {
152 if (th != null) th.printStackTrace(); 150 if (th != null) th.printStackTrace();
153 if (data != null && data.size() > 0) { 151 if (data != null && data.size() > 0) {
154 studentList = data; 152 studentList = data;
155 int position = 0; 153 int position = 0;
154 String stuId = getCurrentStuId();
156 for (int i = 0; i < data.size(); i++) { 155 for (int i = 0; i < data.size(); i++) {
157 if (data.get(i).stuId.equals(stuId)) { 156 if (data.get(i).stuId.equals(stuId)) {
158 position = i; 157 position = i;
159 break; 158 break;
160 } 159 }
161 } 160 }
162 binding.spStudent.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_spinner, data)); 161 binding.spStudent.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_spinner, data));
163 binding.spStudent.setSelection(position); 162 binding.spStudent.setSelection(position);
164 } 163 }
165 }); 164 });
166 } 165 }
167 166
168 @SuppressLint("CheckResult") 167 @SuppressLint("CheckResult")
169 private void getGrade() { 168 private void getGrade() {
170 NetWorks.service_url.listGradeAndSubject(NetWorks.getHeader()) 169 NetWorks.service_url.listGradeAndSubject(NetWorks.getHeader())
171 .subscribeOn(Schedulers.io()) 170 .subscribeOn(Schedulers.io())
172 .observeOn(AndroidSchedulers.mainThread()) 171 .observeOn(AndroidSchedulers.mainThread())
173 .compose(RxLifecycleAndroid.bindActivity(activity.getRxLifecycle())) 172 .compose(RxLifecycleAndroid.bindActivity(activity.getRxLifecycle()))
174 .map(ResponseResult::getData) 173 .map(ResponseResult::getData)
175 .firstOrError() 174 .firstOrError()
176 .subscribe((data, th) -> { 175 .subscribe((data, th) -> {
177 if (th != null) th.printStackTrace(); 176 if (th != null) th.printStackTrace();
178 if (data != null && data.size() > 0) { 177 if (data != null && data.size() > 0) {
179 gradeAndSubjectList = data; 178 gradeAndSubjectList = data;
180 List<String> grades = new ArrayList<>(); 179 List<String> grades = new ArrayList<>();
181 for (GradeAndSubject it: data) { 180 for (GradeAndSubject it: data) {
182 grades.add(it.getGrade().getGrade()); 181 grades.add(it.getGrade().getGrade());
183 } 182 }
184 binding.spGrade.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_spinner, grades)); 183 binding.spGrade.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_spinner, grades));
185 } 184 }
186 getStudents(); 185 getStudents();
187 }); 186 });
188 } 187 }
189 188
190 private void refreshSubjects(int gradePosition) { 189 private void refreshSubjects(int gradePosition) {
191 if (gradeAndSubjectList == null) return; 190 if (gradeAndSubjectList == null) return;
192 List<Subject> subjectList = gradeAndSubjectList.get(gradePosition).getSubjects(); 191 List<Subject> subjectList = gradeAndSubjectList.get(gradePosition).getSubjects();
193 List<String> subjects = new ArrayList<>(); 192 List<String> subjects = new ArrayList<>();
194 for (Subject s: subjectList) { 193 for (Subject s: subjectList) {
195 subjects.add(s.getSubject()); 194 subjects.add(s.getSubject());
196 } 195 }
197 binding.spSubject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 196 binding.spSubject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
198 @SuppressLint("SetTextI18n") 197 @SuppressLint("SetTextI18n")
199 @Override 198 @Override
200 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 199 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
201 subject = subjects.get(position); 200 subject = subjects.get(position);
202 binding.etName.setText(dateFormat.format(uploadTime) + subject + "作业"); 201 binding.etName.setText(dateFormat.format(uploadTime) + subject + "作业");
203 } 202 }
204 @Override 203 @Override
205 public void onNothingSelected(AdapterView<?> parent) { 204 public void onNothingSelected(AdapterView<?> parent) {
206 } 205 }
207 }); 206 });
208 binding.spSubject.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_spinner, subjects)); 207 binding.spSubject.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_spinner, subjects));
209 } 208 }
210 209
211 @SuppressLint("CheckResult") 210 @SuppressLint("CheckResult")
212 public void uploadImage(String name) { 211 public void uploadImage(String name) {
213 activity.showLoadingDialog("上传作业中..."); 212 activity.showLoadingDialog("上传作业中...");
214 Observable.fromIterable(images) 213 Observable.fromIterable(images)
215 .map(path -> { 214 .map(path -> {
216 int index = images.indexOf(path); 215 int index = images.indexOf(path);
217 return new Pair<>(index, path); 216 return new Pair<>(index, path);
218 }) 217 })
219 .subscribeOn(Schedulers.io()) 218 .subscribeOn(Schedulers.io())
220 .flatMap(pair -> { 219 .flatMap(pair -> {
221 int index = pair.first; 220 int index = pair.first;
222 String path = pair.second; 221 String path = pair.second;
223 File file = new File(path); 222 File file = new File(path);
224 String id = file.getName().substring(0, file.getName().lastIndexOf(".")); 223 String id = file.getName().substring(0, file.getName().lastIndexOf("."));
225 return Observable.just(file) 224 return Observable.just(file)
226 .map(var -> { 225 .map(var -> {
227 BaiduInput baiduInput = NetWorks.inputImage(path, id).blockingGet(); 226 BaiduInput baiduInput = NetWorks.inputImage(path, id).blockingGet();
228 if (baiduInput.getError_code() != null) { 227 if (baiduInput.getError_code() != null) {
229 throw new RuntimeException("图片入库失败"); 228 throw new RuntimeException("图片入库失败");
230 } else { 229 } else {
231 return baiduInput; 230 return baiduInput;
232 } 231 }
233 }) 232 })
234 .map(var -> NetWorks.uploadImage(path, id).blockingGet()) 233 .map(var -> NetWorks.uploadImage(path, id).blockingGet())
235 .map(var -> { 234 .map(var -> {
236 Map<String, Object> map = new HashMap<>(); 235 Map<String, Object> map = new HashMap<>();
237 map.put("brief", id); 236 map.put("brief", id);
238 map.put("sort", index); 237 map.put("sort", index);
239 return map; 238 return map;
240 }); 239 });
241 }, 2) 240 }, 2)
242 .toList() 241 .toList()
243 .map(list -> { 242 .map(list -> {
244 List<String> stuIds = new ArrayList<>(); 243 List<String> stuIds = new ArrayList<>();
245 stuIds.add(student.stuId); 244 stuIds.add(student.stuId);
246 String userId = NetWorks.getUserId(); 245 String userId = NetWorks.getUserId();
247 246
248 Map<String, Object> map = new HashMap<>(); 247 Map<String, Object> map = new HashMap<>();
249 map.put("name", name); 248 map.put("name", name);
250 map.put("grade", grade); 249 map.put("grade", grade);
251 map.put("term", term); 250 map.put("term", term);
252 map.put("subject", subject); 251 map.put("subject", subject);
253 map.put("userId", userId); 252 map.put("userId", userId);
254 map.put("stuIds", stuIds); 253 map.put("stuIds", stuIds);
255 map.put("briefList", list); 254 map.put("briefList", list);
256 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); 255 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
257 map.put("uploadTime", format.format(uploadTime)); 256 map.put("uploadTime", format.format(uploadTime));
258 return map; 257 return map;
259 }) 258 })
260 .flatMap(body -> { 259 .flatMap(body -> {
261 return NetWorks.service_url.uploadHomework(NetWorks.getHeader(), body); 260 return NetWorks.service_url.uploadHomework(NetWorks.getHeader(), body);
262 }) 261 })
263 .observeOn(AndroidSchedulers.mainThread()) 262 .observeOn(AndroidSchedulers.mainThread())
264 .compose(RxLifecycleAndroid.bindActivity(activity.getRxLifecycle())) 263 .compose(RxLifecycleAndroid.bindActivity(activity.getRxLifecycle()))
265 .subscribe((response, th) -> { 264 .subscribe((response, th) -> {
266 if (th != null) th.printStackTrace(); 265 if (th != null) th.printStackTrace();
267 if (response != null && response.getSuccess()) { 266 if (response != null && response.getSuccess()) {
268 activity.cancelLoadingDialog(); 267 activity.cancelLoadingDialog();
269 dismiss(); 268 dismiss();
270 if (callback != null) callback.invoke(); 269 if (callback != null) callback.invoke(student);
271 } else { 270 } else {
272 activity.loadFail("上传作业失败"); 271 activity.loadFail("上传作业失败");
273 } 272 }
274 }) 273 })
275 ; 274 ;
276 } 275 }
277 276
278 @NonNull 277 @NonNull
279 @Override 278 @Override
280 public DialogAddHomeworkBinding getBinding() { 279 public DialogAddHomeworkBinding getBinding() {
281 return DialogAddHomeworkBinding.inflate(getLayoutInflater()); 280 return DialogAddHomeworkBinding.inflate(getLayoutInflater());
282 } 281 }
app/src/main/res/layout/activity_add_success.xml
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools" 2 xmlns:tools="http://schemas.android.com/tools"
3 xmlns:xxx="http://schemas.android.com/apk/res-auto" 3 xmlns:xxx="http://schemas.android.com/apk/res-auto"
4 android:layout_width="match_parent" 4 android:layout_width="match_parent"
5 android:layout_height="match_parent" 5 android:layout_height="match_parent"
6 android:background="@color/white"> 6 android:background="@color/white">
7 7
8 <RelativeLayout 8 <RelativeLayout
9 android:layout_width="match_parent" 9 android:layout_width="match_parent"
10 android:layout_height="40dp" 10 android:layout_height="40dp"
11 android:background="@color/white"> 11 android:background="@color/white">
12 12
13 13
14 <ImageView 14 <ImageView
15 android:id="@+id/iv_back" 15 android:id="@+id/iv_back"
16 android:layout_width="30dp" 16 android:layout_width="30dp"
17 android:layout_height="36dp" 17 android:layout_height="36dp"
18 android:layout_centerVertical="true" 18 android:layout_centerVertical="true"
19 android:layout_marginLeft="5dp" 19 android:layout_marginLeft="5dp"
20 android:padding="10dp" 20 android:padding="10dp"
21 android:src="@mipmap/icon_back" /> 21 android:src="@mipmap/icon_back" />
22 </RelativeLayout> 22 </RelativeLayout>
23 23
24 <LinearLayout 24 <LinearLayout
25 android:layout_width="wrap_content" 25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content" 26 android:layout_height="wrap_content"
27 android:layout_centerInParent="true" 27 android:layout_centerInParent="true"
28 android:orientation="vertical"> 28 android:orientation="vertical">
29 29
30 <ImageView 30 <ImageView
31 android:layout_width="50dp" 31 android:layout_width="50dp"
32 android:layout_height="58dp" 32 android:layout_height="58dp"
33 android:layout_gravity="center_horizontal" 33 android:layout_gravity="center_horizontal"
34 android:src="@mipmap/ic_add_success" /> 34 android:src="@mipmap/ic_add_success" />
35 35
36 <TextView 36 <TextView
37 android:id="@+id/tvMsg"
37 android:layout_width="wrap_content" 38 android:layout_width="wrap_content"
38 android:layout_height="wrap_content" 39 android:layout_height="wrap_content"
39 android:layout_gravity="center_horizontal" 40 android:layout_gravity="center_horizontal"
40 android:layout_marginTop="20dp" 41 android:layout_marginTop="20dp"
41 android:text="加入错题本成功!" 42 android:text="加入错题本成功!"
42 android:textColor="@color/text_title" 43 android:textColor="@color/text_title"
43 android:textSize="20dp" 44 android:textSize="20dp"
44 android:textStyle="bold" /> 45 android:textStyle="bold" />
45 46
46 47
47 <TextView 48 <TextView
48 android:id="@+id/tv_add" 49 android:id="@+id/tv_add"
49 android:layout_width="250dp" 50 android:layout_width="250dp"
50 android:layout_height="45dp" 51 android:layout_height="45dp"
51 android:layout_marginTop="40dp" 52 android:layout_marginTop="40dp"
52 android:background="@drawable/bg_soild_blue_25" 53 android:background="@drawable/bg_soild_blue_25"
53 android:gravity="center" 54 android:gravity="center"
54 android:text="继续录入错题" 55 android:text="继续录入错题"
55 android:textColor="@color/white" 56 android:textColor="@color/white"
56 android:textSize="20sp" 57 android:textSize="20sp"
57 android:visibility="visible" /> 58 android:visibility="visible" />
58 59
59 <TextView 60 <TextView
60 android:id="@+id/tv_book" 61 android:id="@+id/tv_book"
61 android:layout_width="250dp" 62 android:layout_width="250dp"
62 android:layout_height="45dp" 63 android:layout_height="45dp"
63 android:layout_marginTop="20dp" 64 android:layout_marginTop="20dp"
64 android:background="@drawable/bg_soild_blue_border_25" 65 android:background="@drawable/bg_soild_blue_border_25"
65 android:gravity="center" 66 android:gravity="center"
66 android:text="去错题本查看" 67 android:text="去错题本查看"
67 android:textColor="#1C90F3" 68 android:textColor="#1C90F3"
68 android:textSize="20sp" 69 android:textSize="20sp"
69 android:visibility="visible" /> 70 android:visibility="visible" />
70 </LinearLayout> 71 </LinearLayout>
71 </RelativeLayout> 72 </RelativeLayout>
72 73
libs/common/src/main/java/com/prws/common/net/RetrofitUtils.java
1 package com.prws.common.net; 1 package com.prws.common.net;
2 2
3 import com.google.gson.Gson; 3 import com.google.gson.Gson;
4 import com.google.gson.GsonBuilder; 4 import com.google.gson.GsonBuilder;
5 import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; 5 import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
6 import com.prws.common.utils.LogUtil; 6 import com.prws.common.utils.LogUtil;
7 7
8 import io.reactivex.schedulers.Schedulers; 8 import io.reactivex.schedulers.Schedulers;
9 import okhttp3.OkHttpClient; 9 import okhttp3.OkHttpClient;
10 import retrofit2.Retrofit; 10 import retrofit2.Retrofit;
11 import retrofit2.converter.gson.GsonConverterFactory; 11 import retrofit2.converter.gson.GsonConverterFactory;
12 12
13 /** 13 /**
14 * 类名称:RetrofitUtils 14 * 类名称:RetrofitUtils
15 * 创建人: 15 * 创建人:
16 * 16 *
17 * 类描述:封装一个retrofit集成0kHttp3的抽象基类 17 * 类描述:封装一个retrofit集成0kHttp3的抽象基类
18 */ 18 */
19 public abstract class RetrofitUtils { 19 public abstract class RetrofitUtils {
20 20
21 private static Retrofit prwsCloudRetrofit; 21 private static Retrofit prwsCloudRetrofit;
22 private static OkHttpClient prwsCloudOkHttpClient; 22 private static OkHttpClient prwsCloudOkHttpClient;
23 private static Retrofit mStaRetrofit; 23 private static Retrofit mStaRetrofit;
24 private static OkHttpClient mStaOkHttpClient; 24 private static OkHttpClient mStaOkHttpClient;
25 private static Retrofit nginxRetrofit; 25 private static Retrofit nginxRetrofit;
26 private static OkHttpClient nginxOkHttpClient; 26 private static OkHttpClient nginxOkHttpClient;
27 27
28 28
29 29
30 private static Retrofit mWebRetrofit; 30 private static Retrofit mWebRetrofit;
31 private static OkHttpClient mWebOkHttpClient; 31 private static OkHttpClient mWebOkHttpClient;
32 32
33 /** 33 /**
34 * 获取Retrofit对象 34 * 获取Retrofit对象
35 * 35 *
36 * @return 36 * @return
37 */ 37 */
38 38
39 protected static Retrofit getMachineRetrofit(String API_SERVER) { 39 protected static Retrofit getMachineRetrofit(String API_SERVER) {
40 40
41 if (null == mStaRetrofit) { 41 if (null == mStaRetrofit) {
42 42
43 if (null == mStaOkHttpClient) { 43 if (null == mStaOkHttpClient) {
44 mStaOkHttpClient = OkHttp3Utils.getOkHttpClient(); 44 mStaOkHttpClient = OkHttp3Utils.getOkHttpClient();
45 } 45 }
46 46
47 Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
47 //Retrofit2后使用build设计模式 48 //Retrofit2后使用build设计模式
48 mStaRetrofit = new Retrofit.Builder() 49 mStaRetrofit = new Retrofit.Builder()
49 //设置服务器路径 50 //设置服务器路径
50 .baseUrl( API_SERVER +"/") 51 .baseUrl( API_SERVER +"/")
51 //添加转化库,默认是Gson 52 //添加转化库,默认是Gson
52 .addConverterFactory(GsonConverterFactory.create()) 53 .addConverterFactory(GsonConverterFactory.create(gson))
53 //添加回调库,采用RxJava 54 //添加回调库,采用RxJava
54 .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io())) 55 .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
55 //设置使用okhttp网络请求 56 //设置使用okhttp网络请求
56 .client(mStaOkHttpClient) 57 .client(mStaOkHttpClient)
57 .build(); 58 .build();
58 59
59 } 60 }
60 61
61 return mStaRetrofit; 62 return mStaRetrofit;
62 } 63 }
63 protected static Retrofit getNginxRetrofit(String API_SERVER) { 64 protected static Retrofit getNginxRetrofit(String API_SERVER) {
64 65
65 if (null == nginxRetrofit) { 66 if (null == nginxRetrofit) {
66 67
67 if (null == nginxOkHttpClient) { 68 if (null == nginxOkHttpClient) {
68 nginxOkHttpClient = OkHttp3Utils.getOkHttpClient(); 69 nginxOkHttpClient = OkHttp3Utils.getOkHttpClient();
69 } 70 }
70 71
71 //Retrofit2后使用build设计模式 72 //Retrofit2后使用build设计模式
72 nginxRetrofit = new Retrofit.Builder() 73 nginxRetrofit = new Retrofit.Builder()
73 //设置服务器路径 74 //设置服务器路径
74 .baseUrl( API_SERVER +"/") 75 .baseUrl( API_SERVER +"/")
75 //添加转化库,默认是Gson 76 //添加转化库,默认是Gson
76 .addConverterFactory(GsonConverterFactory.create()) 77 .addConverterFactory(GsonConverterFactory.create())
77 //添加回调库,采用RxJava 78 //添加回调库,采用RxJava
78 .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io())) 79 .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
79 //设置使用okhttp网络请求 80 //设置使用okhttp网络请求
80 .client(nginxOkHttpClient) 81 .client(nginxOkHttpClient)
81 .build(); 82 .build();
82 83
83 } 84 }
84 85
85 return nginxRetrofit; 86 return nginxRetrofit;
86 } 87 }
87 88
88 89
89 90
90 protected static Retrofit getPrwsCloudRetrofit(String API_SERVER,boolean isReInit) { 91 protected static Retrofit getPrwsCloudRetrofit(String API_SERVER,boolean isReInit) {
91 92
92 if (isReInit){ 93 if (isReInit){
93 prwsCloudRetrofit = null; 94 prwsCloudRetrofit = null;
94 } 95 }
95 96
96 if (null == prwsCloudRetrofit) { 97 if (null == prwsCloudRetrofit) {
97 98
98 if (null == prwsCloudOkHttpClient) { 99 if (null == prwsCloudOkHttpClient) {
99 prwsCloudOkHttpClient = OkHttp3Utils.getOkHttpClient(); 100 prwsCloudOkHttpClient = OkHttp3Utils.getOkHttpClient();
100 } 101 }
101 102
102 LogUtil.i("RetrofitUtils","url:"+API_SERVER); 103 LogUtil.i("RetrofitUtils","url:"+API_SERVER);
103 //Retrofit2后使用build设计模式 104 //Retrofit2后使用build设计模式
104 prwsCloudRetrofit = new Retrofit.Builder() 105 prwsCloudRetrofit = new Retrofit.Builder()
105 //设置服务器路径 106 //设置服务器路径
106 .baseUrl( API_SERVER +"/") 107 .baseUrl( API_SERVER +"/")
107 //添加转化库,默认是Gson 108 //添加转化库,默认是Gson
108 .addConverterFactory(GsonConverterFactory.create()) 109 .addConverterFactory(GsonConverterFactory.create())
109 //添加回调库,采用RxJava 110 //添加回调库,采用RxJava
110 .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io())) 111 .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
111 //设置使用okhttp网络请求 112 //设置使用okhttp网络请求
112 .client(prwsCloudOkHttpClient) 113 .client(prwsCloudOkHttpClient)
113 .build(); 114 .build();
114 115
115 } 116 }
116 117
117 return prwsCloudRetrofit; 118 return prwsCloudRetrofit;
118 } 119 }
119 120
120 121
121 122
122 // protected static Retrofit getWebViewRetrofit(String API_SERVER) { 123 // protected static Retrofit getWebViewRetrofit(String API_SERVER) {
123 // 124 //
124 // if (null == mWebRetrofit) { 125 // if (null == mWebRetrofit) {
125 // 126 //
126 // if (null == mWebOkHttpClient) { 127 // if (null == mWebOkHttpClient) {
127 // mWebOkHttpClient = OkHttp3Utils.getOkHttpClient(); 128 // mWebOkHttpClient = OkHttp3Utils.getOkHttpClient();
128 // } 129 // }
129 // 130 //
130 // //Retrofit2后使用build设计模式 131 // //Retrofit2后使用build设计模式
131 // mWebRetrofit = new Retrofit.Builder() 132 // mWebRetrofit = new Retrofit.Builder()
132 // //设置服务器路径 133 // //设置服务器路径
133 // .baseUrl( API_SERVER +"/") 134 // .baseUrl( API_SERVER +"/")
134 // //添加转化库,默认是Gson 135 // //添加转化库,默认是Gson
135 // .addConverterFactory(GsonConverterFactory.create()) 136 // .addConverterFactory(GsonConverterFactory.create())
136 // //添加回调库,采用RxJava 137 // //添加回调库,采用RxJava
137 // .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 138 // .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
138 // //设置使用okhttp网络请求 139 // //设置使用okhttp网络请求
139 // .client(mWebOkHttpClient) 140 // .client(mWebOkHttpClient)
140 // .build(); 141 // .build();
141 // 142 //
142 // } 143 // }
143 // 144 //
144 // return mWebRetrofit; 145 // return mWebRetrofit;
145 // } 146 // }
146 147
147 } 148 }
148 149