package com.fc2.blog98.andromaker.housekeepingbook; import java.util.Calendar; import com.fc2.blog98.andromaker.housekeepingbook.SubOpenHelper; import com.fc2.blog98.andromaker.housekeepingbook.R; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Canvas; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; public class HousekeepingBook extends Activity implements OnClickListener{ /* 変数の定義 */ private Button monthButton; private Button dateButton; private Button addButton; private Button deleteButton; private TextView sumText; private TextView yosanText; private TextView nokoriText; private TextView yosanText2; private TextView nokoriText2; static int count1=0; static int count2=0; int sum=0; ArrayAdapter adapter,adapter2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* 変数の設定 */ int[] calendar=intentCalendar(); /* コンポーネントの設定 */ monthButton = (Button)this.findViewById(R.id.monthButton); dateButton = (Button)this.findViewById(R.id.dateButton); addButton = (Button)this.findViewById(R.id.addButton); deleteButton = (Button)this.findViewById(R.id.deleteButton); sumText=(TextView)this.findViewById(R.id.sumText); // yosanText=(TextView)this.findViewById(R.id.yosanText); // nokoriText=(TextView)this.findViewById(R.id.nokoriText); // yosanText2=(TextView)this.findViewById(R.id.yosanText2); // nokoriText2=(TextView)this.findViewById(R.id.nokoriText2); /* クリック処理 */ monthButton.setOnClickListener(this); dateButton.setOnClickListener(this); addButton.setOnClickListener(this); deleteButton.setOnClickListener(this); /* ボタン内容の設定 */ dateButton.setText( String.valueOf(calendar[1]+1)+"月"+String.valueOf(calendar[2])+"日"); // yosanText.setText("今月の予算:30,000円"); // nokoriText.setText("残り:13,500円"); // yosanText2.setText("予算:1,000円"); // nokoriText2.setText("残り:-700円(使い過ぎ!)"); /* メソッド処理 */ SQLiteDatabase db=database(); line(); createTable(); createMonthTable(); insert(); cursor(); db.close(); } public void line(){ LinearLayout linear1 = (LinearLayout) findViewById(R.id.Linear01); LinearLayout.LayoutParams liner01 = new LinearLayout.LayoutParams(480,3); Maindraw linerA = new Maindraw(this); linerA.setLayoutParams(liner01); linear1.addView(linerA); } public void insert(){ String[] data=intentData(); String[] fileName=intentFileName(); SQLiteDatabase db=database(); SharedPreferences insertPref = getSharedPreferences("insertPref",MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE); if(!(data[0]==null)){ db.execSQL("insert into "+"'"+fileName[1]+"'"+" (Item,Utiwake,Kingaku) " + "values ('"+data[0]+"', '"+data[1]+"',"+data[2]+");"); db.execSQL("insert into "+"'"+fileName[2]+"'"+" (Item,Kingaku) " + "values ('"+data[0]+"',"+data[2]+");"); insertPref = getSharedPreferences("insertPref",MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE); Editor e = insertPref.edit(); e.putInt(fileName[2], 1); e.commit(); } } public void createMonthTable(){ String[] fileName=intentFileName(); SharedPreferences pref = getSharedPreferences(fileName[0],MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE); int str = pref.getInt(fileName[2], 0); if(str==0){ String sql = ""; sql += "create table "+"'"+fileName[2]+"'"+" ("; sql += "_id integer primary key"; sql += ",Item text not null"; sql += ",Kingaku text"; sql += ")"; SQLiteDatabase db=database(); db.execSQL(sql); } Editor e = pref.edit(); e.putInt(fileName[2], 1); e.commit(); } public void createTable(){ String[] fileName=intentFileName(); SharedPreferences pref = getSharedPreferences(fileName[0],MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE); int str = pref.getInt(fileName[1], 0); if(str==0){ String sql = ""; sql += "create table "+"'"+fileName[1]+"'"+" ("; sql += "_id integer primary key"; sql += ",Item text not null"; sql += ",Utiwake text"; sql += ",Kingaku text"; sql += ")"; SQLiteDatabase db=database(); db.execSQL(sql); } Editor e = pref.edit(); e.putInt(fileName[1], 1); e.commit(); } public String[] intentFileName(){ int[] calendar=intentCalendar(); //第一引数はキー。第二引数はキーが存在しなかった場合の戻り値。 String prefName="pref"; String tableName=String.valueOf(calendar[0])+"-"+String.valueOf(calendar[1]+1)+"-"+String.valueOf(calendar[2]); String tableMonthName=String.valueOf(calendar[0])+"-"+String.valueOf(calendar[1]+1); String[] fileName={prefName,tableName,tableMonthName}; return fileName; } public String[] intentData(){ Intent intent1 = getIntent(); String d1 = intent1.getStringExtra("data1"); String d2 = intent1.getStringExtra("data2"); String d3 = intent1.getStringExtra("data3"); String[] data={d1,d2,d3}; return data; } public int[] calendarDate(){ Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); int[] calendarDate={year,month,day}; return calendarDate; } public int[] intentCalendar(){ Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); Intent intent1 = getIntent(); year = intent1.getIntExtra("year",year); month = intent1.getIntExtra("month",month); day = intent1.getIntExtra("day",day); int date= year*10000+(month+1)*100+day; int[] calendarIntent={year,month,day,date}; return calendarIntent; } public SQLiteDatabase database(){ SubOpenHelper helper = new SubOpenHelper(getApplicationContext(),"HousekeepingBook.db",1); SQLiteDatabase db; db = helper.getWritableDatabase(); return db; } // public void list2(){ // adapter2 = new ArrayAdapter(this, R.layout.list2); // adapter2.add("red"); // adapter2.add("green"); // ListView listView = (ListView) findViewById(R.id.list2); // listView.setAdapter(adapter2); // } public void cursor(){ SQLiteDatabase db=database(); String[] fileName=intentFileName(); String sort = ""; String[] cols = {"_id","Item","Utiwake","Kingaku"}; Cursor c = db.query("'"+fileName[1]+"'",cols,null, null, null, null, "Item asc",null); boolean isEof = c.moveToFirst(); // list2(); ListView list1 = (ListView) findViewById(R.id.list1); adapter = new ArrayAdapter(this, R.layout.list); int change1=100; while (isEof) { try{ db.execSQL("update "+"'"+fileName[1]+"'"+" set _id = '"+change1+"' WHERE (_id="+c.getInt(0)+")"); change1+=1; } catch(Exception e1){ } isEof = c.moveToNext(); } isEof=c.moveToFirst(); change1=100; int change2=1; while (isEof) { try{ db.execSQL("update "+"'"+fileName[1]+"'"+" set _id = '"+change2+"' WHERE (_id="+change1+")"); change1+=1; change2+=1; } catch(Exception e1){ } if(!(sort.equals(c.getString(1)))){ adapter.add("["+c.getString(1)+"]"+c.getString(2)+":"+String.valueOf(c.getInt(3))+"円"); String start="check"; } else{ adapter.add("   "+c.getString(2)+":"+String.valueOf(c.getInt(3))+"円"); } sort=c.getString(1); sum=sum+c.getInt(3); //getString(0)メソッドで、カーソルの一行目を追加。2,3も同じ。 isEof = c.moveToNext(); } list1.setAdapter(adapter); list1.setOnItemClickListener(new ClickEvent()); //次のリストにカーソルを移す。 sumText.setText("合計:"+String.valueOf(sum)+"円"); /* カーソルとデータベースを閉じる */ c.close(); } public void onClick(View v) { if (v==dateButton){ monthCalendarIntent(); } else if(v == addButton){ itemIntent(); } else if(v == monthButton){ monthSheetIntent(); } else if(v == deleteButton){ deleteButton(); } } public void monthSheetIntent(){ Intent intent=new Intent(); intent.setClass(HousekeepingBook.this,MonthSheet.class); startActivity(intent); } public void monthCalendarIntent(){ Intent intent=new Intent(); intent.setClass(HousekeepingBook.this,MonthCalendar.class); startActivity(intent); } public void itemIntent(){ int[] calendar=intentCalendar(); Intent intent=new Intent(); intent.setClass(HousekeepingBook.this,Item.class); intent.putExtra("year",calendar[0]); intent.putExtra("month",calendar[1]); intent.putExtra("day", calendar[2]); startActivity(intent); } public void deleteButton(){ int[] calendarDate=intentCalendar(); SQLiteDatabase db=database(); String[] fileName=intentFileName(); db.delete("'"+fileName[1]+"'",null, null); adapter.clear(); sum=0; sumText.setText("合計:0円"); } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); //xmlを解釈してオブジェクトを生成するインフレーターを取得。 inflater.inflate(R.menu.menu, menu); //xmlファイルのmenu.xmlを参照している。 return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { /* menu_item0選択時 */ case R.id.menu_item0: Intent intent =new Intent(); intent.setClass(HousekeepingBook.this, Yosan.class); //Settingページに移動。以下2つも同じ。 startActivity(intent); return true; case R.id.menu_item1: Intent intent2 =new Intent(); intent2.setClass(HousekeepingBook.this, Memo.class); //Settingページに移動。以下2つも同じ。 startActivity(intent2); return true; // case R.id.menu_item2: // Intent intent3 =new Intent(); // intent3.setClass(HousekeepingBook.this, Info.class); // startActivity(intent3); // return true; } return true; } class ClickEvent implements OnItemClickListener{ //カスタムダイアログでやる @Override public void onItemClick(AdapterView adapter, View view, final int arg2,long arg3) { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(HousekeepingBook.this); //ダイアログのタイトルとメッセージを設定 alertDialogBuilder.setTitle("削除しますか?"); final TextView textview = (TextView)view; alertDialogBuilder.setMessage(textview.getText()); final ListView list = (ListView)adapter; final String item = (String)list.getItemAtPosition(arg2); //削除ボタンを押した時の処理を設定 alertDialogBuilder.setPositiveButton("削除",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { int[] calendarDate=intentCalendar(); String[] fileName=intentFileName(); SQLiteDatabase db=database(); int x=arg2+1; int z = 0; String[] cols = {"_id","Item","Utiwake","Kingaku"}; String selection = "_id = "+x; Cursor c = db.query("'"+fileName[1]+"'",cols,selection, null, null, null, null,null); c.moveToFirst(); String koumoku=c.getString(1); z=c.getInt(3); db.execSQL("delete from'"+fileName[1]+"'where(_id='"+x+"');"); db.execSQL("insert into "+"'"+fileName[2]+"'"+" (Item,Kingaku) " + "values ('"+koumoku+"',"+(-z)+");"); ArrayAdapter adapter = (ArrayAdapter)list.getAdapter(); adapter.remove(item); sum=sum-z; sumText.setText("合計:"+String.valueOf(sum)+"円"); } }); // アラートダイアログの否定ボタンがクリックされた時に呼び出されるコールバックリスナーを登録します alertDialogBuilder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); // アラートダイアログのキャンセルが可能かどうかを設定します alertDialogBuilder.setCancelable(true); AlertDialog alertDialog = alertDialogBuilder.create(); // アラートダイアログを表示します alertDialog.show(); } } } class Maindraw extends View { public Maindraw(Context context) { super(context); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 黒で塗る canvas.drawColor(Color.DKGRAY); } } //実行するとエラーが出るのでその修正 //cursor()、accountText()をコメントアウトすると実行できる。 //Eclipseショートカットキー //command+M:最大、最小化 //コマンド・知識一覧 //「データベース」 //テーブル削除:drop table table_name; //データベースはエミュレータから消せる