samedi 4 juillet 2015

Android application force closes on insertion in database

The app I'm trying to make force closes on insertion into database. I think there's something wrong in the DBAdapter class.In the transaction class I'm calling the inserttransaction method using an object of the DBAdapter class. DBAdapter class

    package com.example.kharchapaani;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter extends SQLiteOpenHelper {
private static final String DATABASE_NAME="KPdetail";
private static final int DATABASE_VERSION=1;
private static final String TABLE1_NAME="BALANCE";
private static final String TABLE2_NAME="TRANSACTION";
private static final String TABLE3_NAME="LENT";
private Context context;

private static final String KEY_NAME="NAME";
private static final String SOURCE="SOURCE";
private static final String AMOUNT="AMOUNT";
private static final String CATEGORY="CATEGORY";
private static final String DATE="DATE";
private static final String PAID="PAID";

@Override
public void onCreate(SQLiteDatabase arg0) {
    // TODO Auto-generated method stub
    String CREATE_BALANCE_TABLE="CREATE TABLE "+TABLE1_NAME +"("+SOURCE+" TEXT"+","+AMOUNT+" REAL"+")";
    arg0.execSQL(CREATE_BALANCE_TABLE);
    String CREATE_TRANSACTION_TABLE="CREATE TABLE "+TABLE2_NAME+"("+AMOUNT+" REAL"+","+DATE+" DATETIME"+","+CATEGORY+" TEXT"+","+SOURCE+" TEXT"+")";
    arg0.execSQL(CREATE_TRANSACTION_TABLE);
    String CREATE_LENT_TABLE="CREATE TABLE "+TABLE3_NAME+"("+KEY_NAME+" TEXT"+","+AMOUNT+" REAL"+","+DATE+" DATETIME"+","+SOURCE+" TEXT"+","+PAID +" INTEGER"+")";
    arg0.execSQL(CREATE_LENT_TABLE);
}
public DBAdapter(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.context=context;
    // TODO Auto-generated constructor stub
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int oldversion, int newversion) {
    // TODO Auto-generated method stub
    arg0.execSQL("DROP TABLE IF EXISTS BALANCE");
    arg0.execSQL("DROP TABLE IF EXISTS TRANSACTION");
    arg0.execSQL("DROP TABLE IF EXISTS LENT");
    onCreate(arg0);
}
void insertbalance(String source,float amount)
{
    SQLiteDatabase db=this.getWritableDatabase();
    ContentValues values=new ContentValues();
    values.put(SOURCE,source);
    values.put(AMOUNT,amount);
    db.insert(TABLE1_NAME, null, values);
    db.close();     
}
void inserttransaction(float amount,String date,String category,String source)
{
    SQLiteDatabase db=this.getWritableDatabase();
    ContentValues values=new ContentValues();
    values.put(AMOUNT,amount);
    values.put(DATE,date);
    values.put(CATEGORY,category);
    values.put(SOURCE,source);
    db.insert(TABLE2_NAME, null, values);
    db.close();

}
void insertlent(String name,float amount,String date,String source,int paid)
{
    SQLiteDatabase db=this.getWritableDatabase();
    ContentValues values=new ContentValues();
    values.put(KEY_NAME,name);
    values.put(AMOUNT,amount);
    values.put(DATE,date);
    values.put(SOURCE,source);
    values.put(PAID,paid);
    db.insert(TABLE3_NAME, null, values);
    db.close();

}


public void clearData(){
    context.deleteDatabase(DATABASE_NAME);
}

public Cursor getInsertedDatabalance() {
    // TODO Auto-generated method stub
    SQLiteDatabase db=this.getReadableDatabase();
    return db.query(TABLE1_NAME,new String[] {SOURCE,AMOUNT}, null, null, null, null, null);
}
public Cursor getInsertedDatatransaction() {
    // TODO Auto-generated method stub
    SQLiteDatabase db=this.getReadableDatabase();
    return db.query(TABLE2_NAME,new String[] {AMOUNT,DATE,CATEGORY,SOURCE}, null, null, null, null, null);
}
public Cursor getInsertedDatalentall() {
    // TODO Auto-generated method stub
    SQLiteDatabase db=this.getReadableDatabase();
    return db.query(TABLE3_NAME,new String[] {KEY_NAME,AMOUNT,DATE,SOURCE}, null, null, null, null, null);
}
public Cursor getInsertedDatalentpaid() {
    // TODO Auto-generated method stub
    SQLiteDatabase db=this.getReadableDatabase();
    return db.query(TABLE3_NAME,new String[] {KEY_NAME,AMOUNT,DATE,SOURCE},"PAID=1", null, null, null, null);
}
public Cursor getInsertedDatalentnotpaid() {
    // TODO Auto-generated method stub
    SQLiteDatabase db=this.getReadableDatabase();
    return db.query(TABLE3_NAME,new String[] {KEY_NAME,AMOUNT,DATE,SOURCE},"PAID=0", null, null, null, null);
}
    }

The class in which the inserttransaction method is called is the Transaction class:

    package com.example.kharchapaani;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;
import android.view.View.OnClickListener;

public class Transaction extends Activity {
EditText et1,et2,et3;
Button b1;
CheckBox ck1,ck2;
float amount;
String category,date,source;
Calendar cal;
DBAdapter db;
RadioGroup rg1;
RadioButton rb1;
SimpleDateFormat sdf;
ArrayList<String> list = new ArrayList<String>();

    /** Declaring an ArrayAdapter to set items to ListView */
ArrayAdapter<String> adapter;

    Spinner s1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.transaction);
    et1=(EditText)findViewById(R.id.editText1);
    et2=(EditText)findViewById(R.id.editText2);
    et3=(EditText)findViewById(R.id.editText3);
    b1=(Button)findViewById(R.id.button1);
    rg1=(RadioGroup)findViewById(R.id.radioGroup1);
    db=new DBAdapter(this);
    ck1=(CheckBox)findViewById(R.id.checkBox1);
    ck2=(CheckBox)findViewById(R.id.checkBox2);
    sdf=new SimpleDateFormat("dd/MM/yyyy");
    s1=(Spinner)findViewById(R.id.spinner1);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s1.setAdapter(adapter);
    list.add("Laundry");
    list.add("Grocery");
    list.add("Entertainment");
    list.add("Eating Out");
    list.add("Gifts");
    adapter.notifyDataSetChanged();
    b1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            try{amount=Float.parseFloat(et1.getText().toString());
            }
            catch(Exception e)
            {e.printStackTrace();}
            if(ck1.isChecked()==true)
            {cal = Calendar.getInstance();
            date=sdf.format(cal.getTime());
            }
            else
            {date=et2.getText().toString();}
            if(ck2.isChecked()==true)
            {
                category=et3.getText().toString();

                adapter.add(category);
                adapter.notifyDataSetChanged();
            }
            else
            {
                category=String.valueOf(s1.getSelectedItem());
            }
            int selid=rg1.getCheckedRadioButtonId();
            rb1=(RadioButton)findViewById(selid);
            source=rb1.getText().toString();
            db.inserttransaction(amount, date, category, source);
        Toast.makeText(getBaseContext(), "Amount: "+amount+"\nDate: "+date+"\nCategory: "+category+"\nSource: "+source,Toast.LENGTH_LONG).show();
        }

    });

    }   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }
    }

Aucun commentaire:

Enregistrer un commentaire