2017-04-23 7 views
1

あなたが私を助けることができるかどうか疑問に思う。第2のテーブルを追加した後、Android Studioアプリがクラッシュする

ユーザーの詳細を格納しているテーブルが1つあり、新しいユーザーが登録してログインできるようにしています。しかし、後でトランザクションを格納するために新しいテーブルを追加しましたが、2番目のテーブルをまったく同じように追加することはできません。データベースバージョンをアップグレードしようとしましたが、前のgitがコミットされていないことを示します。私は2つのテーブル

public class DBHandler extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "user.db"; 
    public static final String TABLE_USER = "user"; 
    public static final String COLUMN_ID = "_id"; 
    public static final String COLUMN_NAME = "name"; 
    public static final String COLUMN_ADDRESS1 = "address1"; 
    public static final String COLUMN_ADDRESS2 = "address2"; 
    public static final String COLUMN_ACCNO = "accNo"; 
    public static final String COLUMN_PIN = "PIN"; 
    public static final String COLUMN_BALANCE = "currentbalance"; 

    public static final String TABLE_TRANSACTIONS = "transactions"; 
    public static final String COLUMN_TID = "_tid"; 
    public static final String COLUMN_DESCRIPTION = "description"; 
    public static final String COLUMN_AMOUNT = "amount"; 


    public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
     super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     String query = "CREATE TABLE " + TABLE_USER + "(" + 
       COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       COLUMN_NAME + " TEXT, " + 
       COLUMN_ADDRESS1 + " TEXT, " + 
       COLUMN_ADDRESS2 + " TEXT, " + 
       COLUMN_ACCNO + " INTEGER, " + 
       COLUMN_PIN + " INTEGER UNIQUE, " + 
       COLUMN_BALANCE + " INTEGER " + 
       ");"; 

     db.execSQL(query); 

     String query2 = "CREATE TABLE " + TABLE_TRANSACTIONS + "(" + 
       COLUMN_TID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       COLUMN_DESCRIPTION + " TEXT, " + 
       COLUMN_AMOUNT + " INTEGER);"; 

     db.execSQL(query2); 


    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_TRANSACTIONS); 
     onCreate(db); 
    } 

    //Add new row 
    public void addUser(User user){ 
     ContentValues values = new ContentValues(); 
     values.put(COLUMN_NAME, user.get_name()); 
     values.put(COLUMN_ADDRESS1, user.get_address1()); 
     values.put(COLUMN_ADDRESS2, user.get_address2()); 
     values.put(COLUMN_ACCNO, user.get_accNo()); 
     values.put(COLUMN_PIN, user.get_PIN()); 
     values.put(COLUMN_BALANCE, user.get_currentbalance()); 

     SQLiteDatabase db = getWritableDatabase(); 
     db.insert(TABLE_USER, null, values); 
     db.close(); 
    } 
    public void addTransaction(Transaction transaction){ 
     ContentValues values = new ContentValues(); 
     values.put(COLUMN_DESCRIPTION, transaction.get_description()); 
     values.put(COLUMN_AMOUNT, transaction.get_amount()); 

     SQLiteDatabase db = getWritableDatabase(); 
     db.insert(TABLE_TRANSACTIONS, null, values); 
     db.close(); 
    } 

それは私がここのコンストラクタを持っている「トランザクション」オブジェクトを、取るために私DBhelperに持っているものHERESに

、私はここにゲッター/セッターのコードが含まれていません

04-23 23:33:21.425 18370-18370/marcusobyrne.bankingapp E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: marcusobyrne.bankingapp, PID: 18370 
                     java.lang.IllegalStateException: Could not find method saveTransaction(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'button2' 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
                      at android.view.View.performClick(View.java:6207) 
                      at android.widget.TextView.performClick(TextView.java:11094) 
                      at android.view.View$PerformClick.run(View.java:23639) 
                      at android.os.Handler.handleCallback(Handler.java:751) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6688) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 
:ここではそのわずか簡単な

public class Transaction { 

    private int _id; 
    private String _description; 
    private double _amount; 

    public Transaction(String _description, double _amount) { 
     this._description = _description; 
     this._amount = _amount; 
    } 

は、スタックトレースであるため、 INTEGERからREALへ2

private static final int DATABASE_VERSION = 2; 

変更COLUMN_AMOUNTに

+1

正確なクラッシュメッセージ/スタックトレースと、既に試した修正を提供してください。 – alzee

+0

@alzee残念なことに私のPCは仮想エミュレータを実行することができず、携帯電話の開発者モード、問題の別の部分で実行しています。( – azamean

+0

電話から実行していてもスタックトレースを取得できます –

答えて

0

変更DATABASE_VERSION。

+0

私はそれを試してみましたが、それは役に立たなかった、私はそれも1にロールバックしたので、既存のユーザーテーブルがクラッシュする原因となったからです! – azamean

+0

@azamean –

関連する問題