当用户在应用程序启动时输入id时,我正在设置我的Main类中的id。我把它设置在一个名为GetSet.java的类中,它也有一个方法可以在被调用时返回它。所以我需要在名为MySQLitehelper.java的类中从第一个类中设置id,这样我就可以根据id集检索数据而不是硬编码。这将使我的应用程序动态而不是静态。这是我的代码:
/ ---- ----- MainActivity.java /
public class MainActivity extends Activity {
EditText etGWid;
Button OKbtn;
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etGWid = (EditText)findViewById(R.id.etGWID);
OKbtn = (Button)findViewById(R.id.OKbtn);
final GetSet obj_getset = new GetSet();
//MySQLitehelper db = new MySQLitehelper(null);
final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
// Create a shared preferences variable using the SharedPreferenceManager for storing GWids
SharedPreferences.Editor editor = app_preferences.edit(); // We also need a shared preferences editor to handle the shared preference requests
// Call the edit method (library function) to editor variable can edit the key, values.
editor.putInt("47688507", 47688507); // put in the shared preferences values of user GWids and give them a key for retrieval purposes
editor.putInt("1234567", 1234567);
editor.putInt("7654321", 7654321);
editor.commit(); //commit is necessary to save the shared preferences
OKbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String gwidCheck = etGWid.getText().toString(); //get the value user enters for GWid
if(app_preferences.contains(gwidCheck)) // this will check the stored shared preferences and compare with the value entered
{
Context context = getApplicationContext();
CharSequence text = "Login Successfull";
int duration = Toast.LENGTH_SHORT; //If it exists, then create a toast message for success
//etGWid.setText(""); // make the textbox empty
long setid = Long.parseLong(gwidCheck); // take the string gwid and convert to long
obj_getset.setId(setid); // set the gwid entered
Toast toast = Toast.makeText(context, text, duration);
toast.show();
intentfunction();
}
else
{
Context context = getApplicationContext();
CharSequence text = "Login Failed"; // If doesnt exist, create a toast for fail
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
});
}
private void intentfunction()
{
Intent intent = new Intent(this, SelectOptions.class);
//editText = (EditText) findViewById(R.id.editText1);
//editText = new EditText(this);
etGWid.setText(""); //set the edit text to blank
String message = "TestHello";
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
/*-----GetSet.java----*/
public class GetSet {
long gwid=0;
public void setId(long id)
{
gwid = id;
}
public long getId()
{
return gwid;
}
}
/ --- --- MySQLitehelper.java /
public class MySQLitehelper {
//public static final String TABLE_COMMENTS = "comments";
public static final String COLUMN_ID = "GWid";
public static final String COLUMN_DATE = "DateGWU";
public static final String COLUMN_LOCATION = "location";
public static final String COLUMN_TIME = "time";
public static final String TABLE_NAME = "UPDTable";
private static final String DATABASE_NAME = "UPDdb_version6";
private static final int DATABASE_VERSION = 6;
private final Context context;
GetSet getset = new GetSet();
public void GetIdForGwid(GetSet get)
{
getset=get;
}
// Database creation sql statement
private static final String DATABASE_CREATE = "CREATE TABLE " + TABLE_NAME +
" (" +COLUMN_ID+ " integer," + COLUMN_DATE + " VARCHAR," +
COLUMN_LOCATION+" VARCHAR," +COLUMN_TIME +" VARCHAR);";
// private static final String DATABASE_INSERT = "INSERT INTO " +TABLE_NAME +
// " Values (47688507,'DEC-07-2012','MARVIN 203','20:00');";
private static final String DATABASE_INSERT = "INSERT INTO " +TABLE_NAME + " (" +COLUMN_ID+ " ," + COLUMN_DATE + "," +
COLUMN_LOCATION+" ," +COLUMN_TIME +" )" +
" Values (47688507,'DEC-07-2012','MARVIN 203','20:00');";
DatabaseHelper dbhelper;
SQLiteDatabase db;
public MySQLitehelper(Context ctx)
{
this.context = ctx;
dbhelper = new DatabaseHelper(ctx);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context)
{
super(context,DATABASE_NAME, null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(DATABASE_CREATE); //execute create table
db.execSQL(DATABASE_INSERT); //execute insert query
db.execSQL("INSERT INTO " +TABLE_NAME + " (" +COLUMN_ID+ " ," + COLUMN_DATE + "," +COLUMN_LOCATION+" ," +COLUMN_TIME +" )" +" Values (47688507,'DEC-22-2012','OLD MAIN','23:00');");
db.execSQL("INSERT INTO " +TABLE_NAME + " (" +COLUMN_ID+ " ," + COLUMN_DATE + "," +COLUMN_LOCATION+" ," +COLUMN_TIME +" )" +" Values (1234567,'DEC-14-2012','FUNGER','12:00');");
db.execSQL("INSERT INTO " +TABLE_NAME + " (" +COLUMN_ID+ " ," + COLUMN_DATE + "," +COLUMN_LOCATION+" ," +COLUMN_TIME +" )" +" Values (7654321,'DEC-29-2012','GELMAN','22:00');");
db.execSQL("INSERT INTO " +TABLE_NAME + " (" +COLUMN_ID+ " ," + COLUMN_DATE + "," +COLUMN_LOCATION+" ," +COLUMN_TIME +" )" +" Values (47688507,'DEC-12-2012','IVORY','23:00');");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
Log.w(MySQLitehelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
// open the DB
public MySQLitehelper open() throws SQLException
{
System.out.println("Inside open function");
db = dbhelper.getWritableDatabase();
return this;
}
public void close()
{
dbhelper.close();
}
public void insertRecord(long gwid, String date, String location, String time)
{
ContentValues initialValues = new ContentValues();
initialValues.put(COLUMN_ID, gwid);
initialValues.put(COLUMN_DATE, date);
initialValues.put(COLUMN_LOCATION, location);
initialValues.put(COLUMN_TIME, time);
db.insert(TABLE_NAME, null, initialValues);
}
public Cursor getAllrows() //function to get all rows in the DB. Testing initially.
{
Cursor cur = db.rawQuery("SELECT * FROM "+TABLE_NAME, null);
return cur;
}
public Cursor getRecord() throws SQLException
{
Cursor mCursor =
db.query(true, TABLE_NAME, new String[] {COLUMN_ID,
COLUMN_DATE, COLUMN_LOCATION, COLUMN_TIME},
COLUMN_ID + "= 47688507", null, null, null, null, null); //HARDCODED. Please make it dynamic
if (mCursor != null)
{
mCursor.moveToFirst();
}
return mCursor;
}
}
我正在底层的上面的类中的getRecord()方法中检索它,而不是COLUMN_ID + "= 47688507
我希望从GetSet
类中获取设置值(getId
方法)并将其替换为47688507
。有什么建议吗?
答案 0 :(得分:3)
阅读“单例模式”,这是一种创建持久对象的方法,用于保存要从一个地方传递到另一个地方的信息。
但是,请记住,一旦在您的Activity上调用onPause()
,系统就可以完全销毁您的应用程序,并在以后重新构建它。这意味着即使单个类也无法保证在应用程序重新启动时您的数据将存在。您必须始终准备好在onCreate()方法中从持久存储中恢复您的状态。
以下是我使用单例类实现全局首选项持有者的方法:简而言之,任何有Context的地方,都可以调用Prefs.getPrefs()来获取首选项对象。在第一次调用时,它将从持久存储中读取首选项。在所有后续调用中,它只返回指向已加载对象的指针。如果您的应用程序被系统杀死并重新启动,则getPrefs()会根据需要无缝地重新读取首选项。
/**
* This is a singleton class to hold preferences.
*/
public class Prefs {
private static volatile Prefs instance = null;
// The values held by this class
String identity = null;
String apiUrl = "http://example.com/cgi-bin/api";
int interval = 3600; // when there's no activity
/**
* Return the single instance of this class, creating it
* if necessary. This method is thread-safe.
*/
public static Prefs getPrefs(Context ctx) {
if (instance == null) {
synchronized(Prefs.class) {
if (instance == null) {
instance = new Prefs();
instance.readPrefs(ctx);
}
}
}
return instance;
}
/**
* Re-read all preferences (you never need to call this explicitly)
*/
private void readPrefs(Context ctx) {
try {
SharedPreferences sp =
PreferenceManager.getDefaultSharedPreferences(ctx);
identity = sp.getString("identity", identity);
apiUrl = sp.getString("apiUrl", apiUrl);
interval = sp.getInt("interval", interval);
} catch (Exception e) {
Log.e(TAG, "exception reading preferences: " + e, e);
// TODO: report it
}
}
/**
* Save preferences; you can call this from onPause()
*/
public void savePrefs(Context ctx) {
try {
SharedPreferences.Editor sp =
PreferenceManager.getDefaultSharedPreferences(ctx).edit();
sp.putString("identity", identity);
sp.putString("apiUrl", apiUrl);
sp.putInt("interval", interval);
sp.commit();
} catch (Exception e) {
Log.e(TAG, "exception reading preferences: " + e, e);
// TODO: report it
}
}
/**
* Save preferences to a bundle. You don't really need to implement
* this, but it can make start-up go faster.
* Call this from onSaveInstanceState()
*/
public void onSaveInstanceState(Bundle state) {
state.putString("identity", identity);
state.putString("apiUrl", apiUrl);
state.putInt("interval", interval);
}
/**
* Recall preferences from a bundle. You don't really need to implement
* this, but it can make start-up go faster.
* Call this from onCreate()
*/
public void restoreInstanceState(Bundle state) {
identity = state.getString("identity");
apiUrl = state.getString("apiUrl");
interval = state.getInt("interval");
}
}
答案 1 :(得分:1)
答案 2 :(得分:0)
我认为,您应该能够使用实例变量obj_getset
来设置id
obj_getset.setid(mCursor.COLUMN_ID)
在getRecord
函数中,然后在需要时以相同的方式检索
obj_getset.getID()