ㅈㅣ금 가계부어플 제작중인데요 TotalFragment랑 WriteExpenseActivity, ExpenseMainActivity 이렇게 세개가 있네요.. 제 생각엔 TotalFragment에 ExpenseMainActivity소스를 넣어야 하는거같은데.. 일단 insert 가 안되서 질문드립니다.
일단 write_expense.xml에는 정보를 입력하고 버튼 두개가 있습니다.
구글링해서 switch(v.getId)로 버튼 값 받아서 실행되게 하더라구요
write_expense 의 저장버튼, 취소버튼에 각각 id 와 onClick="onButtonClick"이라는 메서드를 추가했습니다.
그리고 onButtonClick 메소드도 WriteExpenseActivity(값 받아서 insert해주는 곳), ExpenseMainActivity(select 해서 정보 뿌려지는 부분)에 추가했습니다. 두군데죠
근데 지금 WriteExpenseActivity에 오류가 나고 있습니다.
보면 생성자 어쩌구하는데 생성자 수가 부족해서 그런건지..
package com.example.choihyesun.collmethemoney;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Calendar;
public class WriteExpenseActivity extends Activity{
TextView selection;
String[] items = {"식비", "교통비", "통신비", "옷", "화장품", "책", "기타"};
RadioGroup rgInputType, rgExpenseType;
Button saveBtn;
EditText etMoney, etDetails, etExpenseDate;
private int myear;
private int mmonth;
private int mday;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.write_expense);
//분류 리스트
selection = (TextView) findViewById(R.id.selection);
Spinner spin = (Spinner) findViewById(R.id.category);
//spin.setOnItemSelectedListener(this);
ArrayAdapter<String> list = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items);
list.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(list);
saveBtn = (Button) findViewById(R.id.save_btn);
rgExpenseType = (RadioGroup) findViewById(R.id.expense_type);
rgInputType = (RadioGroup) findViewById(R.id.input_type);
etExpenseDate = (EditText) findViewById(R.id.expense_date);
etExpenseDate.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
//EditView를 클릭하면 DatePickerDialog 창이 뜬다.
Dialog datepicker = new DatePickerDialog(WriteExpenseActivity.this, dateSetListener, myear, mmonth, mday);
datepicker.show();
}
});
//첫화면에 현재 날짜 표시
final Calendar c = Calendar.getInstance();
myear = c.get(Calendar.YEAR);
mmonth = c.get(Calendar.MONTH);
mday = c.get(Calendar.DAY_OF_MONTH);
updateDisplay();
saveBtn.setOnClickListener(new onButtonClick());
}
//선택한 날짜를 액티비티 위에 수정해서 표시
DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener(){
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth){
myear = year;
mmonth = monthOfYear;
mday = dayOfMonth;
updateDisplay();
}
};
//액티비티위에 인식한 날짜를 띄우는 메서드
private void updateDisplay(){
etExpenseDate.setText(new StringBuilder().append(myear).append(".").append(mmonth+1).append(".").append(mday));
}
public class onButtonClick implements View.OnClickListener{
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.save_btn:
//지출 입력 데이터 추출
EditText dateview = (EditText) findViewById(R.id.expense_date);
String expense_date = dateview.getText().toString();
//EditText inputTypeView = (EditText) findViewById(R.id.input_type);
//String input_type = inputTypeView.getText().toString();
EditText moneyView = (EditText) findViewById(R.id.edit_money);
String money = moneyView.getText().toString();
//EditText detailsView = (EditText) findViewById(R.id.edit_details);
//String details = detailsView.getText().toString();
//EditText epTypeView = (EditText) findViewById(R.id.expense_type);
//String expense_type = epTypeView.getText().toString();
//EditText categoryView = (EditText) findViewById(R.id.category);
//String category = categoryView.getText().toString();
try {
DBHelper dbHelper = new DBHelper(this, "expense", null, 1);
SQLiteDatabase db;
db = dbHelper.getWritableDatabase();
//db.execSQL("'INSERT INTO expense values('"+expense_date+"', '"+ input_type+"', '"+money+"', '"+details+"', '"+expense_type+"', '"+category+"');");
db.execSQL("'INSERT INTO expense values('"+expense_date+"', '"+money+"');'");
dbHelper.close();
}catch (SQLiteException e){
}
Intent intent = new Intent(this, ExpenseMainActivity.class);
startActivity(intent);
finish();
break;
case R.id.cancel_btn:
setResult(Activity.RESULT_CANCELED);
finish();
break;
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_edit) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onItemSelected(AdapterView<?> parent, View v, int position, long id){
selection.setText(items[position]);
Toast.makeText(this, items[position], Toast.LENGTH_SHORT).show();
}
}
아래는 로그캣 입니다..
Error:(120, 45) error: constructor DBHelper in class DBHelper cannot be applied to given types;
required: Context,String,CursorFactory,int
found: WriteExpenseActivity.BtnClick,String,<null>,int
reason: actual argument WriteExpenseActivity.BtnClick cannot be converted to Context by method invocation conversion
Error:(133, 37) error: no suitable constructor found for Intent(WriteExpenseActivity.BtnClick,Class<ExpenseMainActivity>)
constructor Intent.Intent(String,Uri,Context,Class<?>) is not applicable
(actual and formal argument lists differ in length)
constructor Intent.Intent(Context,Class<?>) is not applicable
(actual argument WriteExpenseActivity.BtnClick cannot be converted to Context by method invocation conversion)
후.. 정말 어렵네요 안드로이드 ㅠㅠ 이제 알겠다 싶으면 또 오류투성이.. 아무래도 공부를 더더더더 해야겠어요
많은 도움 부탁드립니다 ㅠㅠ