android 线程里面的循环不执行

new Thread(new Runnable() {
@Override
public void run() {
person.name = "QQQ";
person.age = 999;
ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
for (int i =0;i<10;i++){
db.insert("person", null, cv);
}

        }
    }).start();

            就创建了一个列表,想在线程中循环插入信息     请问怎么解决

final SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
new Thread(new Runnable() {
@Override
public void run() {
ContentValues cv1 = new ContentValues();
cv1.put("name", "张");
cv1.put("age", 18);
for (int i =0;i<10;i++){ db.insert("person", null, cv1); db.insert("person", null, cv1); }

            Cursor c= db.rawQuery("SELECT * FROM person", null);
            while (c.moveToNext()) {
                    int _id = c.getInt(c.getColumnIndex("_id"));
                    String name = c.getString(c.getColumnIndex("name"));
                    int age = c.getInt(c.getColumnIndex("age"));
                    Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
            }
    }

}).start();
你这样试试

循环怎么不执行? 你每次循环插入的数据是相同的

循环是肯定执行了的,你可以打Log看输出,如果插入后只有一条那只能说明和数据库设计有关系

  1. public class MainActivity extends AppCompatActivity {
    public static SQLiteDatabase db;
    public static Person person;
    public Thread thread1,thread2,thread3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
    db.execSQL("DROP TABLE IF EXISTS person");

    db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
    
     person = new Person();
    person.name = "john";
    person.age = 30;;
    db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{person.name, person.age});
    
    person.name = "david";
    person.age = 33;
    
    ContentValues cv = new ContentValues();
    cv.put("name", person.name);
    cv.put("age", person.age);
    
    person.name = "dasdd";
    person.age = 33;
    
    ContentValues cv1 = new ContentValues();
    cv1.put("name", person.name);
    cv1.put("age", person.age);
    person.name = "dasdd";
    person.age = 88;
    ContentValues cv2 = new ContentValues();
    cv2.put("name", person.name);
    cv2.put("age", person.age);
    db.insert("person", null, cv);
    db.insert("person", null, cv1);
    db.insert("person", null, cv2);
    

    /* Cursor c = adb.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"});
    while (c.moveToNext()) {
    int _id = c.getInt(c.getColumnIndex("_id"));
    String name = c.getString(c.getColumnIndex("name"));
    int age = c.getInt(c.getColumnIndex("age"));
    Log.i("adb", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
    }*/
    thread1 = new Thread(new Runnable() {
    @Override
    public void run() {
    person.name = "abc";
    person.age = 100;
    ContentValues cv = new ContentValues();
    cv.put("name", person.name);
    cv.put("age", person.age);
    person.name = "axt";
    person.age = 67;
    ContentValues cv1 = new ContentValues();
    cv1.put("name", person.name);
    cv1.put("age", person.age);
    int i =1;
    while (i<10){
    db.insert("person", null, cv);
    db.insert("person", null, cv1);
    i++;
    }
    }
    });
    thread1.start();;
    thread2 = new Thread(new Runnable() {
    @Override
    public void run() {
    person.name = "张";
    person.age = 47;
    ContentValues cv1 = new ContentValues();
    cv1.put("name", person.name);
    cv1.put("age", person.age);
    person.name = "QQQ";
    person.age = 999;
    ContentValues cv = new ContentValues();
    cv.put("name", person.name);
    cv.put("age", person.age);
    for (int i =0;i<10;i++){

                db.insert("person", null, cv);
                db.insert("person", null, cv1);
            }
        }
    });
    thread2.start();
    
    thread3 =new Thread(new Runnable() {
        @Override
        public void run() {
            Cursor  c= db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"30"});
            while (c.moveToNext()) {
                int _id = c.getInt(c.getColumnIndex("_id"));
                String name = c.getString(c.getColumnIndex("name"));
                int age = c.getInt(c.getColumnIndex("age"));
                Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
                //c.close();
            }
        }
    });
    thread3.start();
    

final SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 0x123){
new Thread(new Runnable() {
@Override
public void run() {
Cursor c = null;
try {
c = db.rawQuery("SELECT * FROM person", null);
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}
}catch (Throwable e) {
} finally {
if(c != null){
c.close();
}
}
}
}).start();
}
}
};
db.execSQL("DROP TABLE IF EXISTS person");
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
new Thread(new Runnable() {
@Override
public void run() {
ContentValues cv1 = new ContentValues();
cv1.put("name", "张");
cv1.put("age", 18);
for (int i =0;i<10;i++){ db.insert("person", null, cv1); db.insert("person", null, cv1); }
//插入完成发送消息
handler.sendEmptyMessage(0x123);
}
}).start();
这样喽

public class MainActivity extends AppCompatActivity {
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseManager.initializeInstance(getApplicationContext());
db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
Cursor c = db.rawQuery("SELECT * FROM person", null);
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}
DatabaseManager.initializeInstance(getApplicationContext());
new Thread(new Runnable() {
@Override
public void run() {
db =DatabaseManager.getInstance().openDatabase();
ContentValues cv1 = new ContentValues();
cv1.put("name", "张");
cv1.put("age", 18);
db.insert("person", null, cv1);
DatabaseManager.getInstance().closeDatabase();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
db =DatabaseManager.getInstance().openDatabase();
ContentValues cv1 = new ContentValues();
cv1.put("name", "李");
cv1.put("age", 17);
db.insert("person", null, cv1);
DatabaseManager.getInstance().closeDatabase();
}
}).start();

}

我这样写DatabaseManager.initializeInstance(getApplicationContext());里面的getApplicationContext()是有浪线的
新建了一个DatabaseManager的类 和他写的是一样的 请问有什么问题呀

getApplicationContext()是有浪线的 ?什么意思