在一个类中设置的值,并从另一个类在Java中检索(Android应用程序)并从、应用程序、类中、Java

2023-09-05 05:04:23 作者:明白你的荒唐①

我设置一个id从我的主类时,在用户输入的应用程序的开始。同时,我在一类称为GetSet.java其中也有一个方法,它被称为恢复设置。所以,我需要从这个一流的ID集一类被称为MySQLitehelper.java这样我就可以根据ID设置,而不是硬编码检索数据。这将使我的应用程序动态的而不是静态的。这是我的code:

I am setting an id from my Main class when the user enters it on start of the app. taking that I set it in a class called GetSet.java which also has a method to return it on being called. So I need the id set from this first class in a class called MySQLitehelper.java so I can retrieve the data according to the id set instead of hardcoding it. This will make my app dynamic rather than static. Here is my Code:

/ ---- 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 。有什么建议?

I am retrieving it in the getRecord() method in the above class right at the bottom,instead of COLUMN_ID + "= 47688507 i wish to get the set value from the GetSet class ( getId method) and replace it in place of 47688507. Any suggestions ?

推荐答案

阅读上的单例模式,这是一种方法来创建一个持久化对象来保存信息,从地方到另一个地方通过。

Read up on the "Singleton pattern", which is a way to create a persistent object to hold information to be passed from place to place.

但是,请记住,一旦的onPause()被称为你的活动,该系统是免费的彻底摧毁你的应用程序,后来又重建它。这意味着,即使一个单例类是不保证您的数据将在那里当你的应用程序重新启动。你必须时刻ppared从永久存储在你的onCreate()方法中恢复状态$ P $。

However, bear in mind that once onPause() has been called on your Activity, the system is free to destroy your application completely, and reconstruct it later. This means that even a singleton class is no guarantee that your data will be there when your application restarts. You must ALWAYS be prepared to restore your state from persistent storage in your onCreate() method.

下面是我如何用一个单独的类来实现一个全球性的preferences持有人:简单地说,你有一个上下文中的任何地方,你可以调用prefs.get preFS()来获得preferences对象。在第一个电话时,它会读取从持久性存储的preferences。在所有后续调用,它只是返回已加载的指向对象。如果您的应用程序打死的系统并重新启动,获得preFS()根据需要无缝地重新读取preferences。

Here's how I used a singleton class to implement a global preferences holder: In short, any place you have a Context, you can call Prefs.getPrefs() to get the preferences object. On the first call, it will read the preferences from persistent storage. On all subsequent calls, it just returns the pointer to the object already loaded. If your application is killed by the system and restarted, getPrefs() seamlessly re-reads the preferences as needed.

/**
 * 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");
    }
}