Activity_ExchangeRate.java
package com.tsots.ExchangeRate; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; public class Activity_ExchangeRate extends Activity { Context context = Activity_ExchangeRate.this; final int MENU_ABOUT = Menu.FIRST; final int MENU_UPDTAE_EXCHANGERATE = Menu.FIRST + 1; final int MENU_SEARCH_EXCHANGERATE = Menu.FIRST + 2; private View view_update_exchangerate; private EditText /*et_cash_nt,*/ et_cash_peso, et_cash_aud, et_cash_usd; String Tag = "Activity_ExchangeRate.java"; TextView tv_updatedate; Spinner spinner_cash; ListView lv_exchange; EditText et_cash; Button bt_exchange; ArrayAdapteradapter_spinner_country; Adapter_ListView_Exchange adapter_listview_exchange; java.text.SimpleDateFormat sdf; String tables[] = {"table_value", "table_listData", "table_exchangerate"}; String fieldNames[][] = { { "fieldname_date", "fieldname_country", "fieldname_cash"}, { "fieldname_id", "fieldname_column_country", "fieldname_column_cash", "fieldname_column_unit"}, { "fieldname_country1_exchangerate", "fieldname_country2_exchangerate", "fieldname_country3_exchangerate", "fieldname_country4_exchangerate"} }; String fieldTypes[][] = { { "text", "text", "text"}, { "INTEGER PRIMARY KEY AUTOINCREMENT", "text", "text", "text"}, { "text", "text", "text", "text"}, }; int version = 1; private SQLiteOpenHelper_ExchangeRate dbHelper = new SQLiteOpenHelper_ExchangeRate ( this, "SQLite_ExchangeRate.db", null, version, tables, fieldNames, fieldTypes ); String selected_country; int int_selected_country; String[] array_country; String[] array_cash; String[] array_unit; String[] array_deafault_exchangerate; List allarray_country = new ArrayList (); List allarray_cash; List final_allarray_cash; List allarray_unit = new ArrayList (); List all_id; DecimalFormat nf = new DecimalFormat("0.00000"); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_exchangerate); bt_exchange = (Button) findViewById (R.id.bt_exchange); et_cash = (EditText) findViewById (R.id.et_cash); array_country = getResources().getStringArray(R.array.array_country); array_cash = getResources().getStringArray(R.array.array_cash); array_unit = getResources().getStringArray(R.array.array_unit); array_deafault_exchangerate = getResources().getStringArray(R.array.array_cash); tv_updatedate = (TextView) findViewById (R.id.tv_updatedate); spinner_cash = (Spinner) findViewById (R.id.spinner_cash); lv_exchange = (ListView) findViewById (R.id.lv_exchange); sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); default_sqlite_table_listdata(); update_spinner(); update_listview(); bt_exchange.setOnClickListener(new OnClickListener() { public void onClick(View v) { Log.i(Tag, "匯率換算ing..."); //擷取EditText的值, 更新allarray_cash System.out.println("116 et_cash.getText().toString() = "+et_cash.getText().toString()); System.out.println("117 allarray_cash = "+ allarray_cash); if(!et_cash.getText().toString().equals("")) { save_sqlite_table_value(); save_sqlite_table_listData(); //save_sqlite_table_exchangerate(); Log.i(Tag, "更新畫面資料"); update_spinner(); update_listview(); } else { Toast.makeText(context, "請輸入正確數字", Toast.LENGTH_SHORT).show(); allarray_cash = new ArrayList (); for (int i=0; i<4 ; i++) { allarray_cash.add(""); } save_sqlite_table_listData(); update_listview(); } } }); } //AP關閉前執行 @Override protected void onPause() { save_sqlite_table_value(); save_sqlite_table_listData(); super.onPause(); } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()) { case MENU_ABOUT: startActivity(new Intent(this, Menu_About.class)); break; case MENU_UPDTAE_EXCHANGERATE: menu_update_exchangerate(); break; case MENU_SEARCH_EXCHANGERATE: //檢查網路狀態 if (checkInternet() == true) { //台灣銀行營業時間牌告匯率 Uri uri = Uri.parse("http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } else { Toast.makeText(context, getResources().getString(R.string.str_checkInternet), Toast.LENGTH_SHORT).show(); } break; } return true; } /* * 加入Menu選單 */ @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(Menu.NONE, MENU_ABOUT, 0, R.string.str_menu_about) .setIcon(R.drawable.icon_menu_about); menu.add(Menu.NONE, MENU_UPDTAE_EXCHANGERATE, 0, R.string.str_menu_update_exchangerate) .setIcon(R.drawable.icon_menu_update_exchangerate); menu.add(Menu.NONE, MENU_SEARCH_EXCHANGERATE, 0, R.string.str_menu_search_exchangerate) .setIcon(R.drawable.icon_menu_search_exchangerate); return true; } /* * 更新tables[0] * TextView更新日期 Spinner所選貨幣 EditText兌換金額 * {"fieldname_date", "fieldname_country", "fieldname_cash"} */ public void save_sqlite_table_value() { Log.i(Tag, "儲存tables[0]資料ing..."); Cursor cursor_sqlite_table_value = null; try { cursor_sqlite_table_value = dbHelper.select(tables[0], null, null, null, null, null, null); cursor_sqlite_table_value.moveToFirst(); String[] updateFields = {"fieldname_date", "fieldname_country", "fieldname_cash"}; String[] updateValues = {tv_updatedate.getText().toString(), String.valueOf(int_selected_country), et_cash.getText().toString()}; dbHelper.update(tables[0], updateFields, updateValues, null, null); } catch(Exception e) { System.out.println("219 Exception : save_sqlite_table_value()"); } finally { cursor_sqlite_table_value.close(); } } /* * 更新tables[1] * 換算後各國幣值List * {"fieldname_column_cash"} */ public void save_sqlite_table_listData() { Log.i(Tag, "儲存tables[1]資料ing..."); Cursor cursor_sqlite_table_listdata = null; try { cursor_sqlite_table_listdata = dbHelper.select(tables[1], null, null, null, null, null, null); cursor_sqlite_table_listdata.moveToFirst(); //更新資料庫 String[] updateFields = {"fieldname_column_cash"}; String where = "fieldname_id=?"; int position = 1; do { if(position <= cursor_sqlite_table_listdata.getCount()) { String[] updateValues = {allarray_cash.get(position-1)}; String[] whereValue = {String.valueOf(position)}; dbHelper.update(tables[1], updateFields, updateValues, where, whereValue); position++; } }while(cursor_sqlite_table_listdata.moveToNext()); } catch(Exception e) { System.out.println("257 Exception : save_sqlite_table_listData()"); } finally { cursor_sqlite_table_listdata.close(); } } /* * 更新tables[2] * 台幣 菲律賓幣 澳幣 美金 * { "fieldname_country1_exchangerate", "fieldname_country2_exchangerate", "fieldname_country3_exchangerate", "fieldname_country4_exchangerate"} */ public void save_sqlite_table_exchangerate() { Log.i(Tag, "儲存tables[2]資料ing..."); Cursor cursor_sqlite_table_exchangerate = null; try { cursor_sqlite_table_exchangerate = dbHelper.select(tables[2], null, null, null, null, null, null); cursor_sqlite_table_exchangerate.moveToFirst(); //更新資料庫 String[] updateFields = { "fieldname_country1_exchangerate", "fieldname_country2_exchangerate", "fieldname_country3_exchangerate", "fieldname_country4_exchangerate"}; String[] updateValues = {allarray_cash.get(0), allarray_cash.get(1), allarray_cash.get(2), allarray_cash.get(3)}; dbHelper.update(tables[2], updateFields, updateValues, null, null); } catch(Exception e) { System.out.println("285 Exception : save_sqlite_table_exchangerate()"); } finally { cursor_sqlite_table_exchangerate.close(); } } /* * 更新Spinner畫面資料 */ public void update_spinner() { Log.i(Tag, "設定Spinner選項"); Cursor cursor_sqlite_table_value = null; //try //{ cursor_sqlite_table_value = dbHelper.select(tables[0], null, null, null, null, null, null); cursor_sqlite_table_value.moveToFirst(); tv_updatedate.setText(cursor_sqlite_table_value.getString(0)); et_cash.setText(cursor_sqlite_table_value.getString(2)); //} //catch(Exception e) //{ adapter_spinner_country = new ArrayAdapter (this, android.R.layout.simple_spinner_item, array_country); adapter_spinner_country.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner_cash.setAdapter(adapter_spinner_country); //從SQLite中擷取資料, 避免spinner item又跳回預設值0 spinner_cash.setSelection(Integer.valueOf(cursor_sqlite_table_value.getString(1))); spinner_cash.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { int_selected_country = arg2; //依Spinner的選項更改, 置換ListView的幣值換算結果 change_selected_country(int_selected_country); save_sqlite_table_value(); save_sqlite_table_listData(); //save_sqlite_table_exchangerate(); update_listview(); } public void onNothingSelected(AdapterView arg0) { } }); //} //finally //{ cursor_sqlite_table_value.close(); //} } /* * 更新ListView畫面資料 */ public void update_listview() { Log.i(Tag, "設定ListView內容"); Cursor cursor_sqlite_table_listdata = null; try { //在此必須初使化allarray_cash, 否則ListView資料無法更新 final_allarray_cash = new ArrayList //(); cursor_sqlite_table_listdata = dbHelper.select(tables[1], null, null, null, null, null, null); cursor_sqlite_table_listdata.moveToFirst(); do { allarray_country.add(cursor_sqlite_table_listdata.getString(1)); final_allarray_cash.add(cursor_sqlite_table_listdata.getString(2)); allarray_unit.add(cursor_sqlite_table_listdata.getString(3)); }while(cursor_sqlite_table_listdata.moveToNext()); } catch(Exception e) { System.out.println("360 Exception : update_listview()"); } finally { cursor_sqlite_table_listdata.close(); } adapter_listview_exchange = new Adapter_ListView_Exchange ( this, android.R.layout.simple_list_item_1, allarray_country, final_allarray_cash, allarray_unit ); lv_exchange.setAdapter(adapter_listview_exchange); } /* * 先將SQLite欄位的預設值填好, 避免之後select時產生Exception */ public void default_sqlite_table_listdata() { Log.i(Tag, "載入SQLite預設值"); //insert tables[0] Cursor cursor_sqlite_table_value = null; try { cursor_sqlite_table_value = dbHelper.select(tables[0], null, null, null, null, null, null); cursor_sqlite_table_value.moveToFirst(); String[] updateFields = {"fieldname_date", "fieldname_country", "fieldname_cash"}; if(cursor_sqlite_table_value.getCount() == 0) { String[] updateValues = {"2012-01-03", "0", "1"}; dbHelper.insert(tables[0], updateFields, updateValues); } } catch(Exception e) { System.out.println("399 Exception : default_sqlite_table_listdata()"); } finally { cursor_sqlite_table_value.close(); } //insert tables[1] Cursor cursor_sqlite_table_listdata = null; try { cursor_sqlite_table_listdata = dbHelper.select(tables[1], null, null, null, null, null, null); cursor_sqlite_table_listdata.moveToFirst(); String[] updateFields = {"fieldname_column_country", "fieldname_column_cash", "fieldname_column_unit"}; if(cursor_sqlite_table_listdata.getCount() == 0) { for(int i=0 ; i (); cursor_sqlite_table_exchangerate = dbHelper.select(tables[2], null, null, null, null, null, null); cursor_sqlite_table_exchangerate.moveToFirst(); if(int_selected_country == 0) { allarray_cash.add(et_cash.getText().toString()); allarray_cash.add(String.valueOf(nf.format(Double.valueOf(cursor_sqlite_table_exchangerate.getString(1))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(String.valueOf(nf.format(Double.valueOf(cursor_sqlite_table_exchangerate.getString(2))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(String.valueOf(nf.format(Double.valueOf(cursor_sqlite_table_exchangerate.getString(3))*Double.valueOf(et_cash.getText().toString())))); System.out.println("474 "+allarray_cash); } else if(int_selected_country == 1) { allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(0))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(1))*Double.valueOf(et_cash.getText().toString())))); //allarray_cash.add(String.valueOf(nf.format(Double.valueOf(cursor_sqlite_table_exchangerate.getString(1))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(et_cash.getText().toString()); allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(2))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(1))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(3))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(1))*Double.valueOf(et_cash.getText().toString())))); System.out.println("483 "+allarray_cash); } else if(int_selected_country == 2) { allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(0))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(2))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(1))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(2))*Double.valueOf(et_cash.getText().toString())))); //allarray_cash.add(String.valueOf(nf.format(Double.valueOf(cursor_sqlite_table_exchangerate.getString(2))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(et_cash.getText().toString()); allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(3))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(2))*Double.valueOf(et_cash.getText().toString())))); System.out.println("491 "+allarray_cash); } else { allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(0))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(3))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(1))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(3))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(String.valueOf(nf.format(Double.parseDouble(cursor_sqlite_table_exchangerate.getString(2))/Double.parseDouble(cursor_sqlite_table_exchangerate.getString(3))*Double.valueOf(et_cash.getText().toString())))); //allarray_cash.add(String.valueOf(nf.format(Double.valueOf(cursor_sqlite_table_exchangerate.getString(3))*Double.valueOf(et_cash.getText().toString())))); allarray_cash.add(et_cash.getText().toString()); System.out.println("500 "+allarray_cash); } } catch(Exception e) { System.out.println("506 Exception : change_selected_country(int int_selected_country)"); } finally { cursor_sqlite_table_exchangerate.close(); } } /* * MENU_UPDTAE_EXCHANGERATE所要做的事情 */ public void menu_update_exchangerate() { LayoutInflater factory = LayoutInflater.from(context); view_update_exchangerate = factory.inflate(R.layout.layout_dialog_update_exchangerate, null); //et_cash_nt = (EditText)view_update_exchangerate.findViewById(R.id.et_cash_nt); et_cash_peso = (EditText)view_update_exchangerate.findViewById(R.id.et_cash_peso); et_cash_aud = (EditText)view_update_exchangerate.findViewById(R.id.et_cash_aud); et_cash_usd = (EditText)view_update_exchangerate.findViewById(R.id.et_cash_us); Cursor cursor_sqlite_table_exchangerate = null; try { cursor_sqlite_table_exchangerate = dbHelper.select(tables[2], null, null, null, null, null, null); cursor_sqlite_table_exchangerate.moveToFirst(); //et_cash_nt.setText(cursor_sqlite_table_exchangerate.getString(0)); et_cash_peso.setText(String.valueOf(nf.format(1.0/Double.valueOf(cursor_sqlite_table_exchangerate.getString(1))))); et_cash_aud.setText(String.valueOf(nf.format(1.0/Double.valueOf(cursor_sqlite_table_exchangerate.getString(2))))); et_cash_usd.setText(String.valueOf(nf.format(1.0/Double.valueOf(cursor_sqlite_table_exchangerate.getString(3))))); new AlertDialog.Builder(context) .setView(view_update_exchangerate) .setPositiveButton(R.string.str_button_save, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { tv_updatedate.setText(sdf.format(new java.util.Date())); Cursor cursor_sqlite_table_exchangerate = null; try { cursor_sqlite_table_exchangerate = dbHelper.select(tables[2], null, null, null, null, null, null); cursor_sqlite_table_exchangerate.moveToFirst(); String[] updateFields = {//"fieldname_country1_exchangerate", "fieldname_country2_exchangerate", "fieldname_country3_exchangerate", "fieldname_country4_exchangerate"}; String[] updateValues = {//String.valueOf(nf.format(1.0/Double.valueOf(et_cash_nt.getText().toString()))), String.valueOf(nf.format(1.0/Double.valueOf(et_cash_peso.getText().toString()))), String.valueOf(nf.format(1.0/Double.valueOf(et_cash_aud.getText().toString()))), String.valueOf(nf.format(1.0/Double.valueOf(et_cash_usd.getText().toString())))}; dbHelper.update(tables[2], updateFields, updateValues, null, null); //對應的匯率結果也做修正 change_selected_country(spinner_cash.getSelectedItemPosition()); //更新tables[1] save_sqlite_table_listData(); //更新ListView update_listview(); } catch(Exception e) { System.out.println("564 Exception : setPositiveButton{}"); } finally { cursor_sqlite_table_exchangerate.close(); } } }) .setNegativeButton(R.string.str_button_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }) .show(); } catch(Exception e) { System.out.println("583 Exception : MENU_UPDTAE_EXCHANGERATE"); } finally { cursor_sqlite_table_exchangerate.close(); } } /* * 檢查網路狀態, 必須加入權限 * */ public boolean checkInternet() { boolean result = false; ConnectivityManager connManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = connManager.getActiveNetworkInfo(); if (info == null || !info.isConnected()) { result = false; } else { if (!info.isAvailable()) result = false; else result = true; } return result; } } //
沒有留言:
張貼留言