0

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

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

}

4

2 に答える 2

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

        }
    }
}
于 2016-12-08T15:33:26.120 に答える
0

アプリケーションの実行中にアクティビティ間でオブジェクト (この場合はデータベース) を共有する最良の方法は、Application を拡張するクラスを作成することです。

このクラスは、アクティビティが作成される前に作成され、アプリが破棄されるまで実行されます。アクティビティからアプリケーション クラスにアクセスする方法は次のとおりです。

YourApplication app = (YourApplication) getAppliation();

アクティビティの場合と同様に、マニフェストにアプリケーションの名前を追加することを忘れないでください。

アップデート

私がすることは、最初にデータベースを処理するクラスを作成することです

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

アプリケーションへのハンドルを取得すると、どこからでもデータベースにアクセスできるようになります。

于 2012-04-28T23:26:39.603 に答える