package com.wise.wawc;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKShareUrlResult;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.platform.comapi.basestruct.GeoPoint;
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.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
* 车辆行程列表
* @author honesty
*/
public class TravelActivity extends Activity{
private static final String TAG = "TravelActivity";
private static final int get_data = 1;
TextView tv_travel_date,tv_distance,tv_fuel,tv_hk_fuel,tv_money;
ListView lv_activity_travel;
DBExcute dbExcute = new DBExcute();
List<TravelData> travelDatas = new ArrayList<TravelData>();
TravelAdapter travelAdapter;
String Date;
String device_id = "3";
MKSearch mkSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WawcApplication app = (WawcApplication)this.getApplication();
if (app.mBMapManager == null) {
app.mBMapManager = new BMapManager(getApplicationContext());
app.mBMapManager.init(WawcApplication.strKey,null);
}
setContentView(R.layout.activity_travel);
tv_travel_date = (TextView)findViewById(R.id.tv_travel_date);
tv_distance = (TextView)findViewById(R.id.tv_distance);
tv_fuel = (TextView)findViewById(R.id.tv_fuel);
tv_hk_fuel = (TextView)findViewById(R.id.tv_hk_fuel);
tv_money = (TextView)findViewById(R.id.tv_money);
ImageView iv_activity_travel_back = (ImageView)findViewById(R.id.iv_activity_travel_back);
iv_activity_travel_back.setOnClickListener(onClickListener);
ImageView iv_activity_travel_data_next = (ImageView)findViewById(R.id.iv_activity_travel_data_next);
iv_activity_travel_data_next.setOnClickListener(onClickListener);
ImageView iv_activity_travel_data_previous = (ImageView)findViewById(R.id.iv_activity_travel_data_previous);
iv_activity_travel_data_previous.setOnClickListener(onClickListener);
lv_activity_travel = (ListView)findViewById(R.id.lv_activity_travel);
travelAdapter = new TravelAdapter();
lv_activity_travel.setAdapter(travelAdapter);
Intent intent = getIntent();
Date = intent.getStringExtra("Date");
tv_travel_date.setText(Date);
mkSearch = new MKSearch();
mkSearch.init(app.mBMapManager, mkSearchListener);
GetTripDB();
}
OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_activity_travel_back:
finish();
break;
case R.id.iv_activity_travel_data_next://下一日
Date = GetSystem.GetNextData(Date, 1);
tv_travel_date.setText(Date);
GetTripDB();
break;
case R.id.iv_activity_travel_data_previous://上一日
Date = GetSystem.GetNextData(Date, -1);
tv_travel_date.setText(Date);
GetTripDB();
break;
}
}
};
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case get_data:
jsonData(msg.obj.toString());
ContentValues value = new ContentValues();
value.put("Device_id", device_id);
value.put("tDate", Date);
value.put("Content", msg.obj.toString());
dbExcute.InsertDB(TravelActivity.this, value, Constant.TB_Trip);
break;
default:
break;
}
}
};
/**
* 解析数据
* @param result
*/
private void jsonData(String result){
try {
travelDatas.clear();
JSONObject jsonObject = new JSONObject(result);
String distance = String.format(
getResources().getString(R.string.distance),
jsonObject.getString("day_distance"));
tv_distance.setText(distance);
String fuel = String.format(
getResources().getString(R.string.fuel),
jsonObject.getString("day_fuel"));
tv_fuel.setText(fuel);
String hk_fuel = String.format(
getResources().getString(R.string.hk_fuel),
jsonObject.getString("day_hk_fuel"));
tv_hk_fuel.setText(hk_fuel);
JSONArray jsonArray = jsonObject.getJSONArray("data");
for(int i = 0 ; i < jsonArray.length(); i++){
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
TravelData travelData = new TravelData();
travelData.setStartTime(jsonObject2.getString("start_time").replace("T", " ").substring(0, 19));
travelData.setStopTime(jsonObject2.getString("end_time").replace("T", " ").substring(0, 19));
travelData.setSpacingTime(GetSystem.ProcessTime(jsonObject2.getInt("travel_duration")));
travelData.setStart_lat(jsonObject2.getString("start_lat"));
travelData.setStart_lon(jsonObject2.getString("start_lon"));
travelData.setEnd_lat(jsonObject2.getString("end_lat"));
travelData.setEnd_lon(jsonObject2.getString("end_lon"));
travelData.setStart_place("起始位置");
travelData.setEnd_place("结束位置");
travelData.setSpacingDistance(jsonObject2.getString("distance"));
travelData.setAverageOil("百公里油耗:9.9L");
travelData.setOil("油耗:"+jsonObject2.getString("act_fuel") +"L");
travelData.setSpeed("平均速度:"+jsonObject2.getString("avg_speed") +"km/h");
travelData.setCost("花费:11.34元");
travelDatas.add(travelData);
}
travelAdapter.notifyDataSetChanged();
if(travelDatas.size() > 0){
i = 0;
isFrist = true;
GeoPoint point = new GeoPoint(GetSystem.StringToInt(travelDatas.get(i).getStart_lat()),
GetSystem.StringToInt(travelDatas.get(i).getStart_lon()));
mkSearch.reverseGeocode(point);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
private void GetTripDB(){
DBHelper dbHelper = new DBHelper(getApplicationContext());
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + Constant.TB_Trip
+ " where Device_id=? and tDate =? ", new String[] {device_id,Date});
if(cursor.moveToFirst()){
jsonData(cursor.getString(cursor.getColumnIndex("Content")));
}else{
GetDataTrip();
}
cursor.close();
db.close();
}
/**
* 从服务器上获取数据
*/
private void GetDataTrip(){
String url = Constant.BaseUrl + "device/3/trip?auth_code=" + Variable.auth_code +
"&day=" + Date;
new Thread(new NetThread.GetDataThread(handler, url, get_data)).start();
}
private class TravelAdapter extends BaseAdapter{
LayoutInflater mInflater = LayoutInflater.from(TravelActivity.this);
@Override
public int getCount() {
return travelDatas.size();
}
@Override
public Object getItem(int position) {
return travelDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_travel, null);
holder = new ViewHolder();
holder.tv_item_travel_startTime = (TextView) convertView.findViewById(R.id.tv_item_travel_startTime);
holder.tv_item_travel_stopTime = (TextView)convertView.findViewById(R.id.tv_item_travel_stopTime);
holder.tv_item_travel_startPlace = (TextView)convertView.findViewById(R.id.tv_item_travel_startPlace);
holder.tv_item_travel_stopPlace = (TextView)convertView.findViewById(R.id.tv_item_travel_stopPlace);
holder.tv_item_travel_spacingDistance = (TextView)convertView.findViewById(R.id.tv_item_travel_spacingDistance);
holder.tv_item_travel_averageOil = (TextView)convertView.findViewById(R.id.tv_item_travel_averageOil);
holder.tv_item_travel_oil = (TextView)convertView.findViewById(R.id.tv_item_travel_oil);
holder.tv_item_travel_speed = (TextView)convertView.findViewById(R.id.tv_item_travel_speed);
holder.tv_item_travel_cost = (TextView)convertView.findViewById(R.id.tv_item_travel_cost);
holder.iv_item_travel_map = (ImageView)convertView.findViewById(R.id.iv_item_travel_map);
holder.iv_item_travel_share = (ImageView)convertView.findViewById(R.id.iv_item_travel_share);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final TravelData travelData = travelDatas.get(position);
holder.tv_item_travel_startTime.setText(travelData.getStartTime().substring(10, 16));
holder.tv_item_travel_stopTime.setText(travelData.getStopTime().substring(10, 16));
holder.tv_item_travel_startPlace.setText(travelData.getStart_place());
holder.tv_item_travel_stopPlace.setText(travelData.getEnd_place());
holder.tv_item_travel_spacingDistance.setText("共"+travelData.getSpacingDistance() + "公里\\" + travelData.getSpacingTime());
holder.tv_item_travel_averageOil.setText(travelData.getAverageOil());
holder.tv_item_travel_oil.setText(travelData.getOil());
holder.tv_item_travel_speed.setText(travelData.getSpeed());
holder.tv_item_travel_cost.setText(travelData.getCost());
holder.iv_item_travel_share.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
StringBuffer sb = new StringBuffer();
sb.append("【行程】 ");
sb.append(travelData.getStartTime().substring(5, 16));
sb.append(" 从" + travelData.getStart_place());
sb.append("到" + travelData.getEnd_place());
sb.append(",共行驶" + travelData.getSpacingDistance());
sb.append("公里,耗时" + travelData.getSpacingTime());
sb.append("," + travelData.getOil());
sb.append("," + travelData.getCost());
sb.append("," + travelData.getAverageOil());
sb.append("," + travelData.getSpeed());
System.out.println(sb.toString());
GetSystem.share(TravelActivity.this, sb.toString(), "",0,0,"行程","");
}
});
holder.iv_item_travel_map.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(TravelActivity.this, TravelMapActivity.class);
intent.putExtra("StartTime", travelDatas.get(position).getStartTime());
intent.putExtra("StopTime", travelDatas.get(position).getStopTime());
intent.putExtra("Start_place", travelDatas.get(position).getStart_place());
intent.putExtra("End_place", travelDatas.get(position).getEnd_place());
intent.putExtra("SpacingDistance", travelDatas.get(position).getSpacingDistance());
intent.putExtra("SpacingTime", travelDatas.get(position).getSpacingTime());
intent.putExtra("AverageOil", travelDatas.get(position).getAverageOil());
intent.putExtra("Oil", travelDatas.get(position).getOil());
intent.putExtra("Speed", travelDatas.get(position).getSpeed());
intent.putExtra("Cost", travelDatas.get(position).getCost());
TravelActivity.this.startActivity(intent);
}
});
return convertView;
}
private class ViewHolder {
TextView tv_item_travel_startTime,tv_item_travel_stopTime,
tv_item_travel_startPlace,tv_item_travel_stopPlace,tv_item_travel_spacingDistance,
tv_item_travel_averageOil,tv_item_travel_oil,tv_item_travel_speed,tv_item_travel_cost;
ImageView iv_item_travel_map,iv_item_travel_share;
}
}
private class TravelData{
String startTime;
String stopTime;
String spacingTime;
String start_lat;
String start_lon;
String start_place;
String end_lat;
String end_lon;
String end_place;
String spacingDistance;
String oil;
String averageOil;
String speed;
String cost;
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getStopTime() {
return stopTime;
}
public void setStopTime(String stopTime) {
this.stopTime = stopTime;
}
public String getSpacingTime() {
return spacingTime;
}
public void setSpacingTime(String spacingTime) {
this.spacingTime = spacingTime;
}
public String getStart_lat() {
return start_lat;
}
public void setStart_lat(String start_lat) {
this.start_lat = start_lat;
}
public String getStart_lon() {
return start_lon;
}
public void setStart_lon(String start_lon) {
this.start_lon = start_lon;
}
public String getEnd_lat() {
return end_lat;
}
public void setEnd_lat(String end_lat) {
this.end_lat = end_lat;
}
public String getEnd_lon() {
return end_lon;
}
public void setEnd_lon(String end_lon) {
this.end_lon = end_lon;
}
public String getStart_place() {
return start_place;
}
public void setStart_place(String start_place) {
this.start_place = start_place;
}
public String getEnd_place() {
return end_place;
}
public void setEnd_place(String end_place) {
this.end_place = end_place;
}
public String getSpacingDistance() {
return spacingDistance;
}
public void setSpacingDistance(String spacingDistance) {
this.spacingDistance = spacingDistance;
}
public String getOil() {
return oil;
}
public void setOil(String oil) {
this.oil = oil;
}
public String getAverageOil() {
return averageOil;
}
public void setAverageOil(String averageOil) {
this.averageOil = averageOil;
}
public String getSpeed() {
return speed;
}
public void setSpeed(String speed) {
this.speed = speed;
}
public String getCost() {
return cost;
}
public void setCost(String cost) {
this.cost = cost;
}
}
int i = 0;
boolean isFrist = true;
MKSearchListener mkSearchListener = new MKSearchListener() {
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {}
@Override
public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1, int arg2) {}
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {}
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
if(arg0.type == MKAddrInfo.MK_REVERSEGEOCODE){
String strInfo = arg0.strAddr;
strInfo = strInfo.substring((strInfo.indexOf("市") + 1), strInfo.length());
if(isFrist){//起点位置取完,在取结束位置
travelDatas.get(i).setStart_place(strInfo);
isFrist = false;
GeoPoint point = new GeoPoint(GetSystem.StringToInt(travelDatas.get(i).getEnd_lat()),
GetSystem.StringToInt(travelDatas.get(i).getEnd_lon()));
mkSearch.reverseGeocode(point);
i++;
}else{
travelDatas.get(i-1).setEnd_place(strInfo);
if(travelDatas.size() == i){
System.out.println("递归完毕");
}else{
isFrist = true;
GeoPoint point = new GeoPoint(GetSystem.StringToInt(travelDatas.get(i).getStart_lat()),
GetSystem.StringToInt(travelDatas.get(i).getStart_lon()));
mkSearch.reverseGeocode(point);
}
}
travelAdapter.notifyDataSetChanged();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
}