Persistant Variables

by Kirk » Tue, 14 Apr 2009 02:27:28 GMT


Sponsored Links
 I have an activity that responds to the accelerometer. When the device
is rotated, a different layout is displayed based on whether the phone
is portrait or landscape. I notice, however, that each time the phone
is rotated, the onCreate method is called and all of my instance
variables are reset. Is there any way to make the values of these
variables persists?

Thanks,

Kirk
--~--~---------~--~----~------------~-------~--~----~



Persistant Variables

by MrChaz » Tue, 14 Apr 2009 02:32:11 GMT


 Take at look at on onSaveInstanceState()
You can use that to save things into the bundle that is passed to
onCreate()



--~--~---------~--~----~------------~-------~--~----~


Sponsored Links


Persistant Variables

by Kirk - Actual Metrics » Tue, 14 Apr 2009 04:07:27 GMT


 Thanks that works great. I feel kind of stupid for not figuring that
out on my own now.  I do think it's silly for onCreate to be called
again on rotate; there should be an onOrientationChange event or
something.

Kirk




--~--~---------~--~----~------------~-------~--~----~



Persistant Variables

by MrChaz » Tue, 14 Apr 2009 04:26:32 GMT


 I think that there is a permission for saying that you will handle it
and another event that you can hook.
But I've not explored those :)

On Apr 13, 8:49pm, Kirk - Actual Metrics <kirk.mora...@gmail.com>




--~--~---------~--~----~------------~-------~--~----~



Persistant Variables

by Dianne Hackborn » Tue, 14 Apr 2009 05:54:02 GMT


 The docs explain why it works the way it does.

On Mon, Apr 13, 2009 at 12:49 PM, Kirk - Actual Metrics <







-- 
Dianne Hackborn
Android framework engineer
hack...@android.com

Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails.  All such
questions should be posted on public forums, where I and others can see and
answer them.

--~--~---------~--~----~------------~-------~--~----~



Other Threads

1. simplecursoradapter

If I pass a cursor to a simplecursoradapter, do I still need to close the
cursor?  if so when: after I pass it to the adapter or when the adapter is
finished?

thanks

-- 

2. ERROR:- no such table: TABLE: , while compiling: SELECT _id, network, url FROM TABLE

Hi,

I have followed the instructions from this site to the letter
 http://www.***.com/ 
but to no avail. Each time I run the code suggested, the Eclipse de{*filter*}
keep throwing the following error
no such table: TABLE: , while compiling: SELECT _id, network, url FROM
TABLE.

I created the database using SQLite Browser and ran the emulator's shell and
can see that the database was there.

Here is the code that I am implementing to manage the database:
package com.rodney.IET_Events_Widget;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

public class DataBaseHelper extends SQLiteOpenHelper {

     //The Android's default system path of your application database.
    private static String DB_PATH             =
"/data/data/com.rodney.IET_Events_Widget/databases/";
    private static final String DB_NAME     = "local_network_db";
    private static final String DB_TABLE     = "local_network";
    public static final String KEY_NETWORK     = "network";
    public static final String KEY_URL         = "url";
    public static final String KEY_ROWID     = "_id";
    private SQLiteDatabase myDataBase;
    private final Context myContext;

    /**
     * Constructor
     * Takes and keeps a reference of the passed context in order to access
to the application assets and resources.
     * @param context
     */
    public DataBaseHelper(Context context) {

        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }

  /**
     * Creates a empty database on the system and rewrites it with your own
database.
     * */
    public void createDataBase() throws SQLException{

        boolean dbExist = checkDataBase();

        if(dbExist){
            //do nothing - database already exist
        }else{

            //By calling this method and empty database will be created into
the default system path
            //of your application so we are gonna be able to overwrite that
database with our database.
            this.getReadableDatabase();

            try {

                copyDataBase();

            } catch (IOException e) {

                throw new Error("Error copying database");

            }
        }

    }

    /**
     * Check if the database already exist to avoid re-copying the file each
time you open the application.
     * @return true if it exists, false if it doesn't
     */
    private boolean checkDataBase(){

        SQLiteDatabase checkDB = null;

        try{
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);

        }catch(SQLiteException e){

            //database does't exist yet.

        }

        if(checkDB != null){

            checkDB.close();

        }

        return checkDB != null ? true : false;
    }

    /**
     * Copies your database from your local assets-folder to the just
created empty database in the
     * system folder, from where it can be accessed and handled.
     * This is done by transferring bytestream.
     * */
    private void copyDataBase() throws IOException{

        //Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DB_NAME);

        // Path to the just created empty db
        String outFileName = DB_PATH + DB_NAME;

        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        //transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }

        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

    }

    public void openDataBase() throws SQLException{

        //Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);

    }

    @Override
    public synchronized void close() {

            if(myDataBase != null)
                myDataBase.close();

            super.close();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{

    }

      /**
     * Return a Cursor over the list of all notes in the database
     *
     * @return Cursor over all notes
     */

    public Cursor fetchAll() {
        return myDataBase.query("local_network", new String[] {KEY_ROWID,
KEY_NETWORK,KEY_URL}, null, null, null, null, null);
    }


}

And here is the code for the implementation in my ListView Activity:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cfg_activity);
        mDbHelper = new DataBaseHelper(this);
        mDbHelper.openDataBase();
        fillData();
        saveButton();
        cancelButton();
        Intent intent = getIntent();
        Bundle extras = intent.getExtras();
        if (extras != null) {
            mAppWidgetId = extras.getInt(
                    AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);
        }
    }

.........
...........
.................

private void fillData() {
            // Get all of the rows from the database and create the item
list
            mNetworkCursor = mDbHelper.fetchAll();
            startManagingCursor(mNetworkCursor);

            // Create an array to specify the fields we want to display in
the list (only TITLE)
            String[] from = new String[]{DataBaseHelper.KEY_NETWORK};

            // and an array of the fields we want to bind those fields to
(in this case just text1)
            int[] to = new int[]{R.id.text1};

            // Now create a simple cursor adapter and set it to display
            SimpleCursorAdapter iet_networks =  new
SimpleCursorAdapter(this, R.layout.ln_rows, mNetworkCursor, from, to);
            setListAdapter(networks);
        }

Any clues or help will be greatly appreciated, let me know if more detail is
required.


Many thanks in advance

Rodney

-- 

3. You should use query bindings with "?" in SQLite

4. Galaxy S Video Out on Action.

5. Market question about copy protection

6. review SAMDROID TURBO (backported DVM 2.2)

7. Blepak TSel Galaxy