package com.wise.wawc; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; import com.wise.extend.CarAdapter; import com.wise.list.XListView; import com.wise.list.XListView.IXListViewListener; import com.wise.pubclas.Constant; import com.wise.pubclas.GetSystem; import com.wise.pubclas.NetThread; import com.wise.pubclas.Variable; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.LinearLayout.LayoutParams; /** * 车辆违章 * @author honesty */ public class TrafficActivity extends Activity implements IXListViewListener{ private static final String TAG = "TrafficActivity"; private static final int refresh_traffic = 2; private static final int load_traffic = 3; HorizontalScrollView hsv_car; XListView lv_activity_traffic; RelativeLayout rl_Note; LinearLayout ll_info; TextView tv_total_score,tv_total_fine; CarAdapter carAdapter; List<TrafficData> trafficDatas = new ArrayList<TrafficData>(); TrafficAdapter trafficAdapter; String Car_name = ""; int total_score = 0; int total_fine = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_traffic); rl_Note = (RelativeLayout)findViewById(R.id.rl_Note); ll_info = (LinearLayout)findViewById(R.id.ll_info); ImageView iv_activity_traffic_back = (ImageView)findViewById(R.id.iv_activity_traffic_back); iv_activity_traffic_back.setOnClickListener(onClickListener); tv_total_score = (TextView)findViewById(R.id.tv_total_score); tv_total_fine = (TextView)findViewById(R.id.tv_total_fine); lv_activity_traffic = (XListView)findViewById(R.id.lv_activity_traffic); lv_activity_traffic.setXListViewListener(this); lv_activity_traffic.setPullLoadEnable(true); lv_activity_traffic.setPullRefreshEnable(true); trafficAdapter = new TrafficAdapter(); lv_activity_traffic.setAdapter(trafficAdapter); hsv_car = (HorizontalScrollView)findViewById(R.id.hsv_car); GridView gv_activity_traffic = (GridView)findViewById(R.id.gv_activity_traffic); carAdapter = new CarAdapter(TrafficActivity.this,Variable.carDatas); gv_activity_traffic.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_traffic.setLayoutParams(params); gv_activity_traffic.setColumnWidth(px); gv_activity_traffic.setHorizontalSpacing(10); gv_activity_traffic.setStretchMode(GridView.NO_STRETCH); gv_activity_traffic.setNumColumns(Variable.carDatas.size()); gv_activity_traffic.setOnItemClickListener(onItemClickListener); if (Variable.carDatas != null && Variable.carDatas.size() > 0) { SharedPreferences preferences = getSharedPreferences(Constant.sharedPreferencesName, Context.MODE_PRIVATE); int DefaultVehicleID = preferences.getInt(Constant.DefaultVehicleID, 0); GetData(DefaultVehicleID); if(Variable.carDatas.size() == 1){ hsv_car.setVisibility(View.GONE); }else{ hsv_car.setVisibility(View.VISIBLE); } } } Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case refresh_traffic: trafficDatas.addAll(0, jsonTrafficData(msg.obj.toString())); trafficAdapter.notifyDataSetChanged(); tv_total_score.setText(String.format(getResources().getString(R.string.total_score),total_score)); tv_total_fine.setText(String.format(getResources().getString(R.string.total_fine),total_fine)); onLoad(); if(trafficDatas.size() == 0){ isNothingNote(true); }else{ isNothingNote(false); } break; case load_traffic: List<TrafficData> Datas = jsonTrafficData(msg.obj.toString()); trafficDatas.addAll(Datas); trafficAdapter.notifyDataSetChanged(); onLoad(); if(trafficDatas.size() == 0){ isNothingNote(true); }else{ isNothingNote(false); } tv_total_score.setText(String.format(getResources().getString(R.string.total_score),total_score)); tv_total_fine.setText(String.format(getResources().getString(R.string.total_fine),total_fine)); if(Datas.size() == 0){ lv_activity_traffic.setPullLoadEnable(false); } break; } } }; OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv_activity_traffic_back: finish(); break; } } }; OnItemClickListener onItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { lv_activity_traffic.setPullLoadEnable(true); GetData(arg2); } }; private void GetData(int arg2){ for(int i = 0 ; i < Variable.carDatas.size() ; i++){ Variable.carDatas.get(i).setCheck(false); } Variable.carDatas.get(arg2).setCheck(true); carAdapter.notifyDataSetChanged(); trafficDatas.clear(); Car_name = Variable.carDatas.get(arg2).getObj_name(); total_score = 0; total_fine = 0; lv_activity_traffic.setPullLoadEnable(true); //从服务器读取数据 Log.d(TAG, "从服务器读取数据"); try { String url = Constant.BaseUrl + "vehicle/" + URLEncoder.encode(Car_name, "UTF-8") + "/violation?auth_code=" + Variable.auth_code; new Thread(new NetThread.GetDataThread(handler, url, refresh_traffic)).start(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } private void isNothingNote(boolean isNote){ if(isNote){ rl_Note.setVisibility(View.VISIBLE); ll_info.setVisibility(View.GONE); }else{ rl_Note.setVisibility(View.GONE); ll_info.setVisibility(View.VISIBLE); } } /** * 解析json数据 * @param result */ private List<TrafficData> jsonTrafficData(String result){ List<TrafficData> Datas = new ArrayList<TrafficData>(); try { JSONObject jsonObject1 = new JSONObject(result); if(jsonObject1.opt("total_score") != null){ total_score = jsonObject1.getInt("total_score"); } if(jsonObject1.opt("total_fine") != null){ total_fine = jsonObject1.getInt("total_fine"); } JSONArray jsonArray = jsonObject1.getJSONArray("data"); for(int i = 0 ; i < jsonArray.length() ; i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); String Time = GetSystem.ChangeTimeZone(jsonObject.getString("vio_time").replace("T", " ").substring(0, 19)); TrafficData trafficData = new TrafficData(); trafficData.setObj_id(jsonObject.getString("vio_id")); trafficData.setAction(jsonObject.getString("action")); trafficData.setLocation(jsonObject.getString("location")); trafficData.setDate(Time); trafficData.setScore(jsonObject.getInt("score")); trafficData.setFine(jsonObject.getInt("fine")); trafficData.setStatus(jsonObject.getInt("status")); trafficData.setCity(jsonObject.getString("city")); trafficData.setVio_total(jsonObject.getInt("vio_total")); Datas.add(trafficData); } } catch (Exception e) { e.printStackTrace(); } return Datas; } private class TrafficAdapter extends BaseAdapter{ LayoutInflater mInflater = LayoutInflater.from(TrafficActivity.this); @Override public int getCount() { return trafficDatas.size(); } @Override public Object getItem(int position) { return trafficDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.item_traffic, null); holder = new ViewHolder(); holder.tv_item_traffic_data = (TextView) convertView.findViewById(R.id.tv_item_traffic_data); holder.tv_item_traffic_adress = (TextView)convertView.findViewById(R.id.tv_item_traffic_adress); holder.tv_item_traffic_content = (TextView)convertView.findViewById(R.id.tv_item_traffic_content); holder.tv_item_traffic_fraction = (TextView)convertView.findViewById(R.id.tv_item_traffic_fraction); holder.tv_item_traffic_money = (TextView)convertView.findViewById(R.id.tv_item_traffic_money); holder.tv_status = (TextView)convertView.findViewById(R.id.tv_status); holder.tv_item_traffic_total = (TextView)convertView.findViewById(R.id.tv_item_traffic_total); holder.iv_traffic_share = (ImageView)convertView.findViewById(R.id.iv_traffic_share); holder.iv_traffic_help = (ImageView)convertView.findViewById(R.id.iv_traffic_help); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final TrafficData trafficData = trafficDatas.get(position); if(trafficData.getStatus() == 0){ holder.tv_status.setText("(未处理)"); holder.tv_status.setTextColor(getResources().getColor(R.color.red)); }else{ holder.tv_status.setText("(已处理)"); holder.tv_status.setTextColor(getResources().getColor(R.color.common_inactive)); } holder.tv_item_traffic_data.setText(trafficData.getDate().substring(0, 16)); holder.tv_item_traffic_adress.setText(trafficData.getLocation()); holder.tv_item_traffic_content.setText(trafficData.getAction()); holder.tv_item_traffic_fraction.setText("扣分: "+trafficData.getScore() + "分"); holder.tv_item_traffic_money.setText("罚款: "+trafficData.getFine() + "元"); holder.tv_item_traffic_total.setText("人次: " + trafficData.getVio_total() +"次"); holder.iv_traffic_share.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { StringBuffer sb = new StringBuffer(); sb.append("【违章】 "); sb.append(trafficData.getDate().substring(5, 16)); sb.append(" " + Car_name); sb.append(" 在" + trafficData.getLocation() + "发生违章,"); sb.append("违章内容: " + trafficData.getAction()); sb.append(", 扣分: " + trafficData.getScore()); sb.append("分, 罚款: " + trafficData.getFine() + "元, 人次: 5次"); GetSystem.share(TrafficActivity.this, sb.toString(), "",0,0,"违章",""); } }); holder.iv_traffic_help.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(TrafficActivity.this, DealAddressActivity.class); intent.putExtra("Title", "车辆违章"); intent.putExtra("Type", 3); intent.putExtra("city", trafficData.getCity()); startActivity(intent); } }); return convertView; } private class ViewHolder { TextView tv_item_traffic_data,tv_item_traffic_adress,tv_item_traffic_content, tv_item_traffic_fraction,tv_item_traffic_money,tv_status,tv_item_traffic_total; ImageView iv_traffic_share,iv_traffic_help; } } private class TrafficData{ String obj_id; String date; String action; String location; String city; int score; int fine; int status; int vio_total; public String getObj_id() { return obj_id; } public void setObj_id(String obj_id) { this.obj_id = obj_id; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getAction() { return action; } public void setAction(String action) { this.action = action; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public int getFine() { return fine; } public void setFine(int fine) { this.fine = fine; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public int getVio_total() { return vio_total; } public void setVio_total(int vio_total) { this.vio_total = vio_total; } @Override public String toString() { return "TrafficData [obj_id=" + obj_id + ", date=" + date + ", action=" + action + ", location=" + location + ", city=" + city + ", score=" + score + ", fine=" + fine + ", status=" + status + "]"; } } @Override public void onRefresh() { try { String url = Constant.BaseUrl + "vehicle/" + URLEncoder.encode(Car_name, "UTF-8") + "/violation?auth_code=" + Variable.auth_code + "&max_id=" + trafficDatas.get(0).getObj_id(); new Thread(new NetThread.GetDataThread(handler, url, refresh_traffic)).start(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onLoadMore() { try { Log.d(TAG, trafficDatas.get(trafficDatas.size() - 1).toString()); String min_id = trafficDatas.get(trafficDatas.size() - 1).getObj_id(); String url = Constant.BaseUrl + "vehicle/" + URLEncoder.encode(Car_name, "UTF-8") + "/violation?auth_code=" + Variable.auth_code + "&min_id=" + min_id; new Thread(new NetThread.GetDataThread(handler, url, load_traffic)).start(); } catch (Exception e) { e.printStackTrace(); } } private void onLoad() { lv_activity_traffic.stopRefresh(); lv_activity_traffic.stopLoadMore(); lv_activity_traffic.setRefreshTime(GetSystem.GetNowTime()); } }