Chris Mowbray
Chris Mowbray

Reputation: 295

Set and access boolean values from various classes

I want to set a 'flag' when any update made to my database (add,del,edit) in android.I have done this by creating a getter and setter in my database adapter class:

Boolean updateOnlineDatabase =  false;

public Boolean updateNeeded() {
    return updateOnlineDatabase;
}

public void setUpdateNeeded(Boolean bool) {
    updateOnlineDatabase = bool;
}

so in other classes I have been calling

adapter.setUpdateNeeded(true);

But when i try to return the value using: updateNeeded() it always return false.

Adding full classes.

here the the database adapter class

public class MySQLiteAdapters {
SQLiteDatabase database_ob;
MySQLiteHelper openHelper_ob;
Context context;
Boolean updateOnlineDatabase =  false;

public MySQLiteAdapters(Context c) {
    context = c;
}

public MySQLiteAdapters opnToRead() {
    openHelper_ob = new MySQLiteHelper(context,
            openHelper_ob.DATABASE_NAME, null, openHelper_ob.DATABASE_VERSION);
    database_ob = openHelper_ob.getReadableDatabase();
    return this;

}
public void del(){
    database_ob.execSQL("DROP TABLE IF EXISTS " + openHelper_ob.TABLE_PLAYER_INFO);
}

public MySQLiteAdapters opnToWrite() {
    openHelper_ob = new MySQLiteHelper(context,
            openHelper_ob.DATABASE_NAME, null, openHelper_ob.DATABASE_VERSION);
    database_ob = openHelper_ob.getWritableDatabase();
    database_ob.execSQL("PRAGMA foreign_keys = ON;");
    return this;

}

public void Close() {
    database_ob.close();
}

public long insertDetails(String fname, String lname, String age, String heightValue, String weightValue, String positionValue, String teamValue, String notPicked, int match_no) {
    ContentValues contentValues = new ContentValues();
    contentValues.put(openHelper_ob.KEY_FNAME, fname);
    contentValues.put(openHelper_ob.KEY_LNAME, lname);
    contentValues.put(openHelper_ob.KEY_AGE, age);
    contentValues.put(openHelper_ob.KEY_HEIGHT, heightValue);
    contentValues.put(openHelper_ob.KEY_WEIGHT , weightValue);
    contentValues.put(openHelper_ob.KEY_POSITION, positionValue);
    contentValues.put(openHelper_ob.TEAM_ID, lookupOrCreateTeamID(teamValue));
    contentValues.put(openHelper_ob.KEY_PICKED, notPicked);
    contentValues.put(openHelper_ob.KEY_PICKED_NO, match_no);
    //testing the foreign key constraint
    //contentValues.put(openHelper_ob.TEAM_ID, "30");
    opnToWrite();
    long val = database_ob.insert(openHelper_ob.TABLE_PLAYER_INFO, null,
            contentValues);
    Close();
    return val;

}

public long lookupOrCreateTeamID(String name) {
    opnToWrite();
    Cursor c = database_ob.query(openHelper_ob.TABLE_TEAM_INFO, new String[] { openHelper_ob.KEY_TEAM_ID },
            openHelper_ob.KEY_TEAMNAME + " = ?", new String[] { name }, null, null, null);
    if (c.moveToFirst())
        return c.getLong(0);
    else {
        ContentValues cv = new ContentValues();
        cv.put(openHelper_ob.KEY_TEAMNAME, name);
        return database_ob.insert(openHelper_ob.TABLE_TEAM_INFO, null, cv);
    }

}

public long insertTeamDetails(String teamName) {
    ContentValues contentValues = new ContentValues();
    contentValues.put(openHelper_ob.KEY_TEAMNAME, teamName);
    opnToWrite();
    long val = database_ob.insert(openHelper_ob.TABLE_TEAM_INFO, null,
            contentValues);
    Close();
    Log.i("INSERT TEAM", "inserted" + teamName + "into" + openHelper_ob.TABLE_TEAM_INFO);
    return val;

}

// Return list of players depending on current team in alphabetical order
public Cursor queryName(String filterTeam) {
    String[] context = {filterTeam};
    opnToWrite();
    Cursor mCursor = database_ob.rawQuery("SELECT PLAYER_Local._id AS p_id, * FROM PLAYER_Local, TEAM_local " 
            + "WHERE PLAYER_Local.team_id = TEAM_local._id "
            + "AND team_name = ? "
            + "ORDER BY first_name ", context);

    return mCursor;
}

// Return the list of teams 
public Cursor queryTeamName() {
    String[] cols = {openHelper_ob.KEY_PLAYER_ID, openHelper_ob.KEY_TEAMNAME};
    opnToWrite();
    Cursor c = database_ob.query(openHelper_ob.TABLE_TEAM_INFO, cols, null,
            null, null, null, null);
    return c;

}

public Cursor queryAll(int nameId) {
    String[] cols = { openHelper_ob.KEY_PLAYER_ID, openHelper_ob.KEY_FNAME,
            openHelper_ob.KEY_LNAME, openHelper_ob.KEY_HEIGHT, openHelper_ob.KEY_WEIGHT, openHelper_ob.KEY_POSITION };
    opnToWrite();
    Cursor c = database_ob.query(openHelper_ob.TABLE_PLAYER_INFO, cols,
            openHelper_ob.KEY_PLAYER_ID + "=" + nameId, null, null, null, null);

    return c;

}

public Cursor queryRecord(int nameId) {
    String[] cols = {openHelper_ob.KEY_FNAME,openHelper_ob.KEY_LNAME};
    opnToWrite();
    Cursor c = database_ob.query(openHelper_ob.TABLE_PLAYER_INFO, cols,
            openHelper_ob.KEY_PLAYER_ID + "=" + nameId, null, null, null, null);

    return c;

}

public Cursor getPickedPlayer(int playerNo) {
    String[] cols = {openHelper_ob.KEY_FNAME,openHelper_ob.KEY_LNAME};
    opnToWrite();
    Cursor c = database_ob.query(openHelper_ob.TABLE_PLAYER_INFO, cols,
            openHelper_ob.KEY_PICKED_NO + "=" + playerNo, null, null, null, null);
    return c;

}

public long updateldetail(int rowId, String fname, String lname, String heightValue, String weightValue, String positionValue) {
    ContentValues contentValues = new ContentValues();
    contentValues.put(openHelper_ob.KEY_FNAME, fname);
    contentValues.put(openHelper_ob.KEY_LNAME, lname);
    contentValues.put(openHelper_ob.KEY_HEIGHT, heightValue);
    contentValues.put(openHelper_ob.KEY_WEIGHT , weightValue);
    contentValues.put(openHelper_ob.KEY_POSITION, positionValue);
    opnToWrite();
    long val = database_ob.update(openHelper_ob.TABLE_PLAYER_INFO, contentValues,
            openHelper_ob.KEY_PLAYER_ID + "=" + rowId, null);
    Close();
    return val;
}

public int deletOneRecord(int rowId) {
    // TODO Auto-generated method stub
    opnToWrite();
    int val = database_ob.delete(openHelper_ob.TABLE_PLAYER_INFO,
            openHelper_ob.KEY_PLAYER_ID + "=" + rowId, null);
    Close();
    //// add teamName to team_updates > del_player > player_ID
    return val;
}

 public List<String> getAllLabels(){
     List<String> labels = new ArrayList<String>();
    // Select All Query
        String selectQuery = "SELECT  * FROM " + openHelper_ob.TABLE_TEAM_INFO;

        opnToRead();
        Cursor cursor = database_ob.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                labels.add(cursor.getString(1));
            } while (cursor.moveToNext());
        }

        // closing connection
        cursor.close();
        database_ob.close();

        // returning lables

    return labels;

 }

public long playerPicked(int playerRecord, String string, int pos) {
    ContentValues contentValues = new ContentValues();
    contentValues.put(openHelper_ob.KEY_PICKED, string);
    contentValues.put(openHelper_ob.KEY_PICKED_NO, pos);
    opnToWrite();
    long val = database_ob.update(openHelper_ob.TABLE_PLAYER_INFO, contentValues,
            openHelper_ob.KEY_PLAYER_ID + "=" + playerRecord, null);
    Close();
    return val;
}

public Cursor queryUpdatedPlayerList(String team, String filter2) {
    String[] context = {team};
    opnToWrite();
    Cursor mCursor = database_ob.rawQuery("SELECT PLAYER_Local._id AS p_id, * FROM PLAYER_Local, TEAM_local " 
            + "WHERE PLAYER_Local.team_id = TEAM_local._id "
            + "AND team_name = ? "
            + "AND  p_id not in ("+filter2+")" 
            + "ORDER BY first_name ", context);

    return mCursor;
}

public void resetPickedPlayers() {
    ContentValues contentValues = new ContentValues();
    contentValues.put(openHelper_ob.KEY_PICKED, "NO");
    contentValues.put(openHelper_ob.KEY_PICKED_NO, 0);
    //testing the foreign key constraint
    //contentValues.put(openHelper_ob.TEAM_ID, "30");
    opnToWrite();
    long val = database_ob.update(openHelper_ob.TABLE_PLAYER_INFO, contentValues,null, null);
    Close();

}

public Boolean updateNeeded() {
    return updateOnlineDatabase;
}

public void setUpdateNeeded(Boolean bool) {
    updateOnlineDatabase = bool;
}

One of the classes where I set Boolean to True:

public class AddPlayerActivity extends Activity {
MySQLiteAdapters adapter; 
MySQLiteHelper helper;
EditText fnameEdit, lnameEdit, ageEdit, heightEdit, weightEdit, positionEdit;
String teamEdit, json, jsonString;
Button submitBtn, resetBtn;
SharedPreferences exmaple;
Editor editor;
public static final String PREFS = "examplePrefs";



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle extras = getIntent().getExtras();
    setContentView(R.layout.activity_add_player);
    fnameEdit = (EditText) findViewById(R.id.et_fname);
    lnameEdit = (EditText) findViewById(R.id.et_lname);
    ageEdit = (EditText) findViewById(R.id.et_age);
    heightEdit = (EditText) findViewById(R.id.et_height);
    weightEdit = (EditText) findViewById(R.id.et_weight);
    positionEdit = (EditText) findViewById(R.id.et_position);
    submitBtn = (Button) findViewById(R.id.btn_submit);
    resetBtn = (Button) findViewById(R.id.btn_reset);
    adapter = new MySQLiteAdapters(this);

    exmaple = getSharedPreferences(PREFS, 0);
    teamEdit = exmaple.getString("teamName", "cant find team");
    editor = exmaple.edit();
    json = exmaple.getString("ChangesJSON", "cant find Changes_json");

    submitBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            // sets flag to update online database.
            adapter.setUpdateNeeded(true);
            // add name to database
            String fnameValue = fnameEdit.getText().toString();
            String lnameValue = lnameEdit.getText().toString();
            String heightValue = heightEdit.getText().toString();
            String weightValue = weightEdit.getText().toString();
            String positionValue = positionEdit.getText().toString();
            String ageValue = ageEdit.getText().toString();
            String teamValue = teamEdit;
            adapter.insertDetails(fnameValue, lnameValue, ageValue, heightValue, weightValue, positionValue, teamValue, "NO",0);
            //// add above to team_updates > add_player > above

         // Logic to add changes to JSON to update remote database
            JSONObject MainObj = null;
            try {
                MainObj = new JSONObject(json);
            } catch (JSONException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            JSONObject obj = new JSONObject();
            try {
                obj.put("first_name", fnameValue);
                obj.put("last_name", lnameValue);
                obj.put("age", ageValue);
                obj.put("height", heightValue);
                obj.put("weight", weightValue);
                obj.put("position", positionValue);
                MainObj.accumulate("New_Players", obj);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            try {
                 jsonString = MainObj.toString(3);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            editor.putString("ChangesJSON", jsonString);
            editor.commit();



            Log.i("Submit Button", "CLICKED");
            fnameEdit.setText("");
            lnameEdit.setText("");
            heightEdit.setText("");
            weightEdit.setText("");
            positionEdit.setText("");
            ageEdit.setText("");
        }
    });

    resetBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            fnameEdit.setText("");
            lnameEdit.setText("");
            heightEdit.setText("");
            weightEdit.setText("");
            positionEdit.setText("");
            ageEdit.setText("");
        }
    });



}

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

}

Here is where I am calling updateNeeded()

if(adapter.updateNeeded()){
            JSONObject main = new JSONObject(exmaplePrefs.getString("jsonString", "cant find json"));
            JSONObject dbUpdates = new JSONObject(exmaplePrefs.getString("ChangesJSON", "cant find Changejson"));
            main.put("Team_Updates", dbUpdates);
            json = main.toString();
        }else{
             json = exmaplePrefs.getString("jsonString", "cant find json");
             // String json = "{\"twitter\":\"test\",\"country\":\"test\",\"name\":\"test\"}";
        }

Upvotes: 1

Views: 151

Answers (1)

Jon
Jon

Reputation: 1388

You're creating a new copy of the adapter here. If the other classes are doing the same then they are all talking to different instances.

adapter = new MySQLiteAdapters(this);

A singleton will help with this but you have to be careful to make it thread safe. If it's not synchronized and two threads try to use it at the same time you'll get a ConcurrencyException.

class MySingleton {
    private static MySingleton instance = null;

    // Prevent it from being instantiated
    MySingleton() {}

    public static synchronized MySingleton getInstance() {
        if (instance == null) {
            instance = this;
        }
        return instance;
    }
}

Then just use adapter = MySingleton.getInstance(); when you need to use it.

Upvotes: 2

Related Questions