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