.gradle/3.3/taskArtifacts/fileHashes.binBinary files differ
.gradle/3.3/taskArtifacts/fileSnapshots.binBinary files differ
.gradle/3.3/taskArtifacts/taskArtifacts.binBinary files differ
.gradle/3.3/taskArtifacts/taskArtifacts.lockBinary files differ
.gradle/3.3/tasks/_app_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.binBinary files differ
.gradle/3.3/tasks/_app_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lockBinary files differ
.gradle/3.3/tasks/_app_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lockBinary files differ
app/src/main/java/com/moral/yunfushao/activity/ChartActivity.java
@@ -8,14 +8,23 @@ import android.widget.RadioGroup; import android.widget.TextView; import com.lzy.okgo.cache.CacheMode; import com.moral.andbrickslib.utils.FastJsonTools; import com.moral.andbrickslib.utils.TimeUtil; import com.moral.yunfushao.MainApp; import com.moral.yunfushao.R; import com.moral.yunfushao.base.BaseActivity; import com.moral.yunfushao.common.API; import com.moral.yunfushao.httputils.HttpCallBack; import com.moral.yunfushao.httputils.HttpUtils; import com.moral.yunfushao.model.UserData; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random; import lecho.lib.hellocharts.formatter.LineChartValueFormatter; import lecho.lib.hellocharts.formatter.SimpleLineChartValueFormatter; import lecho.lib.hellocharts.gesture.ContainerScrollType; import lecho.lib.hellocharts.gesture.ZoomType; import lecho.lib.hellocharts.model.Axis; @@ -41,7 +50,7 @@ private List<AxisValue> mAxisXValues = new ArrayList<>(); private RadioGroup rg_time; private TextView tv_starttime,tv_endtime; private TextView tv_starttime,tv_endtime,tv_value; private ImageView iv_pre,iv_next; private int type=0; @Override @@ -64,6 +73,7 @@ rg_time = findView(R.id.rg_time); tv_starttime = findView(R.id.tv_starttime); tv_endtime = findView(R.id.tv_endtime); tv_value = findView(R.id.tv_value); iv_pre = findView(R.id.iv_pre); iv_next = findView(R.id.iv_next); rg_time.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @@ -77,6 +87,7 @@ chartView.setLineChartData(data); tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",TimeUtil.getCurrentDate("yyyy-MM-dd"),-1)); tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-7)); getData(tv_starttime.getText().toString(),tv_endtime.getText().toString()); break; case R.id.rb_month: type = 1; @@ -85,12 +96,14 @@ chartView.setLineChartData(data); tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",TimeUtil.getCurrentDate("yyyy-MM-dd"),-1)); tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-28)); getData(tv_starttime.getText().toString(),tv_endtime.getText().toString()); break; } } }); tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",TimeUtil.getCurrentDate("yyyy-MM-dd"),-1)); tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-7)); getData(tv_starttime.getText().toString(),tv_endtime.getText().toString()); } @Override @@ -101,7 +114,7 @@ @Override protected void initData() { reshowChart(); reshowChart(dataList); } @Override @@ -118,6 +131,7 @@ tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),-1)); tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-28)); } getData(tv_starttime.getText().toString(),tv_endtime.getText().toString()); break; case R.id.iv_next: if(TimeUtil.getCurrentDate("yyyy-MM-dd").equals(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),1))){ @@ -130,6 +144,7 @@ tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),1)); tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),28)); } getData(tv_starttime.getText().toString(),tv_endtime.getText().toString()); break; } @@ -145,12 +160,14 @@ List<Line> lines = new ArrayList<>(); line.setShape(ValueShape.CIRCLE);//折线图上每个数据点的形状 这里是圆形 (有三种 :ValueShape.SQUARE ValueShape.CIRCLE ValueShape.DIAMOND) line.setPointColor(Color.parseColor("#20DAE5")); line.setCubic(true);//曲线是否平滑,即是曲线还是折线 line.setCubic(false);//曲线是否平滑,即是曲线还是折线 line.setFilled(false);//是否填充曲线的面积 line.setHasLabels(true);//曲线的数据坐标是否加上备注 // line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效) line.setHasLines(true);//是否用线显示。如果为false 则没有曲线只有点显示 line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示(每个数据点都是个大的圆点) LineChartValueFormatter chartValueFormatter = new SimpleLineChartValueFormatter(3); line.setFormatter(chartValueFormatter);//显示小数点 lines.add(line); data = new LineChartData(); data.setLines(lines); @@ -160,9 +177,9 @@ //坐标轴 axisX = new Axis(); //X轴 axisX.setHasTiltedLabels(false); //X坐标轴字体是斜的显示还是直的,true是斜的显示 axisX.setHasTiltedLabels(true); //X坐标轴字体是斜的显示还是直的,true是斜的显示 axisX.setName("时间段(按周)"); //表格名称 axisX.setTextSize(10);//设置字体大小 axisX.setTextSize(8);//设置字体大小 axisX.setTextColor(getResources().getColor(R.color.red_txt)); // axisX.setMaxLabelChars(7); //最多几个X轴坐标,意思就是你的缩放让X轴上数据的个数7<=x<=mAxisXValues.length axisX.setValues(mAxisXValues); //填充X轴的坐标名称 @@ -173,7 +190,7 @@ //data.setAxisXTop(axisX); //x 轴在顶部 // Y轴是根据数据的大小自动设置Y轴上限(在下面我会给出固定Y轴数据个数的解决方案) axisY = Axis.generateAxisFromRange(0,100,1); //Y轴 axisY = Axis.generateAxisFromRange(0,100, (float) 0.01); //Y轴 axisY.setAutoGenerated(false); axisY.setHasLines(true); axisY.setHasSeparationLine(true); @@ -194,7 +211,15 @@ * 当时是为了解决X轴固定数据个数。见(http://forum.xda-developers.com/tools/programming/library-hellocharts-charting-library-t2904456/page2); */ // chartView.setCurrentViewport(initViewPort(0,7)); chartView.startDataAnimation(); final Viewport v = new Viewport(chartView.getMaximumViewport()); v.bottom = 0; v.top = 100; // // You have to set max and current viewports separately. chartView.setMaximumViewport(v); // // I changing current viewport with animation in this case. //// lineChartCO2.setCurrentViewportWithAnimation(v); chartView.setCurrentViewport(v); // chartView.startDataAnimation(); } private Viewport initViewPort(float left, float right) { @@ -204,15 +229,17 @@ return port; } Random random = new Random(); private void reshowChart() { private void reshowChart(final ArrayList<UserData> dataList) { chartView.post(new Runnable() { @Override public void run() { for (int i=0;i<10;i++){ mPointValues.add(new PointValue(i,random.nextInt(100)%(100-0+1) + 0)); mAxisXValues.add(new AxisValue(i).setLabel(i + "")); mPointValues.clear(); mAxisXValues.clear(); for (int i=0;i<dataList.size();i++){ mPointValues.add(new PointValue(i,dataList.get(i).getDay_avg())); mAxisXValues.add(new AxisValue(i).setLabel(dataList.get(i).getDate().substring(5,10))); // mAxisXValues.add(new AxisValue(i).setLabel(i+"")); } axisX.setValues(mAxisXValues); @@ -223,14 +250,93 @@ data.setLines(lines); chartView.setLineChartData(data); final Viewport v = new Viewport(chartView.getMaximumViewport()); v.bottom = -5; v.top = 100 + 5; // You have to set max and current viewports separately. v.bottom = 0; v.top = 100; //// // You have to set max and current viewports separately. chartView.setMaximumViewport(v); // I changing current viewport with animation in this case. // lineChartCO2.setCurrentViewportWithAnimation(v); // // I changing current viewport with animation in this case. //// lineChartCO2.setCurrentViewportWithAnimation(v); chartView.setCurrentViewport(v); } }); } private ArrayList<UserData> dataList = new ArrayList<>(); private void getData(String startTime,String endTime){ HashMap<String,String> params = new HashMap<>(); params.put("user_id", MainApp.userId); params.put("start_time", startTime); params.put("end_time", endTime); HttpUtils.doPost(API.GETUSERDATALIST, params, CacheMode.DEFAULT, true, new HttpCallBack() { @Override public void onSuccess(String res, String msg) { if(progressDialog.isShowing()){ progressDialog.dismiss(); } ArrayList<UserData> temp = (ArrayList<UserData>) FastJsonTools.getArrayJson(res,UserData.class); dataList.clear(); dataList.addAll(resetData(temp)); //重绘 reshowChart(dataList); } @Override public void showLoadingDialog() { progressDialog.show(); } @Override public void onFail(int errno, String s) { if(progressDialog.isShowing()){ progressDialog.dismiss(); } dataList.clear(); dataList.addAll(resetData(new ArrayList<UserData>())); //重绘 reshowChart(dataList); tv_value.setText(0+"uSv"); } }); } private ArrayList<UserData> resetData(ArrayList<UserData> tempList){ ArrayList<UserData> newList = new ArrayList<>(); if(type == 0){//周 for (int i=0;i<7;i++){ UserData data = new UserData(); data.setDate(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),i)); data.setDay_avg(0); newList.add(data); } }else if(type == 1){//月 for (int i=0;i<7;i++){ UserData data = new UserData(); data.setDate(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),i*4)); data.setDay_avg(0); newList.add(data); } } //重构数据 float totalValues = 0; if(tempList!=null&&tempList.size()>0){ for (UserData data : tempList){ totalValues+= data.getDay_avg(); for(UserData data1 : newList){ if(data.getDate().equals(data1.getDate())){ data1.setDay_avg(data.getDay_avg()); } } } tv_value.setText(totalValues/tempList.size()+"uSv"); }else{ tv_value.setText(0+"uSv"); } return newList; } } app/src/main/java/com/moral/yunfushao/ble/BLECommon.java
@@ -8,5 +8,6 @@ public class BLECommon { //服务UUID public final static String USR_SERVICE = "0003cdd0-0000-1000-8000-00805f9b0131"; public final static String BLE_SEARCH = "6A09010002006B"; } app/src/main/java/com/moral/yunfushao/common/API.java
@@ -20,4 +20,6 @@ public final static String UPLOAD = URL_HTTP + "Data.upload";//上传数据 public final static String UPDATEUSERINFO = URL_HTTP + "User.UpdateUserInfo";//修改个人数据 public final static String GETUSERDATALIST = URL_HTTP + "Data.GetUserDataList";//历史记录 } app/src/main/java/com/moral/yunfushao/common/AppConfig.java
@@ -8,4 +8,5 @@ public static final int DEFAULT_SIZE = 10; public static final int GET_BLE_SERVICE = 1; public static final int GET_BLE_DISCONNECT = 2; public static final int CHANGE_SETTING = 3; } app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
@@ -197,6 +197,14 @@ pv.setPercent(0); tv_ljjl.setText("0"); tv_shishi.setText("0"); }else if(msg.getType() == AppConfig.CHANGE_SETTING){ if(timer!=null){ timer.cancel(); timer = null; } submitTime = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getRefresh_frequency(); isupLoad = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getIs_open_upload(); doTask(); } } @@ -242,11 +250,13 @@ iv_his.setOnClickListener(this); iv_search.setOnClickListener(this); } int submitTime; int isupLoad; @Override protected void initData() { submitTime = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getRefresh_frequency(); isupLoad = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getIs_open_upload(); doTask(); } @Override @@ -268,7 +278,7 @@ if(mBluetoothService==null){ return; } mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(),mBluetoothService.getWirteCharacteristic().getUuid().toString(),"5A0014010001000000000000004600000000005B",null); mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(),mBluetoothService.getWirteCharacteristic().getUuid().toString(),BLECommon.BLE_SEARCH,null); break; } @@ -278,8 +288,6 @@ protected void onErrorPagerClick() { } private boolean isFinish = false; Timer timer; private void doTask() { @@ -287,12 +295,12 @@ timer.schedule(new TimerTask() { @Override public void run() { if (!isFinish) { if (isupLoad == 1) { //上传数据 submitData(); } } }, 0, 10000); }, 0, submitTime); } private void submitData() { app/src/main/java/com/moral/yunfushao/fragment/FragmentSettings.java
@@ -16,8 +16,12 @@ import com.moral.yunfushao.activity.VoiceSetActivity; import com.moral.yunfushao.base.BaseFragment; import com.moral.yunfushao.common.API; import com.moral.yunfushao.common.AppConfig; import com.moral.yunfushao.httputils.HttpCallBack; import com.moral.yunfushao.httputils.HttpUtils; import com.moral.yunfushao.model.EventMessage; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.HashMap; @@ -145,7 +149,9 @@ }else if("is_open_upload".equals(field)){ MainApp.theApp.sharedPreferencesUtil.setUpload(Integer.parseInt(value)); } EventMessage event = new EventMessage(); event.setType(AppConfig.CHANGE_SETTING); EventBus.getDefault().post(event); if (progressDialog.isShowing()) { progressDialog.dismiss(); } app/src/main/java/com/moral/yunfushao/model/UserData.java
New file @@ -0,0 +1,56 @@ package com.moral.yunfushao.model; import com.alibaba.fastjson.annotation.JSONField; /** * Created by haijiang on 2017/8/8. */ public class UserData { @JSONField(name="_id") private String _id;//": "598818ee9e74bba828fb1960", private String user_id;//": "597bf6a1a0e6d23f5c3c9869", private float day_avg;//": "0.068", private String date;//": "2017-08-02", private String create_time;//": "2017-08-07 15:38:22" public String get_id() { return _id; } public void set_id(String _id) { this._id = _id; } public String getUser_id() { return user_id; } public void setUser_id(String user_id) { this.user_id = user_id; } public float getDay_avg() { return day_avg; } public void setDay_avg(float day_avg) { this.day_avg = day_avg; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getCreate_time() { return create_time; } public void setCreate_time(String create_time) { this.create_time = create_time; } } app/src/main/res/layout/ac_charts_layout.xml
@@ -118,6 +118,7 @@ android:text="平均值" /> <TextView android:id="@+id/tv_value" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/x6" app/src/main/res/layout/fragment_monitor_layout.xml
@@ -14,9 +14,9 @@ android:layout_width="@dimen/x20" android:layout_height="@dimen/x20" android:padding="@dimen/x4" android:src="@mipmap/icon_history" android:src="@mipmap/icon_find" android:layout_centerVertical="true" android:layout_marginRight="@dimen/x16" android:layout_marginLeft="@dimen/x16" /> <TextView android:id="@+id/tv_title" app/src/main/res/mipmap-xxhdpi/icon_find.png
build/android-profile/profile-2017-08-08-08-31-35-688.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-08-32-37-679.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-09-09-29-719.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-09-38-19-496.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-09-43-42-143.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-09-45-14-995.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-09-48-19-335.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-09-49-26-011.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-09-52-23-953.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-09-54-08-973.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-00-18-383.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-03-41-677.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-09-11-877.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-12-14-432.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-13-40-162.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-32-39-938.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-33-59-541.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-41-47-446.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-43-52-075.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-45-07-572.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-10-54-04-880.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-11-10-28-423.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-11-12-28-001.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-11-12-54-353.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-11-25-47-669.rawprotoBinary files differ
build/android-profile/profile-2017-08-08-11-27-54-968.rawprotoBinary files differ
build/android-profile/profile-2017-08-09-13-44-18-198.rawprotoBinary files differ
build/android-profile/profile-2017-08-09-13-45-43-901.rawprotoBinary files differ
build/android-profile/profile-2017-08-09-13-46-19-228.rawprotoBinary files differ
build/android-profile/profile-2017-08-09-13-50-29-287.rawprotoBinary files differ
build/android-profile/profile-2017-08-10-14-03-54-685.rawprotoBinary files differ
build/android-profile/profile-2017-08-10-14-04-14-234.rawprotoBinary files differ
build/android-profile/profile-2017-08-11-08-58-50-769.rawprotoBinary files differ
build/android-profile/profile-2017-08-11-08-59-07-538.rawprotoBinary files differ
build/android-profile/profile-2017-08-11-09-09-21-642.rawprotoBinary files differ
build/android-profile/profile-2017-08-11-09-11-59-541.rawprotoBinary files differ