2014-02-09 2 views
1

Я хочу установить флаг, когда любое обновление, сделанное в моей базе данных (добавление, изменение, редактирование) в android.I сделал это, создав геттер и сеттер в моем адаптере базы данных класс:Установить и получить доступ к логическим значениям из разных классов

Boolean updateOnlineDatabase = false; 

public Boolean updateNeeded() { 
    return updateOnlineDatabase; 
} 

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

так и в других классах я называю

adapter.setUpdateNeeded(true); 

Но когда я пытаюсь вернуть значение с помощью: updateNeeded() он всегда возвращает ложь.

Добавление классов.

здесь адаптер базы данных класса

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; 
} 

Один из классов, где я установил Boolean Истина:

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; 
} 

}

Вот где я звоню 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\"}"; 
     } 
+0

Просьба предоставить дополнительную информацию о классе, который вызывает методы setUpdateNeeded и updateNeeded? Возможно, код этого класса поможет. – ThePerson

+0

@NutterzUK Конечно, обновление добавлено –

ответ

2

Здесь вы создаете новую копию адаптера. Если другие классы делают то же самое, то все они разговаривают с разными экземплярами.

adapter = new MySQLiteAdapters(this);

одноплодной поможет с этим, но вы должны быть осторожны, чтобы сделать его поточно. Если он не синхронизирован, и два потока попытаются использовать его одновременно, вы получите 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; 
    } 
} 

Тогда просто используйте adapter = MySingleton.getInstance();, когда вам нужно его использовать.

Смежные вопросы