完成能力测试的提交功能

This commit is contained in:
md
2021-05-31 18:53:12 +08:00
parent a970c02393
commit 90d1237a22
24 changed files with 650 additions and 261 deletions

View File

@@ -56,6 +56,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
startActivity(forgetPaw);
break;
case R.id.tv_login:
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
break;

View File

@@ -1,12 +1,18 @@
package com.example.myapplication.adapter;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
@@ -14,36 +20,127 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.example.myapplication.R;
import com.example.myapplication.bean.BolBean;
import com.example.myapplication.bean.MeasureBean;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class CapacityMeasureAdapter extends RecyclerView.Adapter {
public class CapacityMeasureAdapter extends RecyclerView.Adapter<CapacityMeasureAdapter.ViewHolder> {
private List<BolBean> measureList = new ArrayList<>();
private Context context;
private Map<String, String> checkedMap;
public Map<String, String> getCheckedMap() {
return checkedMap;
}
public CapacityMeasureAdapter(Context context) {
this.context = context;
this.checkedMap = new LinkedHashMap<>();
}
public void setMeasureList(List<BolBean> measureList) {
this.measureList.addAll(measureList);
notifyDataSetChanged();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
final View inflate = LayoutInflater.from(context).inflate(R.layout.measure_item, parent, false);
return new ViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ViewHolder holder1 = (ViewHolder) holder;
holder1.tvMeasure.setText((position+1)+measureList.get(position).getQuestion());
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final boolean single = measureList.get(position).isSingle();//是否多选
holder.tvMeasure.setText((position + 1) + measureList.get(position).getQuestion());
if (single) {
RadioGroup radioGroup = new RadioGroup(context);
radioGroup.setOrientation(LinearLayout.VERTICAL);
holder.llOption.addView(radioGroup);
List<?> optionList = measureList.get(position).getOption();
if (optionList != null && !optionList.isEmpty()) {
for (int i = 0; i < optionList.size(); i++) {
obtainOptionLayout(radioGroup, i, (String) optionList.get(i), true,measureList.get(position).getId());
}
}
} else {
List<?> optionList = measureList.get(position).getOption();
if (optionList != null && !optionList.isEmpty()) {
for (int i = 0; i < optionList.size(); i++) {
obtainOptionLayout(holder.llOption, i, (String) optionList.get(i), false, measureList.get(position).getId());
}
}
}
}
private void obtainOptionLayout(ViewGroup parentLayout, int optionIndex, String option, boolean isSingle, String questionId) {
LinearLayout optionLayer = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.capacity_measure_option, null);
parentLayout.addView(optionLayer);
RadioButton tvOptionIndex = optionLayer.findViewById(R.id.tv_option_layer_index);
CheckBox cbOptionIndex = optionLayer.findViewById(R.id.cb_option_layer_index);
if (isSingle) {//单选
tvOptionIndex.setVisibility(View.VISIBLE);
cbOptionIndex.setVisibility(View.GONE);
tvOptionIndex.setText(getOptionIndex(optionIndex));
} else {
tvOptionIndex.setVisibility(View.GONE);
cbOptionIndex.setVisibility(View.VISIBLE);
cbOptionIndex.setText(getOptionIndex(optionIndex));
}
tvOptionIndex.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
checkedChangeRadioButton(parentLayout, buttonView);
Toast.makeText(context, "option" + option, Toast.LENGTH_SHORT).show();
updateCheckedMap(questionId, buttonView, parentLayout);
}
}
});
cbOptionIndex.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
updateCheckedMap(questionId, buttonView, parentLayout);
}
});
ImageView ivOption = optionLayer.findViewById(R.id.iv_option_img);
TextView tvOptionContent = optionLayer.findViewById(R.id.tv_option_content);
if (option != null) {
if (option.startsWith("http")) {
Glide.with(context).load(option).into(ivOption);
} else {
tvOptionContent.setText(option);
}
}
}
private void checkedChangeRadioButton(ViewGroup group, CompoundButton currentButton) {
if (group != null && group.getChildCount() > 0) {
for (int i = 0; i < group.getChildCount(); i++) {
if (group.getChildAt(i) instanceof ViewGroup) {
checkedChangeRadioButton((ViewGroup) group.getChildAt(i), currentButton);
} else if (group.getChildAt(i) instanceof CompoundButton && group.getChildAt(i).isShown() && group.getChildAt(i) != currentButton) {
((CompoundButton) group.getChildAt(i)).setChecked(false);
}
}
}
}
//indext内容
private String getOptionIndex(int index) {
char A = (char) (65 + index);
return "选项" + A + ":";
// Glide.with(context).load(measureList.get(position).getSingleChoice().get(0).getOption());
}
@Override
@@ -53,28 +150,55 @@ public class CapacityMeasureAdapter extends RecyclerView.Adapter {
class ViewHolder extends RecyclerView.ViewHolder {
TextView tvMeasure;
TextView tvMeasure2;
RadioButton tvMeasureA;
RadioButton tvMeasureB;
RadioButton tvMeasureC;
RadioButton tvMeasureD;
ImageView ivMeasureA;
ImageView ivMeasureB;
ImageView ivMeasureC;
ImageView ivMeasureD;
LinearLayout llOption;
public ViewHolder(@NonNull View itemView) {
super(itemView);
llOption = itemView.findViewById(R.id.ll_option);
tvMeasure = itemView.findViewById(R.id.tv_measure_text1);
tvMeasure2 = itemView.findViewById(R.id.tv_measure_text2);
tvMeasureA = itemView.findViewById(R.id.rb_tv_measureA);
tvMeasureB = itemView.findViewById(R.id.rb_tv_measureB);
tvMeasureC = itemView.findViewById(R.id.rb_tv_measureC);
tvMeasureD = itemView.findViewById(R.id.rb_tv_measureD);
ivMeasureA = itemView.findViewById(R.id.iv_measureA);
ivMeasureB = itemView.findViewById(R.id.iv_measureB);
ivMeasureC = itemView.findViewById(R.id.iv_measureC);
ivMeasureD = itemView.findViewById(R.id.iv_measureD);
}
}
/**
* 获取被勾选的数据
*/
private void updateCheckedMap(String questionId, CompoundButton currentButton, ViewGroup group) {
StringBuilder resultStr = null;
if (group != null) {
resultStr = new StringBuilder("");
List<CompoundButton> resultList = new ArrayList<>();
getCompoundButton(group, resultList);
if (resultList != null && !resultList.isEmpty()) {
for (int i = 0; i < resultList.size(); i++) {
if (((CompoundButton) resultList.get(i)).isChecked()) {
resultStr.append(i).append(",");
}
}
}
}
if (resultStr != null) {
String result = "";
if (resultStr.toString().length() > 0) {
result = resultStr.substring(0, resultStr.length() - 1);
}
checkedMap.put(questionId, result);
Log.d("checked", result);
}
}
/**
* 获取该viewGroup的所有子CompoundButton
*/
private void getCompoundButton(ViewGroup group, List<CompoundButton> compoundButtonList) {
if (group != null) {
for (int i = 0; i < group.getChildCount(); i++) {
if (group.getChildAt(i) instanceof ViewGroup) {
getCompoundButton((ViewGroup) group.getChildAt(i), compoundButtonList);
} else if (group.getChildAt(i) instanceof CompoundButton && group.getChildAt(i).isShown()) {
compoundButtonList.add((CompoundButton) group.getChildAt(i));
}
}
}
}
}

View File

@@ -3,31 +3,31 @@ package com.example.myapplication.bean;
import java.util.List;
public class BolBean {
private long id;
private String id;
private String question;
private List<?> option;
private boolean isM;//是否多选
private boolean isSingle;//是否多选
public BolBean(long id, String question, List<?> option, boolean isM) {
public BolBean(String id, String question, List<?> option, boolean isM) {
this.id = id;
this.question = question;
this.option = option;
this.isM = isM;
this.isSingle = isM;
}
public boolean isM() {
return isM;
public boolean isSingle() {
return isSingle;
}
public void setM(boolean m) {
isM = m;
isSingle = m;
}
public long getId() {
public String getId() {
return id;
}
public void setId(long id) {
public void setId(String id) {
this.id = id;
}

View File

@@ -0,0 +1,27 @@
package com.example.myapplication.bean;
public class ExamBean {
private String id;
private String answer;
public ExamBean(String id, String answer) {
this.id = id;
this.answer = answer;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
}

View File

@@ -0,0 +1,62 @@
package com.example.myapplication.bean;
public class ExamSubmitBean {
/**
* status :
* msg :
* body : {"grade":"0为不通过 1为通过 只有0和1"}
*/
private String status;
private String msg;
private BodyBean body;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public BodyBean getBody() {
return body;
}
public void setBody(BodyBean body) {
this.body = body;
}
public static class BodyBean {
/**
* grade : 0为不通过 1为通过 只有0和1
*/
private String grade;
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}
@Override
public String toString() {
return "ExamSubmitBean{" +
"status='" + status + '\'' +
", msg='" + msg + '\'' +
", body=" + body +
'}';
}
}

View File

@@ -80,15 +80,15 @@ public class MeasureBean {
* option : []
*/
private long id;
private String id;
private String question;
private List<?> option;
public long getId() {
public String getId() {
return id;
}
public void setId(long id) {
public void setId(String id) {
this.id = id;
}
@@ -107,6 +107,15 @@ public class MeasureBean {
public void setOption(List<?> option) {
this.option = option;
}
@Override
public String toString() {
return "SingleChoiceBean{" +
"id=" + id +
", question='" + question + '\'' +
", option=" + option +
'}';
}
}
public static class MultiChoiceBean {
@@ -116,15 +125,15 @@ public class MeasureBean {
* option : []
*/
private long id;
private String id;
private String question;
private List<?> option;
public long getId() {
public String getId() {
return id;
}
public void setId(long id) {
public void setId(String id) {
this.id = id;
}
@@ -143,7 +152,33 @@ public class MeasureBean {
public void setOption(List<?> option) {
this.option = option;
}
@Override
public String toString() {
return "MultiChoiceBean{" +
"id=" + id +
", question='" + question + '\'' +
", option=" + option +
'}';
}
}
@Override
public String toString() {
return "BodyBean{" +
"title='" + title + '\'' +
", singleChoice=" + singleChoice +
", multiChoice=" + multiChoice +
'}';
}
}
@Override
public String toString() {
return "MeasureBean{" +
"status=" + status +
", msg='" + msg + '\'' +
", body=" + body +
'}';
}
}

View File

@@ -16,6 +16,8 @@ import com.example.myapplication.adapter.CapacityMeasureAdapter;
import com.example.myapplication.base.BaseFragment;
import com.example.myapplication.bean.BolBean;
import com.example.myapplication.bean.CapacityMeasureBean;
import com.example.myapplication.bean.ExamBean;
import com.example.myapplication.bean.ExamSubmitBean;
import com.example.myapplication.bean.MeasureBean;
import com.example.myapplication.http.Callback;
import com.example.myapplication.http.HttpInterface;
@@ -24,10 +26,13 @@ import com.kongzue.dialog.interfaces.OnDialogButtonClickListener;
import com.kongzue.dialog.util.BaseDialog;
import com.kongzue.dialog.v3.MessageDialog;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 发现-能力测评条目点击进入测试页面
@@ -38,6 +43,7 @@ public class CapacityMeasurementFragment extends BaseFragment implements View.On
private CapacityMeasureAdapter capacityMeasureAdapter;
private ArrayList<BolBean> bolbean;
private Button btn;
private ArrayList<ExamBean> examBeans;
@Override
protected int getLayout() {
@@ -48,13 +54,14 @@ public class CapacityMeasurementFragment extends BaseFragment implements View.On
protected void initView() {
super.initView();
ivMeasurementFinish = (ImageView) findViewById(R.id.iv_measurement_finish);
btn = findViewById(R.id.btn);
btn.setOnClickListener(this::onClick);
capacityMeasurementRel = (RecyclerView) findViewById(R.id.capacity_measurementRel);
ivMeasurementFinish.setOnClickListener(this::onClick);
capacityMeasurementRel.setLayoutManager(new LinearLayoutManager(getActivity()));
capacityMeasureAdapter = new CapacityMeasureAdapter(getActivity());
capacityMeasurementRel.setAdapter(capacityMeasureAdapter);
btn = findViewById(R.id.btn);
btn.setOnClickListener(this::onClick);
}
@@ -62,6 +69,7 @@ public class CapacityMeasurementFragment extends BaseFragment implements View.On
protected void initData() {
super.initData();
bolbean = new ArrayList<>();
examBeans = new ArrayList<>();
initNetWorks(true);
}
@@ -69,7 +77,7 @@ public class CapacityMeasurementFragment extends BaseFragment implements View.On
private void initNetWorks(boolean b) {
OkGoBuilder.getInstance()
.Builder(getActivity())
.url(HttpInterface.MSG_LISt)
.url(HttpInterface.EXAM_CONTENT)
.method(OkGoBuilder.GET)
.cls(MeasureBean.class)
.json(new JSONObject())
@@ -78,9 +86,9 @@ public class CapacityMeasurementFragment extends BaseFragment implements View.On
public void onSuccess(MeasureBean response, int id) {
dismissLoadingDialog();
//单选
final List<MeasureBean.BodyBean.MultiChoiceBean> multiChoice = response.getBody().getMultiChoice();
List<MeasureBean.BodyBean.MultiChoiceBean> multiChoice = response.getBody().getMultiChoice();
//多选
final List<MeasureBean.BodyBean.SingleChoiceBean> singleChoice1 = response.getBody().getSingleChoice();
List<MeasureBean.BodyBean.SingleChoiceBean> singleChoice1 = response.getBody().getSingleChoice();
if (multiChoice != null) {
for (int i = 0; i < multiChoice.size(); i++) {
bolbean.add(new BolBean(multiChoice.get(i).getId(), multiChoice.get(i).getQuestion(), multiChoice.get(i).getOption(), true));
@@ -96,8 +104,8 @@ public class CapacityMeasurementFragment extends BaseFragment implements View.On
capacityMeasureAdapter.setMeasureList(bolbean);
}
Log.d("TAG", "onSuccess: " + response.toString()+ "sssssssssssss");
//Toast.makeText(getActivity(), response.getMsg() + "", Toast.LENGTH_SHORT).show();
Log.d("TAG", "onSuccess: " + response.toString() + "sssssssssssss");
}
@Override
@@ -116,14 +124,77 @@ public class CapacityMeasurementFragment extends BaseFragment implements View.On
getActivity().finish();
break;
case R.id.btn:
MessageDialog.show((AppCompatActivity) getActivity(),"提示","通过","确定","取消").setOkButton(new OnDialogButtonClickListener() {
@Override
public boolean onClick(BaseDialog baseDialog, View v) {
// Toast.makeText(getContext(), "点击了确定", Toast.LENGTH_SHORT).show();
return false;
try {
if (bolbean!=null){
Map<String , String> checkedMap = capacityMeasureAdapter.getCheckedMap();
for (int i = 0; i < bolbean.size(); i++) {
final String id = bolbean.get(i).getId();
if (!checkedMap.containsKey(id)||checkedMap.get(id)==null||("").equals(checkedMap.get(id))){
Toast.makeText(getContext(), "有题目未填写答案,请仔细检查!", Toast.LENGTH_SHORT).show();
return;
}
}
for(Map.Entry<String , String> entry : checkedMap.entrySet()) {
examBeans.add(new ExamBean(entry.getKey(),entry.getValue()));
}
initExamSubmit();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
break;
}
}
private void initExamSubmit() throws JSONException {
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < examBeans.size(); i++) {
JSONObject json = new JSONObject();
json.put("id", examBeans.get(i).getId());
json.put("answer", examBeans.get(i).getAnswer());
jsonArray.put(json);
}
examBeans.clear();
Log.d("TAG", "initExamSubmit: " + jsonArray.toString());
OkGoBuilder.getInstance()
.Builder(getActivity())
.url(HttpInterface.EXAM_SUBMIT)
.method(OkGoBuilder.POST)
.cls(ExamSubmitBean.class)
.jsonArray(jsonArray)
.callback(new Callback<ExamSubmitBean>() {
@Override
public void onSuccess(ExamSubmitBean response, int id) {
dismissLoadingDialog();
Log.d("TAG", "onSuccess: " + response.toString()+ "sssssssssssss");
if (response.getBody().getGrade().equals("0")){
MessageDialog.show((AppCompatActivity) getActivity(),"提示","不通过","确定","取消").setOkButton(new OnDialogButtonClickListener() {
@Override
public boolean onClick(BaseDialog baseDialog, View v) {
// Toast.makeText(getContext(), "点击了确定", Toast.LENGTH_SHORT).show();
return false;
}
});
}else {
MessageDialog.show((AppCompatActivity) getActivity(),"提示","通过","确定","取消").setOkButton(new OnDialogButtonClickListener() {
@Override
public boolean onClick(BaseDialog baseDialog, View v) {
// Toast.makeText(getContext(), "点击了确定", Toast.LENGTH_SHORT).show();
return false;
}
});
}
//Toast.makeText(getActivity(), response.getMsg() + "", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable e, int id) {
dismissLoadingDialog();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
Log.d("TAG", "onError: " + e.getMessage());
}
}).build();
}
}

View File

@@ -74,7 +74,7 @@ public class TaskExplainFragment extends BaseFragment implements View.OnClickLis
Intent itemIntent = new Intent(getActivity(), FragmentManagement.class);
itemIntent.putExtra("tag", 10);
startActivity(itemIntent);
//Toast.makeText(getContext(), "你猜"+pos, Toast.LENGTH_SHORT).show();
}
});
}
@@ -105,7 +105,7 @@ public class TaskExplainFragment extends BaseFragment implements View.OnClickLis
@Override
public void onError(Throwable e, int id) {
dismissLoadingDialog();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
// Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
Log.d("TAG", "onError: " + e.getMessage());
}
}).build();