마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 클릭시 DB에 저장되는 insert문을 실행하려고 하는데 잘 안됩니다..

0 추천

ㅈㅣ금 가계부어플 제작중인데요 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)

 

후..  정말 어렵네요 안드로이드 ㅠㅠ 이제 알겠다 싶으면 또 오류투성이.. 아무래도 공부를 더더더더 해야겠어요 

많은 도움 부탁드립니다 ㅠㅠ

셋뎃부리부리 (120 포인트) 님이 2015년 5월 22일 질문

1개의 답변

0 추천

startActivity(new Intent(WriteExpenseActivity.this, ExpenseMainActivity.class));

/*
constructor Intent.Intent(Context,Class<?>) is not applicable
(actual argument WriteExpenseActivity.BtnClick cannot be converted to Context by method invocation conversion)
*/

 

어렵군요 (5,920 포인트) 님이 2015년 5월 22일 답변
어렵군요님이 2015년 5월 22일 수정
...