package com.wise.wawc; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONObject; import com.wise.customView.EnergyCurveView; import com.wise.customView.EnergyGroup; import com.wise.data.CarData; import com.wise.data.EnergyItem; import com.wise.data.TimeData; import com.wise.extend.CarAdapter; import com.wise.extend.OnViewChangeListener; import com.wise.extend.OnViewTouchListener; import com.wise.pubclas.Constant; import com.wise.pubclas.GetSystem; import com.wise.pubclas.NetThread; import com.wise.pubclas.Variable; import com.wise.sql.DBExcute; import com.wise.sql.DBHelper; import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; /** * 我的车况,爱车车况 * @author honesty */ public class VehicleStatusActivity extends Activity { private static final String TAG = "VehicleStatusActivity"; private static final int Hide_rl = 1; private static final int get_data = 2; private static final int get_day = 3; private static final int get_DeviceStatus = 4; private DisplayMetrics dm = new DisplayMetrics(); LinearLayout ll_activity_vehicle_status_oil; RelativeLayout rl_status; TextView tv_activity_vehicle_status_oil, tv_month_hk_fuel,tv_fault,tv_alarm, tv_month_distance, tv_month_fuel,tv_vehicle_status_date; EnergyGroup hScrollLayout; CarAdapter carAdapter; // List<CarData> carDatas; boolean isWait = true; String device_id = "3"; int index ; //选择哪一天 TimeData timeData; DBExcute dbExcute = new DBExcute(); ArrayList<EnergyItem> Edistance = new ArrayList<EnergyItem>(); ArrayList<EnergyItem> Efuel = new ArrayList<EnergyItem>(); ArrayList<EnergyItem> Ehk_fuel = new ArrayList<EnergyItem>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_vehicle_status); rl_status = (RelativeLayout)findViewById(R.id.rl_status); ll_activity_vehicle_status_oil = (LinearLayout) findViewById(R.id.ll_activity_vehicle_status_oil); ll_activity_vehicle_status_oil.setOnClickListener(onClickListener); ImageView iv_activity_vehicle_status_data_next = (ImageView) findViewById(R.id.iv_activity_vehicle_status_data_next); iv_activity_vehicle_status_data_next.setOnClickListener(onClickListener); ImageView iv_activity_vehicle_status_data_previous = (ImageView) findViewById(R.id.iv_activity_vehicle_status_data_previous); iv_activity_vehicle_status_data_previous.setOnClickListener(onClickListener); ImageView iv_activity_vehicle_status_back = (ImageView) findViewById(R.id.iv_activity_vehicle_status_back); iv_activity_vehicle_status_back.setOnClickListener(onClickListener); tv_vehicle_status_date = (TextView)findViewById(R.id.tv_vehicle_status_date); tv_activity_vehicle_status_oil = (TextView) findViewById(R.id.tv_activity_vehicle_status_oil); tv_month_hk_fuel = (TextView) findViewById(R.id.tv_month_hk_fuel); tv_month_hk_fuel.setOnClickListener(onClickListener); tv_month_distance = (TextView) findViewById(R.id.tv_month_distance); tv_month_distance.setOnClickListener(onClickListener); tv_month_fuel = (TextView) findViewById(R.id.tv_month_fuel); tv_month_fuel.setOnClickListener(onClickListener); tv_fault = (TextView) findViewById(R.id.tv_fault); tv_fault.setOnClickListener(onClickListener); TextView tv_fault_title = (TextView) findViewById(R.id.tv_fault_title); tv_fault_title.setOnClickListener(onClickListener); tv_alarm = (TextView) findViewById(R.id.tv_alarm); tv_alarm.setOnClickListener(onClickListener); hScrollLayout = (EnergyGroup) findViewById(R.id.hscrollLayout); hScrollLayout.setOnViewChangeListener(onViewChangeListener); GridView gv_activity_vehicle_status = (GridView) findViewById(R.id.gv_activity_vehicle_status); carAdapter = new CarAdapter(VehicleStatusActivity.this,Variable.carDatas); gv_activity_vehicle_status.setAdapter(carAdapter); int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 120, getResources().getDisplayMetrics()); LayoutParams params = new LayoutParams((Variable.carDatas.size() * (px + 10) + 10), LayoutParams.WRAP_CONTENT); gv_activity_vehicle_status.setLayoutParams(params); gv_activity_vehicle_status.setColumnWidth(px); gv_activity_vehicle_status.setHorizontalSpacing(10); gv_activity_vehicle_status.setStretchMode(GridView.NO_STRETCH); gv_activity_vehicle_status.setNumColumns(Variable.carDatas.size()); gv_activity_vehicle_status.setOnItemClickListener(onItemClickListener); new Thread(new waitThread()).start(); timeData = GetSystem.GetNowMonth(); tv_vehicle_status_date.setText(timeData.getDate()); initView(); SharedPreferences preferences = getSharedPreferences(Constant.sharedPreferencesName, Context.MODE_PRIVATE); int index_car = preferences.getInt(Constant.DefaultVehicleID, 0); device_id = Variable.carDatas.get(index_car).getDevice_id(); carAdapter.notifyDataSetChanged(); getCarLocationDB(); getDeviceStatus(); } OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv_activity_vehicle_status_back: finish(); break; case R.id.tv_month_hk_fuel: hScrollLayout.snapToScreen(0); break; case R.id.tv_month_distance: hScrollLayout.snapToScreen(1); break; case R.id.tv_month_fuel: hScrollLayout.snapToScreen(2); break; case R.id.tv_fault_title: startActivity(new Intent(VehicleStatusActivity.this,CarFaultActivity.class)); break; case R.id.tv_fault: startActivity(new Intent(VehicleStatusActivity.this,CarFaultActivity.class)); break; case R.id.ll_activity_vehicle_status_oil: Intent intent = new Intent(VehicleStatusActivity.this, TravelActivity.class); intent.putExtra("Date", timeData.getDate() +"-" + Edistance.get(index).date); startActivity(intent); break; case R.id.iv_activity_vehicle_status_data_next: Toast.makeText(VehicleStatusActivity.this, "NEXT", Toast.LENGTH_SHORT).show(); timeData = GetSystem.GetNextMonth(timeData.getDate(), 1); tv_vehicle_status_date.setText(timeData.getDate()); GetTotalDB(); GetTripListDB(); break; case R.id.iv_activity_vehicle_status_data_previous: Toast.makeText(VehicleStatusActivity.this, "LAST", Toast.LENGTH_SHORT).show(); timeData = GetSystem.GetNextMonth(timeData.getDate(), -1); tv_vehicle_status_date.setText(timeData.getDate()); GetTotalDB(); GetTripListDB(); break; } } }; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case Hide_rl: ll_activity_vehicle_status_oil.setVisibility(View.GONE); break; case get_data: ContentValues values = new ContentValues(); values.put("device_id", device_id); values.put("tDate", timeData.getDate()); values.put("Content", msg.obj.toString()); dbExcute.InsertDB(VehicleStatusActivity.this, values, Constant.TB_TripTotal); showTotal(msg.obj.toString()); break; case get_day: ContentValues value = new ContentValues(); value.put("device_id", device_id); value.put("tDate", timeData.getDate()); value.put("Content", msg.obj.toString()); dbExcute.InsertDB(VehicleStatusActivity.this, value, Constant.TB_TripList); jsonDays(msg.obj.toString()); break; case get_DeviceStatus: Log.d(TAG, msg.obj.toString()); break; } } }; OnItemClickListener onItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { for(CarData carData : Variable.carDatas){ carData.setCheck(false); } Variable.carDatas.get(arg2).setCheck(true); carAdapter.notifyDataSetChanged(); device_id = Variable.carDatas.get(arg2).getDevice_id(); getCarLocationDB(); } }; private void getCarLocationDB(){ if(device_id == null || device_id.equals("")){ Toast.makeText(VehicleStatusActivity.this, "该车辆没有绑定终端,无法获取数据", Toast.LENGTH_SHORT).show(); }else{ GetTotalDB(); GetTripListDB(); } } /** * 显示提示框 * @param value */ private void ViewTouch(String value) { ll_activity_vehicle_status_oil.setVisibility(View.VISIBLE); tv_activity_vehicle_status_oil.setText(value + "L"); wait = 4; } boolean isFrist = true; int wait = 0; class waitThread extends Thread { @Override public void run() { super.run(); while (isWait) { try { if (wait > 0) { wait--; } else { Message message = new Message(); message.what = Hide_rl; handler.sendMessage(message); } Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 获取本地统计月统计数目信息并判断 */ private void GetTotalDB() { DBHelper dbHelper = new DBHelper(getApplicationContext()); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from " + Constant.TB_TripTotal + " where device_id=? and tDate =? ", new String[] {device_id,timeData.getDate()}); if(cursor.moveToFirst()){ showTotal(cursor.getString(cursor.getColumnIndex("Content"))); }else{ GetDataFromUrl(3, timeData.getYear(), timeData.getMonth()); } cursor.close(); db.close(); } /** * 获取每天的数据,画图 */ private void GetTripListDB(){ DBHelper dbHelper = new DBHelper(getApplicationContext()); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from " + Constant.TB_TripList + " where device_id=? and tDate =? ", new String[] {device_id,timeData.getDate()}); if(cursor.moveToFirst()){ jsonDays(cursor.getString(cursor.getColumnIndex("Content"))); }else{ GetDayFromUrl(3, timeData.getYear(), timeData.getMonth()); } cursor.close(); db.close(); } /** * 获取指定月的统计数据 * * @param device_id * @param year * @param month */ private void GetDataFromUrl(int device_id, String year, String month) { String url = Constant.BaseUrl + "device/" + device_id + "/trip_stat/month?auth_code=" + Variable.auth_code + "&year=" + year + "&month=" + month; new Thread(new NetThread.GetDataThread(handler, url, get_data)).start(); } /** * 显示统计信息 * * @param result */ private void showTotal(String result) { try { JSONObject jsonObject = new JSONObject(result); if (jsonObject.opt("month_distance") != null) { String html = String.format( getResources().getString(R.string.month_distance), jsonObject.getString("month_distance")); tv_month_distance.setText(html); } if (jsonObject.opt("month_fuel") != null) { String html = String.format( getResources().getString(R.string.month_fuel), jsonObject.getString("month_fuel")); tv_month_fuel.setText(html); } if (jsonObject.opt("month_hk_fuel") != null) { String month_hk_fuel = jsonObject.getString("month_hk_fuel"); month_hk_fuel = month_hk_fuel.substring(0, (month_hk_fuel.indexOf(".") + 2)); String html = String.format( getResources().getString(R.string.month_hk_fuel), month_hk_fuel); tv_month_hk_fuel.setText(html); } } catch (Exception e) { e.printStackTrace(); } } private void GetDayFromUrl(int device_id, String year, String month) { String url = Constant.BaseUrl + "device/" + device_id + "/trip_stat/day?auth_code=" + Variable.auth_code + "&year=" + year + "&month=" + month; new Thread(new NetThread.GetDataThread(handler, url, get_day)).start(); } private void jsonDays(String result) { try { Edistance.clear(); Efuel.clear(); Ehk_fuel.clear(); JSONArray jsonArray = new JSONArray(result); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String _id = jsonObject.getString("_id"); float day_distance = Float.valueOf(jsonObject.getString("day_distance")); float day_fuel = Float.valueOf(jsonObject.getString("day_fuel")); float day_hk_fuel = Float.valueOf(jsonObject.getString("day_hk_fuel")); Edistance.add(new EnergyItem(_id, day_distance, "a")); Efuel.add(new EnergyItem(_id, day_fuel, "a")); Ehk_fuel.add(new EnergyItem(_id, day_hk_fuel, "a")); } refreshView(); } catch (Exception e) { e.printStackTrace(); } } private void getDeviceStatus(){ String url = Constant.BaseUrl + "device/3/fault?auth_code=" + Variable.auth_code; new Thread(new NetThread.GetDataThread(handler, url, get_DeviceStatus)).start(); String url1 = Constant.BaseUrl + "device/3/alert?auth_code=" + Variable.auth_code; new Thread(new NetThread.GetDataThread(handler, url1, get_DeviceStatus)).start(); } EnergyCurveView View_hk_fuel,View_distance,View_ful; private void initView() { getWindowManager().getDefaultDisplay().getMetrics(dm); View_hk_fuel = new EnergyCurveView(getApplicationContext(), null); View_hk_fuel.setWindowsWH(dm); View_hk_fuel.initPoints(Ehk_fuel); View_hk_fuel.setOnViewTouchListener(onViewTouchListener); hScrollLayout.addView(View_hk_fuel); View_distance = new EnergyCurveView(getApplicationContext(), null); View_distance.setWindowsWH(dm); View_distance.initPoints(Edistance); View_distance.setOnViewTouchListener(onViewTouchListener); hScrollLayout.addView(View_distance); View_ful = new EnergyCurveView(getApplicationContext(),null); View_ful.setWindowsWH(dm); View_ful.initPoints(Efuel); View_ful.setOnViewTouchListener(onViewTouchListener); hScrollLayout.addView(View_ful); } private void refreshView(){ View_hk_fuel.initPoints(Ehk_fuel); View_hk_fuel.RefreshView(); View_distance.initPoints(Edistance); View_distance.RefreshView(); View_ful.initPoints(Efuel); View_ful.RefreshView(); } private void setBackground() { tv_month_hk_fuel.setBackgroundResource(R.color.white); tv_month_hk_fuel.setTextColor(getResources().getColor(R.color.common)); tv_month_distance.setBackgroundResource(R.color.white); tv_month_distance.setTextColor(getResources().getColor(R.color.common)); tv_month_fuel.setBackgroundResource(R.color.white); tv_month_fuel.setTextColor(getResources().getColor(R.color.common)); } /** * view长按后触发的touch事件 */ OnViewTouchListener onViewTouchListener = new OnViewTouchListener() { @Override public void OnViewTouch(String value, int index) { ViewTouch(value); } }; OnViewChangeListener onViewChangeListener = new OnViewChangeListener() { @Override public void OnViewChange(int view) { switch (view) { case 0: setBackground(); tv_month_hk_fuel.setBackgroundResource(R.color.blue); tv_month_hk_fuel.setTextColor(getResources().getColor(R.color.white)); break; case 1: setBackground(); tv_month_distance.setBackgroundResource(R.color.blue); tv_month_distance.setTextColor(getResources().getColor(R.color.white)); break; case 2: setBackground(); tv_month_fuel.setBackgroundResource(R.color.blue); tv_month_fuel.setTextColor(getResources().getColor(R.color.white)); break; } } @Override public void OnLastView() { } }; @Override protected void onDestroy() { super.onDestroy(); isWait = false; } }