Opening Android Sqlite Database in Fragment

25,013

Try this

 SqlDatabase dbEntry = new SqlDatabase(getActivity());

instead of

 SqlDatabase dbEntry = new SqlDatabase(this);
Share:
25,013
user2466888
Author by

user2466888

Updated on April 15, 2020

Comments

  • user2466888
    user2466888 about 4 years

    I'm trying to open and write to a Sqlite database in Android. According to the log output, it's not opening. I know that my syntax isn't great and I should be saving from a Party object instead of straight from the fragment interface, but my focus is really on the the process. Any help would be super helpful!

    package com.android.sqldatabase.sqldatabaseapp;
    
    //imports deleted to save space
    
    public class SqlDatabase {
    
    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_PARTY = "party_date";
        public static final String KEY_STATE = "state";
    public static final String KEY_JDATE = "j_date";
    public static final String KEY_JTITLE = "j_title";
    public static final String KEY_JENTRY = "j_entry";
    public static final String KEY_JRATING = "j_rating";
        public static final String KEY_JENTRYEDITION = "j_entryEdition";
    
    private static final String DATABASE_NAME = "PartyInfoDB";
    
        private static final String DATABASE_READABLE = "readableInformation";
    private static final String DATABASE_WRITEABLE = "writeableInformation";
    private static final int DATABASE_VERSION = 20141;
    
    private DbHelper mHelper;
    
    private final Context mContext;
    
    private SQLiteDatabase mDatabase;
    
    private static class DbHelper extends SQLiteOpenHelper {
    
        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    
        @Override
        //Set up database here
            public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE " + DATABASE_READABLE + " (" + 
                     //Column name     Type of variable
                    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                    KEY_NAME + " TEXT NOT NULL, " +
                    KEY_PARTY + " TEXT NOT NULL, " +
                    KEY_STATE + " TEXT NOT NULL);"
    
            db.execSQL("CREATE TABLE " + DATABASE_WRITEABLE + " (" +
                    KEY_JENTRYEDITION + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_JDATE + " INTEGER NOT NULL, " +
                    KEY_JTITLE + " TEXT NOT NULL, " +
                    KEY_JRATING + " FLOAT NOT NULL, " +
                    KEY_JENTRY + " TEXT NOT NULL);"
                    );
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_READABLE);
            db.execSQL("DROP IF TABLE EXISTS " + DATABASE_WRITEABLE);
            onCreate(db);
        }
    
    }
    
    public SqlDatabase (Context c) {
        mContext = c;
    }
    
    public SqlDatabase open() throws SQLException {
        //Set up the helper with the context
        mHelper = new DbHelper (mContext);
        //Open the database with our helper
        mDatabase = mHelper.getWritableDatabase();
        return this;
    }
    
    
        mHelper.close();
            }
    
    public long createEntry(String title, String entry, float ratingBar,
            String date) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_JDATE, date);
        cv.put(KEY_JTITLE, title);
        cv.put(KEY_JRATING, ratingBar);
        cv.put(KEY_JENTRY, date);
        return mDatabase.insert(DATABASE_WRITEABLE, null, cv); 
    }
    }
    

    And here is the interface screen:

    package com.android.sqldatabase.sqldatabaseapp;
    
    //imports deleted to save space
    
    public class LogFragment extends Fragment implements OnClickListener{
        private String TAG;
    private String TAG1;
    private String mName;
    EditText mSqlTitle, mSqlEntry;
    Button mSaveButton;
    RatingBar mSqlRatingBar;
    private TextView mSqlDate;
    private Party mParty;
    private Date mDate;
    private Context mContext;
    
    //Our onCreate method
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        }
    
    //Inflate our fragment into the container
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle    
        savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_log, parent, false);
    
        mDate = new Date();
        mSqlTitle = (EditText)v.findViewById(R.id.review_title);
        mSqlEntry = (EditText)v.findViewById(R.id.review_entry_textbox);
        mSaveButton = (Button)v.findViewById(R.id.sqlsave_button);
        mSaveButton.setOnClickListener(this);
        mSqlRatingBar = (RatingBar)v.findViewById(R.id.party_ratings_bar);
        mSqlDate = (TextView)v.findViewById(R.id.review_date);
    
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
        String sdfString = sdf.format(mDate);
        mSqlDate.setText(sdfString);
    
        return v;
    }
    
    //Our 2 buttons
    public void onClick(View arg0) {
    switch (arg0.getId()) {
        case R.id.sqlsave_button:
    
            boolean didItWork = true;
            try {
            //Convert our edit texts to strings
            String  title = mSqlTitle.getText().toString();
            String  entry = mSqlEntry.getText().toString();
            float ratingBar = mSqlRatingBar.getRating();
            String date = mSqlDate.getText().toString();
    
            //Write all of this to the database
            SqlDatabase dbEntry = new SqlDatabase(this);
            dbEntry.open();
            Log.i(TAG1, "Database opened.");
            dbEntry.createEntry(title, entry, ratingBar, date);
            dbEntry.close();
    
            } catch (Exception e) {
                didItWork = false;
                Log.e(TAG, "Database didn't upgrade when button pressed");
            } finally {
                if(didItWork) {
                    Toast toast = Toast.makeText(getActivity(),   
                                        R.string.save_toast, Toast.LENGTH_LONG);
                        toast.show();
                }
        }
    
        break;
                R.id.cancelButton
                //INSET CANCEL BUTTON HERE
        }
    }
    }