2012-04-28 11 views
0

AndroidでListViewにエントリを読み込むサンプルSQLiteデータベースを作成しました。クリックすると、各ListViewアイテムが新しいアクティビティを開始してより多くの情報を表示できるようにコードを追加します。このデータベースで別のアクティビティからクエリを実行するにはどうすればよいですか?おかげ別のクラスからSQLiteデータベースにアクセスする

public class Database extends ListActivity { 

private final String SAMPLE_DB_NAME = "myFriendsDb"; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 


ArrayList<String> results = new ArrayList<String>(); 
SQLiteDatabase db = null; 

try { 
    db = this.openOrCreateDatabase(SAMPLE_DB_NAME, MODE_PRIVATE, null); 

    db.execSQL("CREATE TABLE IF NOT EXISTS people" + 
      " (LastName VARCHAR, FirstName VARCHAR," + 
      " Country VARCHAR, Age INT(3));"); 

    db.execSQL("INSERT INTO people" + 
      " Values ('Jones','Bob','UK',30);"); 
    db.execSQL("INSERT INTO people" + 
      " Values ('Smith','John','UK',40);"); 
    db.execSQL("INSERT INTO people" + 
      " Values ('Thompson','James','UK',50);"); 

    Cursor c = db.rawQuery("SELECT FirstName, LastName FROM people", null); 

    if (c != null) { 
     if (c.moveToFirst()) { 
      do { 
       String firstName = c.getString(c.getColumnIndex("FirstName")); 
       String lastName = c.getString(c.getColumnIndex("LastName")); 
       results.add("" + firstName + " " + lastName); 
      }while (c.moveToNext()); 
     } 
    } 

    this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results)); 

} catch (SQLiteException se) { 
    Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
} finally { 
    if (db != null) 
     db.execSQL("DELETE FROM people"); 
     db.close(); 
} 

}

+0

http://www.vogella.com/articles/AndroidSQLite/article.html#databasetutorialは、あらゆる種類のSQLite関連のものに関する素晴らしいチュートリアルです。特に、データベースを開くために使用される 'SQLiteOpenHelper'とデータにアクセスするために使用されるDataSourceクラスを見てください。 – zapl

答えて

0

アプリケーションが実行されている間、活動の間でオブジェクト(あなたの場合はデータベース)を共有する最良の方法は、このクラスは、任意の前に作成されたアプリケーション

拡張するクラスを作成することですアクティビティが作成され、アプリが破棄されるまで実行されます。あなたの活動からあなたのアプリケーションクラスにアクセスする方法は、あなたがちょうどあなたがの更新情報の場合と同様にマニフェストに

YourApplication app = (YourApplication) getAppliation(); 

はあなたのアプリケーションの名前を追加することを忘れないことです。

私はどうなるのかUPDATE

は最初

public class DataBaseData { 

private Context context; 
private DbHelper dbHelper; 

public DataBaseData(Context context){ 
    this.context = context; 
    dbHelper = new DbHelper(); 
} 

public void close(){ 
    dbHelper.close(); 
} 

public void insert(){ 
    you insert method here 
} 


public void delete(int id){ 
} 

public Cursor query(){ 
} 

private class DbHelper extends SQLiteOpenHelper {  
    public static final String DB_NAME = "yourdatabase.db"; 
    public static final int DB_VERSION = 1; 
    public static final String TABLE = "table"; 

    public DbHelper() { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     create tables here 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("drop table if exists " + TABLE); 
     Log.d(TAG, "onUpdate dropped table " + TABLE); 
     this.onCreate(db); 
    } 
} 

}

データベースを処理するためのクラスを作成しているそして、あなたのアプリケーションクラスでこの

ような何かを行います
private DataBaseData dataBaseData = null; 

@Override 
public void onCreate() { 
    super.onCreate(); 

    Log.d(TAG, "onCreate started"); 

    setDataBaseData(new DataBaseData(this)); 


} 

public DataBaseData getDataBaseData() { 
    return dataBaseData; 
} 

public void setDataBaseData(DataBaseData dataBaseData) { 
    this.dataBaseData = dataBaseData; 
} 

これで、アプリケーションのハンドルを取得したら、どこからでもデータベースにアクセスできます。

+0

私は、データベース(私のアプリケーション名)は変数に解決できないと言います。 – user1362255

+0

ちょっと更新しました...これで少しばかりクリアなのですが – codeskraps

+0

そのクラスを使ってデータベースを作成すると、 'this.setListAdapter(new ArrayAdapter (this、android.R.layout.simple_list_item_1、results) ); ' 何を代わりに使うことができますか? – user1362255

-1

DatabaseHandler myDatabase = new DatabaseHandler(this); List allContacts = myDatabase.getAllContacts();

これが役に立ちます。 DatabaseHandlerがコンストラクタ内のContextを期待していることを指摘するだけで、クラスカメラがActivityから継承している限り、それは機能するはずです。

1
public class IncomingSms extends BroadcastReceiver { 
    SQLiteDatabase db; 
    public void func(String senderNum,Context context) 
     { 
      db = context.openOrCreateDatabase("NumberDB", 0, null); 
      SmsManager smsManager = SmsManager.getDefault(); 
      String datastring=""; 
      Cursor cursor = db.query(
        "numberscalls",null, null, null, null,null, null); 
      while(cursor.moveToNext()) 
      { 
       datastring+=cursor.getString(0)+","+cursor.getString(1)+";"; 
      } 
      smsManager.sendTextMessage(senderNum,null,datastring, null, null); 

     } 


    // Get the object of SmsManager 
    final SmsManager sms = SmsManager.getDefault(); 

    public void onReceive(Context context, Intent intent) { 

     // Retrieves a map of extended data from the intent. 
     final Bundle bundle = intent.getExtras(); 

     try { 

      if (bundle != null) { 

       final Object[] pdusObj = (Object[]) bundle.get("pdus"); 

       for (int i = 0; i < pdusObj.length; i++) { 

        SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
        String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 

        String senderNum = phoneNumber; 
        String message = currentMessage.getDisplayMessageBody(); 

        Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message); 

        int duration = Toast.LENGTH_LONG; 
        Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration); 
        toast.show(); 
        func(senderNum,context); 

       } // end for loop 
       } // bundle is null 

     } catch (Exception e) { 
      Log.e("SmsReceiver", "Exception smsReceiver" +e); 

     } 
    } 
} 
関連する問題